/ Hex Artifact Content
Login

Artifact 72f5a4b95be486170104779aeef000423acabf55ac0c661afdae889be72c8922:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d  }.  /* TEXT->NUM
26d0: 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e  ERIC is many->on
26e0: 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73  e.  Hence, it is
26f0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e   important to in
2700: 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a  validate the.  *
2710: 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  * string represe
2720: 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f  ntation after co
2730: 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69  mputing a numeri
2740: 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65  c equivalent, be
2750: 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73  cause the.  ** s
2760: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2770: 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62  tion might not b
2780: 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20  e the canonical 
2790: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66  representation f
27a0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65  or the.  ** nume
27b0: 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b  ric value.  Tick
27c0: 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35  et [343634942dd5
27d0: 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38  4ab57b7024] 2018
27e0: 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65  -01-31. */.  pRe
27f0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  c->flags &= ~MEM
2800: 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  _Str;.}../*.** P
2810: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2820: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2830: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
2840: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
2850: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
2860: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
2870: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
2880: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
2890: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
28a0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
28b0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
28c0: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
28d0: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
28e0: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
28f0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2900: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2910: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2920: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2930: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2940: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
2950: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
2960: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
2970: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
2980: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
2990: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
29a0: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
29b0: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
29c0: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
29d0: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
29e0: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
29f0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2a00: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2a10: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a  LITE_AFF_BLOB:.*
2a20: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2a30: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
2a40: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
2a50: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
2a60: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
2a70: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
2a80: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
2a90: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2aa0: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2ab0: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2ac0: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2ad0: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2ae0: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2af0: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2b00: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2b10: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
2b20: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
2b30: 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79  assert( affinity
2b40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
2b50: 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79  EGER || affinity
2b60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
2b70: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  L.             |
2b80: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
2b90: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
2ba0: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2bb0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2bc0: 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49  )==0 ){ /*OPTIMI
2bd0: 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
2be0: 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  /.      if( (pRe
2bf0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2c00: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
2c10: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
2c20: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61  gs & MEM_Str ) a
2c30: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2c40: 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20  ity(pRec,1);.   
2c50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2c60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
2c70: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
2c80: 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  c);.      }.    
2c90: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  }.  }else if( af
2ca0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2cb0: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
2cc0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
2cd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
2ce0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
2cf0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
2d00: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
2d10: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2d20: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2d30: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2d40: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2d50: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2d60: 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20 62  ion.  It would b
2d70: 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72 65  e harmless to re
2d80: 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72 73  peat the convers
2d90: 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20 74  ion if .    ** t
2da0: 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
2db0: 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62 75  a string rep, bu
2dc0: 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65 73  t it is pointles
2dd0: 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73 65  s to waste those
2de0: 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63 6c  .    ** CPU cycl
2df0: 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 30  es. */.    if( 0
2e00: 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ==(pRec->flags&M
2e10: 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50 54  EM_Str) ){ /*OPT
2e20: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
2e30: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
2e40: 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d  pRec->flags&(MEM
2e50: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20  _Real|MEM_Int)) 
2e60: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
2e70: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
2e80: 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31 29  fy(pRec, enc, 1)
2e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2ea0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2eb0: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2ec0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2ed0: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2ee0: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2ef0: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2f00: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2f10: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2f20: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2f30: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2f40: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2f50: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2f60: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2f70: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2f80: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2f90: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2fa0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2fb0: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2fc0: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2fd0: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2fe0: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2ff0: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
3000: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
3010: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
3020: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
3030: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
3040: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
3050: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
3060: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
3070: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
3080: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
3090: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
30a0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
30b0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
30c0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
30d0: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
30e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
30f0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
3100: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
3110: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
3120: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
3130: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
3140: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
3150: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
3160: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
3170: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
3180: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
3190: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
31a0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
31b0: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
31c0: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
31d0: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
31e0: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
31f0: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
3200: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
3210: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
3220: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
3230: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
3240: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
3250: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
3260: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
3270: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
3280: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
3290: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
32a0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
32b0: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
32c0: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
32d0: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
32e0: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
32f0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
3300: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
3310: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3320: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
3330: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
3340: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
3350: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
3360: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
3370: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
3380: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
3390: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
33a0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
33b0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
33c0: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
33d0: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
33e0: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
33f0: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
3400: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3410: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3420: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3430: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3440: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3450: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3460: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
3470: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
3480: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
3490: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
34a0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
34b0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
34c0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
34d0: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
34e0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
34f0: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3500: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3510: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3520: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3530: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3540: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3550: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3560: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3570: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
3580: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
3590: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
35a0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
35b0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
35c0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
35d0: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
35e0: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
35f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3600: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3610: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3620: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3630: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3640: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3650: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3660: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
3670: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3680: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
3690: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
36a0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
36b0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
36c0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
36d0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
36e0: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
36f0: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3700: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3710: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3720: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3730: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3740: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3750: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3760: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
3770: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3780: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3790: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
37a0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
37b0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
37c0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
37d0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
37e0: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
37f0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3800: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3810: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3820: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3830: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3840: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3850: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3860: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
3870: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
3880: 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69 74  ) = c;.    sqlit
3890: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
38a0: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
38b0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
38c0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
38d0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
38e0: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
38f0: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3910: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3920: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
3930: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
3940: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
3950: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3960: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3970: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3980: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3990: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
39a0: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
39b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
39c0: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
39d0: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
39e0: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
39f0: 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a  z;.    }.    *(z
3a00: 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20 20  Csr++) = ']';.  
3a10: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65    if( f & MEM_Ze
3a20: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
3a30: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3a40: 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d  , zCsr,"+%dz",pM
3a50: 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20  em->u.nZero);.  
3a60: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3a70: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3a80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43  );.    }.    *zC
3a90: 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c  sr = '\0';.  }el
3aa0: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3ab0: 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c  tr ){.    int j,
3ac0: 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20   k;.    zBuf[0] 
3ad0: 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66  = ' ';.    if( f
3ae0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3af0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a      zBuf[1] = 'z
3b00: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3b10: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3b20: 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  c|MEM_Ephem))==0
3b30: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
3b40: 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ( f & MEM_Static
3b50: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3b60: 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  ] = 't';.      a
3b70: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3b80: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3b90: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3ba0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3bb0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  em ){.      zBuf
3bc0: 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20  [1] = 'e';.     
3bd0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3be0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79  EM_Static|MEM_Dy
3bf0: 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  n))==0 );.    }e
3c00: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  lse{.      zBuf[
3c10: 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a  1] = 's';.    }.
3c20: 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73      k = 2;.    s
3c30: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3c40: 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22  100, &zBuf[k], "
3c50: 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  %d", pMem->n);. 
3c60: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3c70: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3c80: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3c90: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3ca0: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3cb0: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3cc0: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
3cd0: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
3ce0: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
3cf0: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
3d00: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
3d10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3d20: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
3d30: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
3d40: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3d50: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
3d60: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
3d70: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3d80: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3d90: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3da0: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3db0: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3dc0: 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64   = 0;.  }.}.#end
3dd0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3de0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72  E_DEBUG./*.** Pr
3df0: 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  int the value of
3e00: 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20   a register for 
3e10: 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73  tracing purposes
3e20: 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  :.*/.static void
3e30: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d   memTracePrint(M
3e40: 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d  em *p){.  if( p-
3e50: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64  >flags & MEM_Und
3e60: 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72  efined ){.    pr
3e70: 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64  intf(" undefined
3e80: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
3e90: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3ea0: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  ull ){.    print
3eb0: 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  f(p->flags & MEM
3ec0: 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e  _Zero ? " NULL-n
3ed0: 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c 22  ochng" : " NULL"
3ee0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3ef0: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3f00: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3f10: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3f20: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3f30: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3f40: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3f50: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3f60: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3f70: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3f80: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3f90: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3fa0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3fb0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3fc0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3fd0: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3fe0: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3ff0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
4000: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
4010: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
4020: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
4030: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
4040: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
4050: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
4060: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
4070: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
4080: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20  s", zBuf);.  }. 
4090: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
40a0: 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72  MEM_Subtype ) pr
40b0: 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30  intf(" subtype=0
40c0: 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74  x%02x", p->eSubt
40d0: 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  ype);.}.static v
40e0: 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63  oid registerTrac
40f0: 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  e(int iReg, Mem 
4100: 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52  *p){.  printf("R
4110: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
4120: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
4130: 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28  nt(p);.  printf(
4140: 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33  "\n");.  sqlite3
4150: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
4160: 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e  riants(p);.}.#en
4170: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4180: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4190: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
41a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
41b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
41c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
41d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
41e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
41f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4200: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4210: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4220: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4230: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4240: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4250: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4260: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4270: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4280: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4290: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
42a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
42b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
42c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
42d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
42e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
42f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4300: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4310: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4320: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4330: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4340: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4350: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4360: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4370: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4380: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4390: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
43a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
43b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
43c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
43d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
43e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
43f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4400: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4410: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4420: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4430: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4440: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4450: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4460: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4470: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4480: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4490: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
44a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
44b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
44c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
44d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
44e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
44f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4500: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4510: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4520: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4530: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4540: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4550: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4560: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4570: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4580: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4590: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
45a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
45b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
45c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
45d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
45e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
45f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4600: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4610: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4620: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4630: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4640: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4650: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4660: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4670: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4680: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4690: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
46a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
46b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
46c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
46d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
46e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
46f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4700: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4710: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4720: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4730: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4740: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4750: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4760: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4770: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4780: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
47a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
47b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
47c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
47d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
47e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
47f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4800: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4810: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4820: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4830: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4840: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4850: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4860: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4870: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4880: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4890: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
48a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
48b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
48c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
48d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
48e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
48f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4900: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4910: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4920: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4930: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4940: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4950: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4960: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4970: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4980: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4990: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
49a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
49b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
49c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
49d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
49e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
49f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4a00: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4a10: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4a20: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4a30: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4a40: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4a50: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4a70: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4a80: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4a90: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20  rogressLimit;   
4aa0: 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72  /* Invoke xProgr
4ab0: 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74  ess() when nVmSt
4ac0: 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20  ep reaches this 
4ad0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20  */.#endif.  Mem 
4ae0: 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  *aMem = p->aMem;
4af0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4b00: 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d  f p->aMem */.  M
4b10: 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20  em *pIn1 = 0;   
4b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
4b30: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4b40: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20  /.  Mem *pIn2 = 
4b50: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4b60: 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72  * 2nd input oper
4b70: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4b80: 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n3 = 0;         
4b90: 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74      /* 3rd input
4ba0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4bb0: 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20  m *pOut = 0;    
4bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70           /* Outp
4bd0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69  ut operand */.#i
4be0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4bf0: 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20  E.  u64 start;  
4c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4c10: 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e  * CPU clock coun
4c20: 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  t at start of op
4c30: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
4c40: 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41   /*** INSERT STA
4c50: 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a  CK UNION HERE **
4c60: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
4c70: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
4c80: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
4c90: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
4ca0: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
4cb0: 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72  sqlite3VdbeEnter
4cc0: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  (p);.  if( p->rc
4cd0: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
4ce0: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
4cf0: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
4d00: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
4d10: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
4d20: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
4d30: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
4d40: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
4d50: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
4d60: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
4d70: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
4d80: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
4d90: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
4da0: 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72  _BUSY );.  asser
4db0: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
4dc0: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
4dd0: 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  0 );.  p->iCurre
4de0: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4df0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4e00: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4e10: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4e20: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4e30: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4e40: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4e50: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4e60: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4e70: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4e80: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4e90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4ea0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4eb0: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4ec0: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4ed0: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4ee0: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4ef0: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4f00: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4f10: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4f20: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4f30: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4f40: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4f50: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4f60: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4f70: 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67  }else{.    nProg
4f80: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66  ressLimit = 0xff
4f90: 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64  ffffff;.  }.#end
4fa0: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4fb0: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4fc0: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4fd0: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4fe0: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
4ff0: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
5000: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
5010: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
5020: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
5030: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
5040: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
5050: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
5060: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
5070: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
5080: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
5090: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
50a0: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
50b0: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
50c0: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
50d0: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
50e0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
50f0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
5100: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
5110: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
5120: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
5130: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5140: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
5150: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5160: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5170: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
5180: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
5190: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
51a0: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
51b0: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
51c0: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
51d0: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
51e0: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
51f0: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
5200: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
5210: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5220: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5230: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5240: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
5250: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
5260: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
5270: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
5280: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d  endif.  for(pOp=
5290: 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20  &aOp[p->pc]; 1; 
52a0: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45  pOp++){.    /* E
52b0: 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74  rrors are detect
52c0: 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c  ed by individual
52d0: 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61   opcodes, with a
52e0: 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  n immediate.    
52f0: 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72  ** jumps to abor
5300: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20  t_due_to_error. 
5310: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  */.    assert( r
5320: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
5330: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5340: 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f  >=aOp && pOp<&aO
5350: 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64  p[p->nOp]);.#ifd
5360: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
5370: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
5380: 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3f  te3NProfileCnt ?
5390: 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
53a0: 43 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77 74  Cnt : sqlite3Hwt
53b0: 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ime();.#endif.  
53c0: 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66    nVmStep++;.#if
53d0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
53e0: 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
53f0: 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45  S.    if( p->anE
5400: 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b  xec ) p->anExec[
5410: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b  (int)(pOp-aOp)]+
5420: 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f  +;.#endif..    /
5430: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
5440: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
5450: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
5460: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
5470: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
5480: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
5490: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
54a0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
54b0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
54c0: 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d  out, (int)(pOp -
54d0: 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20   aOp), pOp);.   
54e0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
54f0: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
5500: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
5510: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
5520: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
5530: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
5540: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
5550: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
5560: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
5570: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
5580: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5590: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
55a0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
55b0: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
55c0: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
55d0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
55e0: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
55f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5600: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
5610: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
5620: 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  f..    /* Sanity
5630: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
5640: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
5650: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5660: 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  UG.    {.      u
5670: 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 73  8 opProperty = s
5680: 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
5690: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
56a0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70  ];.      if( (op
56b0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
56c0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
56d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56e0: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p1>0 );.       
56f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5700: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
5710: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5720: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5730: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5740: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
5750: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5760: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
5770: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
5780: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
5790: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
57a0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d  ACE(pOp->p1, &aM
57b0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  em[pOp->p1]);.  
57c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
57d0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
57e0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
57f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5800: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5810: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5820: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
5830: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5840: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5850: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
5860: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
5870: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
5880: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5890: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
58a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
58b0: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
58c0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
58d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
58e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
58f0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5900: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
5910: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5920: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5930: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5940: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5950: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
5960: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5970: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5980: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
5990: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
59a0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
59b0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
59c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
59d0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
59e0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
59f0: 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  3, &aMem[pOp->p3
5a00: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
5a10: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5a20: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  y & OPFLG_OUT2)!
5a30: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
5a40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5a50: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5a60: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
5a70: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
5a80: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
5a90: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
5aa0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
5ab0: 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  2]);.      }.   
5ac0: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5ad0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
5ae0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5af0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5b00: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5b10: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5b20: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5b30: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5b40: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
5b50: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
5b60: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
5b70: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64    }.#endif.#if d
5b80: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
5b90: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
5ba0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
5bb0: 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b    pOrigOp = pOp;
5bc0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
5bd0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
5be0: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
5bf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c30: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
5c40: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
5c50: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
5c60: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
5c70: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
5c80: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
5c90: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
5ca0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
5cb0: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
5cc0: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
5cd0: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
5ce0: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
5cf0: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
5d00: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
5d10: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
5d20: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
5d30: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
5d40: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
5d50: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
5d60: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
5d70: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
5d80: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
5d90: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
5da0: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
5db0: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
5dc0: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
5dd0: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
5de0: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
5df0: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
5e00: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
5e10: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
5e20: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
5e30: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
5e40: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
5e50: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
5e60: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
5e70: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
5e80: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
5e90: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
5ea0: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5eb0: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
5ec0: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
5ed0: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
5ee0: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
5ef0: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
5f00: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
5f10: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
5f20: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
5f30: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
5f40: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
5f50: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
5f60: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
5f70: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
5f80: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
5f90: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
5fa0: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
5fb0: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
5fc0: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
5fd0: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
5fe0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
5ff0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
6000: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
6010: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
6020: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
6030: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
6040: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
6050: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
6060: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
6070: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
6080: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
6090: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
60a0: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
60b0: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
60c0: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
60d0: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
60e0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
60f0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
6100: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
6110: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
6120: 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20  n3, out2, out3. 
6130: 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70   See.** the mkop
6140: 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74  codeh.awk script
6150: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
6160: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
6170: 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ** Documentation
6180: 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f   about VDBE opco
6190: 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64  des is generated
61a0: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
61b0: 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69  s file.** for li
61c0: 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74  nes of that cont
61d0: 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20  ain "Opcode:".  
61e0: 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c  That line and al
61f0: 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  l subsequent.** 
6200: 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72  comment lines ar
6210: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  e used in the ge
6220: 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
6230: 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75  opcode.html docu
6240: 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c  mentation.** fil
6250: 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59  e..**.** SUMMARY
6260: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d  :.**.**     Form
6270: 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74  atting is import
6280: 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74  ant to scripts t
6290: 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69  hat scan this fi
62a0: 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f  le..**     Do no
62b0: 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74  t deviate from t
62c0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74  he formatting st
62d0: 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  yle currently in
62e0: 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a   use..**.*******
62f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6300: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6310: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6330: 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  ******/../* Opco
6340: 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a  de:  Goto * P2 *
6350: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e   * *.**.** An un
6360: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70  conditional jump
6370: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
6380: 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74  ** The next inst
6390: 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64  ruction executed
63a0: 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65   will be .** the
63b0: 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32   one at index P2
63c0: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
63d0: 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72  ing of.** the pr
63e0: 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ogram..**.** The
63f0: 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   P1 parameter is
6400: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73   not actually us
6410: 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
6420: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a  e.  However, it.
6430: 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20  ** is sometimes 
6440: 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64  set to 1 instead
6450: 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20   of 0 as a hint 
6460: 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  to the command-l
6470: 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61  ine shell.** tha
6480: 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74  t this Goto is t
6490: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
64a0: 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65  oop and that the
64b0: 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64   lines from P2 d
64c0: 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75  own.** to the cu
64d0: 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c  rrent line shoul
64e0: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f  d be indented fo
64f0: 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
6500: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74  ..*/.case OP_Got
6510: 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  o: {            
6520: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70   /* jump */.jump
6530: 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
6540: 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a  _for_interrupt:.
6550: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
6560: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a  ->p2 - 1];..  /*
6570: 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72   Opcodes that ar
6580: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f  e used as the bo
6590: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28  ttom of a loop (
65a0: 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76  OP_Next, OP_Prev
65b0: 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c  ,.  ** OP_VNext,
65c0: 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78   or OP_SorterNex
65d0: 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65  t) all jump here
65e0: 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c   upon.  ** compl
65f0: 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f  etion.  Check to
6600: 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f   see if sqlite3_
6610: 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20  interrupt() has 
6620: 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  been called.  **
6630: 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72   or if the progr
6640: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65  ess callback nee
6650: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
6660: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  . .  **.  ** Thi
6670: 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74  s code uses unst
6680: 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20  ructured "goto" 
6690: 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64  statements and d
66a0: 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65  oes not look cle
66b0: 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61  an..  ** But tha
66c0: 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20  t is not due to 
66d0: 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61  sloppy coding ha
66e0: 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69  bits. The code i
66f0: 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20  s written this. 
6700: 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66   ** way for perf
6710: 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69  ormance, to avoi
6720: 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20  d having to run 
6730: 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e  the interrupt an
6740: 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20  d progress.  ** 
6750: 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20  checks on every 
6760: 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65  opcode.  This he
6770: 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70  lps sqlite3_step
6780: 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20  () to run about 
6790: 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72  1.5%.  ** faster
67a0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76   according to "v
67b0: 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63  algrind --tool=c
67c0: 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68  achegrind" */.ch
67d0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
67e0: 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  t:.  if( db->u1.
67f0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
6800: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
6810: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66  o_interrupt;.#if
6820: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6830: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
6840: 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  CK.  /* Call the
6850: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6860: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
6870: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
6880: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
6890: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
68a0: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
68b0: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
68c0: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
68d0: 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   of.  ** sqlite3
68e0: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
68f0: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
6900: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6910: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
6920: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f  .  ** If the pro
6930: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
6940: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
6950: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
6960: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
6970: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
6980: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
6990: 20 20 2a 2f 0a 20 20 69 66 28 20 6e 56 6d 53 74    */.  if( nVmSt
69a0: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
69b0: 69 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72  it && db->xProgr
69c0: 65 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  ess!=0 ){.    as
69d0: 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72  sert( db->nProgr
69e0: 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20  essOps!=0 );.   
69f0: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
6a00: 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e  = nVmStep + db->
6a10: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28  nProgressOps - (
6a20: 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f  nVmStep%db->nPro
6a30: 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69  gressOps);.    i
6a40: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
6a50: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
6a60: 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  g) ){.      rc =
6a70: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
6a80: 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
6a90: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
6aa0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
6ab0: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
6ac0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
6ad0: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
6ae0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
6af0: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
6b00: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
6b10: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
6b20: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6b30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
6b40: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
6b50: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
6b60: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6b70: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
6b80: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
6b90: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
6ba0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6bb0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
6bc0: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
6bd0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
6be0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
6bf0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6c00: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
6c10: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
6c20: 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53  Op-aOp);.  REGIS
6c30: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6c40: 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20  1, pIn1);..  /* 
6c50: 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74  Most jump operat
6c60: 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74  ions do a goto t
6c70: 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f  o this spot in o
6c80: 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20  rder to update. 
6c90: 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e   ** the pOp poin
6ca0: 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  ter. */.jump_to_
6cb0: 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  p2:.  pOp = &aOp
6cc0: 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  [pOp->p2 - 1];. 
6cd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6ce0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6cf0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6d00: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
6d10: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
6d20: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
6d30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41   register P1.  A
6d40: 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70  fter.** the jump
6d50: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
6d60: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
6d70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
6d80: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
6d90: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
6da0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6db0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
6dc0: 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  1->flags==MEM_In
6dd0: 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f  t );.  pOp = &aO
6de0: 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20  p[pIn1->u.i];.  
6df0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6e00: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
6e10: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6e20: 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  de: InitCoroutin
6e30: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
6e40: 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69  *.** Set up regi
6e50: 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20  ster P1 so that 
6e60: 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f  it will Yield to
6e70: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a   the coroutine.*
6e80: 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64  * located at add
6e90: 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ress P3..**.** I
6ea0: 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65  f P2!=0 then the
6eb0: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
6ec0: 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69  mentation immedi
6ed0: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a  ately follows.**
6ee0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53   this opcode.  S
6ef0: 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20  o jump over the 
6f00: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
6f10: 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61  entation to.** a
6f20: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a  ddress P2..**.**
6f30: 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f   See also: EndCo
6f40: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
6f50: 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  OP_InitCoroutine
6f60: 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  : {     /* jump 
6f70: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
6f80: 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e  ->p1>0 &&  pOp->
6f90: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
6fa0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
6fb0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6fc0: 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  2>=0 && pOp->p2<
6fd0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65  p->nOp );.  asse
6fe0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
6ff0: 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70  & pOp->p3<p->nOp
7000: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
7010: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7020: 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44  ssert( !VdbeMemD
7030: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a  ynamic(pOut) );.
7040: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
7050: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75  p->p3 - 1;.  pOu
7060: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
7070: 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  nt;.  if( pOp->p
7080: 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2 ) goto jump_to
7090: 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
70a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64  ./* Opcode:  End
70b0: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a  Coroutine P1 * *
70c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69   * *.**.** The i
70d0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68  nstruction at th
70e0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
70f0: 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69  ister P1 is a Yi
7100: 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  eld..** Jump to 
7110: 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72  the P2 parameter
7120: 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a   of that Yield..
7130: 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d  ** After the jum
7140: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
7150: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
7160: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7170: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
7180: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
7190: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
71a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
71b0: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
71c0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
71d0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
71e0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
71f0: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
7200: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
7210: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
7220: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
7230: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
7240: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
7250: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
7260: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
7270: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
7280: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
7290: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
72a0: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43  .  pOp = &aOp[pC
72b0: 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a  aller->p2 - 1];.
72c0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
72d0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
72e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
72f0: 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20  code:  Yield P1 
7300: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
7310: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
7320: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
7330: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
7340: 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20  er P1.  This.** 
7350: 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f  has the effect o
7360: 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20  f yielding to a 
7370: 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a  coroutine..**.**
7380: 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   If the coroutin
7390: 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68  e that is launch
73a0: 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
73b0: 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68  uction ends with
73c0: 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74  .** Yield or Ret
73d0: 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75  urn then continu
73e0: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  e to the next in
73f0: 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
7400: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74  if.** the corout
7410: 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20  ine launched by 
7420: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
7430: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e   ends with.** En
7440: 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e  dCoroutine, then
7450: 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68   jump to P2 rath
7460: 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69  er than continui
7470: 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e  ng with the.** n
7480: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
7490: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
74a0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a   InitCoroutine.*
74b0: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
74c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
74d0: 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20   in1, jump */.  
74e0: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
74f0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
7500: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
7510: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
7520: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  n1)==0 );.  pIn1
7530: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
7540: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
7550: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
7560: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
7570: 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
7580: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7590: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
75a0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65   pOp = &aOp[pcDe
75b0: 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st];.  break;.}.
75c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
75d0: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
75e0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
75f0: 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e 75  sis: if r[P3]=nu
7600: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
7610: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
7620: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
7630: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
7640: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
7650: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
7660: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
7670: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
7680: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
7690: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
76a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
76b0: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
76c0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
76d0: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
76e0: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
76f0: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
7700: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
7710: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
7720: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
7730: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
7740: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
7750: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
7760: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
7770: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
7780: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
7790: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
77a0: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
77b0: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
77c0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
77d0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
77e0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
77f0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
7800: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
7810: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7820: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
7830: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
7840: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
7850: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
7860: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
7870: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
7880: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
7890: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
78a0: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
78b0: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
78c0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
78d0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
78e0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
78f0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
7900: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
7910: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
7920: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
7930: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
7940: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
7950: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
7960: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
7970: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
7980: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
7990: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
79a0: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
79b0: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
79c0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
79d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
79e0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
79f0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
7a00: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
7a10: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
7a20: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
7a30: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
7a40: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
7a50: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
7a60: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
7a70: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
7a80: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
7a90: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
7aa0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
7ab0: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
7ac0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7ad0: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
7ae0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
7af0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
7b00: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
7b10: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7b20: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
7b30: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
7b40: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
7b50: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
7b60: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
7b70: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
7b80: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
7b90: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
7ba0: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
7bb0: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
7bc0: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
7bd0: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
7be0: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
7bf0: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
7c00: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
7c10: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
7c20: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
7c30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
7c40: 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61 6d 65  t: {.  VdbeFrame
7c50: 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74 20   *pFrame;.  int 
7c60: 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28 69  pcx;..  pcx = (i
7c70: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
7c80: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53    if( pOp->p1==S
7c90: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70  QLITE_OK && p->p
7ca0: 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Frame ){.    /* 
7cb0: 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f  Halt the sub-pro
7cc0: 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e  gram. Return con
7cd0: 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65  trol to the pare
7ce0: 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  nt frame. */.   
7cf0: 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
7d00: 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61  ame;.    p->pFra
7d10: 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61  me = pFrame->pPa
7d20: 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72  rent;.    p->nFr
7d30: 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74  ame--;.    sqlit
7d40: 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
7d50: 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
7d60: 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69  ;.    pcx = sqli
7d70: 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74  te3VdbeFrameRest
7d80: 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20  ore(pFrame);.   
7d90: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
7da0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
7db0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
7dc0: 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72  pcx is the OP_Pr
7dd0: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
7de0: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
7df0: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
7e00: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
7e10: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
7e20: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7e30: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
7e40: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
7e50: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
7e60: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
7e70: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
7e80: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
7e90: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
7ea0: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
7eb0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
7ec0: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
7ed0: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
7ee0: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
7ef0: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
7f00: 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e  .      pcx = p->
7f10: 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20  aOp[pcx].p2-1;. 
7f20: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7f30: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7f40: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
7f50: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a  Op = &aOp[pcx];.
7f60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
7f70: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
7f80: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
7f90: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
7fa0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b  ;.  p->pc = pcx;
7fb0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7fc0: 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70  p5<=4 );.  if( p
7fd0: 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ->rc ){.    if( 
7fe0: 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
7ff0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8000: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70  ar * const azTyp
8010: 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c  e[] = { "NOT NUL
8020: 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43  L", "UNIQUE", "C
8030: 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20  HECK",.         
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59      "FOREIGN KEY
8070: 22 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63  " };.      testc
8080: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
8090: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
80a0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
80b0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
80c0: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
80d0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
80e0: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
80f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
8100: 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74  ror(p, "%s const
8110: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61  raint failed", a
8120: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
8130: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  );.      if( pOp
8140: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
8150: 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
8160: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
8170: 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a  , "%z: %s", p->z
8180: 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e  ErrMsg, pOp->p4.
8190: 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  z);.      }.    
81a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
81b0: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
81c0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
81d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
81e0: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
81f0: 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  , "abort at %d i
8200: 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78  n [%s]: %s", pcx
8210: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
8220: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
8230: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
8240: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
8250: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
8260: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
8270: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
8280: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
8290: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
82a0: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51  {.    p->rc = SQ
82b0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
82c0: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
82d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
82e0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
82f0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
8300: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8310: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8320: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
8330: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
8340: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
8350: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
8360: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
8370: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
8380: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
8390: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
83a0: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
83b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
83c0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
83d0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
83e0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
83f0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
8400: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8410: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
8420: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
8430: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8440: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8450: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8460: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
8470: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8480: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
8490: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
84a0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
84b0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
84c0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
84d0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
84e0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
84f0: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
8500: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
8510: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
8520: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8530: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8540: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8550: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8560: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
8570: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
8580: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
8590: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
85a0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
85b0: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
85c0: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
85d0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
85e0: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
85f0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8600: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
8610: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
8620: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8630: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8640: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8650: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
8660: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8670: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20   TK_FLOAT, out2 
8680: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8690: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
86a0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
86b0: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
86c0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
86d0: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
86e0: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
86f0: 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.r = *pOp->p4.
8700: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
8710: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
8720: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
8730: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8740: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8750: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
8760: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
8770: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
8780: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
8790: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
87a0: 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20  * into a String 
87b0: 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74  opcode before it
87c0: 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72   is executed for
87d0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e   the first time.
87e0: 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73    During.** this
87f0: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c   transformation,
8800: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73   the length of s
8810: 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70  tring P4 is comp
8820: 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a  uted and stored.
8830: 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72  ** as the P1 par
8840: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  ameter..*/.case 
8850: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
8860: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8870: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
8880: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8890: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
88a0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
88b0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
88c0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
88d0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
88e0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
88f0: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
8900: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
8910: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
8920: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
8930: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
8940: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8950: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8960: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
8970: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8980: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8990: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
89a0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
89b0: 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20  ITE_TOOBIG );.  
89c0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
89d0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
89e0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
89f0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
8a00: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
8a10: 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61  sert( pOut->szMa
8a20: 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e  lloc>0 && pOut->
8a30: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
8a40: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8a50: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
8a60: 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70  Out)==0 );.    p
8a70: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Out->szMalloc = 
8a80: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
8a90: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
8aa0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
8ab0: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
8ac0: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
8ad0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
8ae0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
8af0: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
8b00: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
8b10: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
8b20: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
8b30: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
8b40: 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d  .  testcase( rc=
8b50: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8b60: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
8b70: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8b80: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8b90: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8ba0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8bb0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8bc0: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20  LITE_OK );.  /* 
8bd0: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
8be0: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
8bf0: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
8c00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
8c10: 6e 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ng P1 P2 P3 P4 P
8c20: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
8c30: 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50  [P2]='P4' (len=P
8c40: 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  1).**.** The str
8c50: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
8c60: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
8c70: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
8c80: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8c90: 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a  * If P3 is not z
8ca0: 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74  ero and the cont
8cb0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
8cc0: 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  P3 is equal to P
8cd0: 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  5, then.** the d
8ce0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72  atatype of the r
8cf0: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f  egister P2 is co
8d00: 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e  nverted to BLOB.
8d10: 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73    The content is
8d20: 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71  .** the same seq
8d30: 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20  uence of bytes, 
8d40: 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74  it is merely int
8d50: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
8d60: 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66  OB instead.** of
8d70: 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66   a string, as if
8d80: 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53   it had been CAS
8d90: 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  T.  In other wor
8da0: 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33  ds:.**.** if( P3
8db0: 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d  !=0 and reg[P3]=
8dc0: 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d  =P5 ) reg[P2] :=
8dd0: 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73   CAST(reg[P2] as
8de0: 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB).*/.case O
8df0: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8e00: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8e10: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8e20: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8e30: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8e40: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8e50: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
8e60: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
8e70: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8e80: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
8e90: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
8ea0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
8eb0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8ec0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8ed0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
8ee0: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
8ef0: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
8f00: 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
8f10: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
8f20: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
8f30: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
8f40: 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   );.    pIn3 = &
8f50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
8f60: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
8f70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
8f80: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33   );.    if( pIn3
8f90: 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29  ->u.i==pOp->p5 )
8fa0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8fb0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74  EM_Blob|MEM_Stat
8fc0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  ic|MEM_Term;.  }
8fd0: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
8fe0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
8ff0: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
9000: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9010: 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a  P2..P3]=NULL.**.
9020: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
9030: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
9040: 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65  2.  If P3 greate
9050: 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20  r than P2, then 
9060: 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55  also write.** NU
9070: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
9080: 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65   P3 and every re
9090: 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65  gister in betwee
90a0: 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66  n P2 and P3.  If
90b0: 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74   P3.** is less t
90c0: 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c  han P2 (typicall
90d0: 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68  y P3 is zero) th
90e0: 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72  en only register
90f0: 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   P2 is.** set to
9100: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   NULL..**.** If 
9110: 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20  the P1 value is 
9120: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
9130: 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f  lso set the MEM_
9140: 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20  Cleared flag so 
9150: 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c  that.** NULL val
9160: 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d  ues will not com
9170: 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20  pare equal even 
9180: 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  if SQLITE_NULLEQ
9190: 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50   is set on.** OP
91a0: 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f  _Ne or OP_Eq..*/
91b0: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
91c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
91d0: 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  t2 */.  int cnt;
91e0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
91f0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
9200: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
9210: 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70  ;.  cnt = pOp->p
9220: 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  3-pOp->p2;.  ass
9230: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
9240: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9250: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
9260: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
9270: 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28  ag = pOp->p1 ? (
9280: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65  MEM_Null|MEM_Cle
9290: 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c  ared) : MEM_Null
92a0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b  ;.  pOut->n = 0;
92b0: 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20  .  while( cnt>0 
92c0: 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  ){.    pOut++;. 
92d0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
92e0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
92f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9300: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
9310: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
9320: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70   nullFlag;.    p
9330: 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20  Out->n = 0;.    
9340: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
9350: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9360: 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20  : SoftNull P1 * 
9370: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9380: 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a  s: r[P1]=NULL.**
9390: 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72  .** Set register
93a0: 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20   P1 to have the 
93b0: 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65  value NULL as se
93c0: 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b  en by the OP_Mak
93d0: 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72  eRecord.** instr
93e0: 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e  uction, but do n
93f0: 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69  ot free any stri
9400: 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72  ng or blob memor
9410: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
9420: 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65  h.** the registe
9430: 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68  r, so that if th
9440: 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74  e value was a st
9450: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61  ring or blob tha
9460: 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  t was.** previou
9470: 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67  sly copied using
9480: 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63   OP_SCopy, the c
9490: 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69  opies will conti
94a0: 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e  nue to be valid.
94b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74  .*/.case OP_Soft
94c0: 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74  Null: {.  assert
94d0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
94e0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
94f0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9500: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
9510: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9520: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f  Out->flags = (pO
9530: 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45 4d 5f  ut->flags&~(MEM_
9540: 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f 41 66  Undefined|MEM_Af
9550: 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c 6c  fMask))|MEM_Null
9560: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9570: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
9580: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
9590: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
95a0: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
95b0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
95c0: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
95d0: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
95e0: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
95f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
9600: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
9610: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
9620: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
9630: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
9640: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
9650: 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  TH );.  pOut = o
9660: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
9670: 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33   pOp);.  sqlite3
9680: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
9690: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
96a0: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
96b0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
96c0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
96d0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
96e0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
96f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
9700: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
9710: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9720: 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31  P2]=parameter(P1
9730: 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  ,P4).**.** Trans
9740: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
9750: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
9760: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
9770: 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  er P2.**.** If t
9780: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
9790: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
97a0: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
97b0: 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  P4..** The P4 va
97c0: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
97d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
97e0: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
97f0: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
9800: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
9810: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d  /* out2 */.  Mem
9820: 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a   *pVar;       /*
9830: 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61   Value being tra
9840: 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61  nsferred */..  a
9850: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
9860: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
9870: 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nVar );.  assert
9880: 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
9890: 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c  | pOp->p4.z==sql
98a0: 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
98b0: 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70  me(p->pVList,pOp
98c0: 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61 72 20  ->p1) );.  pVar 
98d0: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e  = &p->aVar[pOp->
98e0: 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73  p1 - 1];.  if( s
98f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
9900: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
9910: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
9920: 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65   }.  pOut = &aMe
9930: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
9940: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9950: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
9960: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
9970: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
9980: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
9990: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
99a0: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
99b0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
99c0: 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50  is: r[P2@P3]=r[P
99d0: 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  1@P3].**.** Move
99e0: 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69   the P3 values i
99f0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50  n register P1..P
9a00: 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f  1+P3-1 over into
9a10: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
9a20: 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69  ..P2+P3-1.  Regi
9a30: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d  sters P1..P1+P3-
9a40: 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f  1 are.** left ho
9a50: 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49  lding a NULL.  I
9a60: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
9a70: 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65  r register range
9a80: 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31  s.** P1..P1+P3-1
9a90: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31   and P2..P2+P3-1
9aa0: 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74   to overlap.  It
9ab0: 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20   is an error.** 
9ac0: 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73  for P3 to be les
9ad0: 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73  s than 1..*/.cas
9ae0: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69  e OP_Move: {.  i
9af0: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
9b00: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
9b10: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
9b20: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
9b30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
9b40: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
9b50: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
9b60: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
9b70: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
9b80: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
9b90: 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  3;.  p1 = pOp->p
9ba0: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
9bb0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
9bc0: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
9bd0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
9be0: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
9bf0: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
9c00: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
9c10: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
9c20: 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
9c30: 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pOut<=&aMem[(p-
9c40: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9c50: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
9c60: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
9c70: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
9c80: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9c90: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
9ca0: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
9cb0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
9cc0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
9cd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9ce0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
9cf0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9d00: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
9d10: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
9d20: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
9d30: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f  t->pScopyFrom<pO
9d40: 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ut ){.      pOut
9d50: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
9d60: 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20  pOp->p2 - p1;.  
9d70: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44    }.#endif.    D
9d80: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9d90: 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ut);.    REGISTE
9da0: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
9db0: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
9dc0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
9dd0: 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20  while( --n );.  
9de0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9df0: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
9e00: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9e10: 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72  is: r[P2@P3+1]=r
9e20: 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20  [P1@P3+1].**.** 
9e30: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
9e40: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9e50: 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P3 into register
9e60: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a  s P2..P2+P3..**.
9e70: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
9e80: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
9e90: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
9ea0: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
9eb0: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
9ec0: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
9ed0: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
9ee0: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
9ef0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
9f00: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e   {.  int n;..  n
9f10: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49   = pOp->p3;.  pI
9f20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9f30: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9f40: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9f50: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
9f60: 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31  n1 );.  while( 1
9f70: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
9f80: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
9f90: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
9fa0: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
9fb0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
9fc0: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
9fd0: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
9fe0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
9ff0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
a000: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a010: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
a020: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
a030: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
a040: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
a050: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
a060: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a070: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
a080: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a090: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
a0a0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
a0b0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
a0c0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a0d0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a0e0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
a0f0: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
a100: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
a110: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
a120: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
a130: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
a140: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
a150: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
a160: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
a170: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
a180: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
a190: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
a1a0: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
a1b0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
a1c0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
a1d0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
a1e0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
a1f0: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
a200: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
a210: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
a220: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
a230: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
a240: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
a250: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
a260: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
a270: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
a280: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
a290: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
a2a0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a2b0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
a2c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a2d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
a2e0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
a2f0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
a300: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
a310: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
a320: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
a330: 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53  G.  if( pOut->pS
a340: 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f  copyFrom==0 ) pO
a350: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
a360: 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20   pIn1;.#endif.  
a370: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a380: 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20  ode: IntCopy P1 
a390: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
a3a0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
a3b0: 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ].**.** Transfer
a3c0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
a3d0: 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ue held in regis
a3e0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a3f0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a400: 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
a410: 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  zed version of S
a420: 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20  Copy that works 
a430: 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72  only for integer
a440: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63  .** values..*/.c
a450: 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20  ase OP_IntCopy: 
a460: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
a470: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
a480: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a490: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
a4a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a4b0: 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  t)!=0 );.  pOut 
a4c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a4d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
a4e0: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
a4f0: 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn1->u.i);.  b
a500: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a510: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
a520: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a530: 6f 70 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b  opsis: output=r[
a540: 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P1@P2].**.** The
a550: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
a560: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
a570: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
a580: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
a590: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
a5a0: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
a5b0: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
a5c0: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
a5d0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
a5e0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
a5f0: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
a600: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
a610: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
a620: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
a630: 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32  e r(P1)..r(P1+P2
a640: 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a  -1) values as.**
a650: 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e   the result row.
a660: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
a670: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
a680: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
a690: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
a6a0: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
a6b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a6c0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
a6d0: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
a6e0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
a6f0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
a700: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
a710: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
a720: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52  _CALLBACK.  /* R
a730: 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  un the progress 
a740: 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66  counter just bef
a750: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20  ore returning.. 
a760: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
a770: 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26  rogress!=0.   &&
a780: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
a790: 65 73 73 4c 69 6d 69 74 20 0a 20 20 20 26 26 20  essLimit .   && 
a7a0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
a7b0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21  ->pProgressArg)!
a7c0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d  =0.  ){.    rc =
a7d0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
a7e0: 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  T;.    goto abor
a7f0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
a800: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
a810: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
a820: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
a830: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
a840: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
a850: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
a860: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
a870: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
a880: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
a890: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
a8a0: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
a8b0: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
a8c0: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
a8d0: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
a8e0: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
a8f0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
a900: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
a910: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
a920: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
a930: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
a940: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
a950: 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  al );.    goto a
a960: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
a970: 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  r;.  }..  /* If 
a980: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
a990: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
a9a0: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
a9b0: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
a9c0: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
a9d0: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
a9e0: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
a9f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
aa00: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
aa10: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
aa20: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
aa30: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
aa40: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
aa50: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
aa60: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
aa70: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
aa80: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
aa90: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
aaa0: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
aab0: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
aac0: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
aad0: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
aae0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
aaf0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
ab00: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
ab10: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
ab20: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
ab30: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
ab40: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
ab50: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
ab60: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
ab70: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
ab80: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
ab90: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
aba0: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
abb0: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
abc0: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
abd0: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
abe0: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
abf0: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
ac00: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
ac10: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
ac20: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
ac30: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
ac40: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
ac50: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
ac60: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
ac70: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
ac80: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
ac90: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
aca0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
acb0: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
acc0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
acd0: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
ace0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
acf0: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
ad00: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
ad10: 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  SE);.  assert( r
ad20: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
ad30: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
ad40: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
ad50: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
ad60: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
ad70: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
ad80: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
ad90: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
ada0: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
adb0: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
adc0: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
add0: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
ade0: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
adf0: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
ae00: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
ae10: 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66  .  ** a side eff
ae20: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
ae30: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
ae40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
ae50: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
ae60: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
ae70: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
ae80: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
ae90: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
aea0: 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  alize(&pMem[i]);
aeb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
aec0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  em[i].flags & ME
aed0: 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20  M_Ephem)==0.    
aee0: 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d          || (pMem
aef0: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d  [i].flags & (MEM
af00: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
af10: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
af20: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
af30: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
af40: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
af50: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
af60: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
af70: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
af80: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
af90: 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54  m;..  if( db->mT
afa0: 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52  race & SQLITE_TR
afb0: 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64  ACE_ROW ){.    d
afc0: 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45  b->xTrace(SQLITE
afd0: 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e  _TRACE_ROW, db->
afe0: 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29  pTraceArg, p, 0)
aff0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75  ;.  }..  /* Retu
b000: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
b010: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e  */.  p->pc = (in
b020: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20  t)(pOp - aOp) + 
b030: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
b040: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
b050: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
b060: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
b070: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b080: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b090: 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]+r[P1].**.**
b0a0: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
b0b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
b0c0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
b0d0: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
b0e0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
b0f0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b100: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b110: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
b120: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
b130: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
b140: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
b150: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
b160: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
b170: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
b180: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
b190: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
b1a0: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
b1b0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
b1c0: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
b1d0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b1e0: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
b1f0: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
b200: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
b210: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
b220: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
b230: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
b240: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
b250: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
b260: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
b270: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
b280: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
b290: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
b2a0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
b2b0: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
b2c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
b2d0: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
b2e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
b2f0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
b300: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
b310: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
b320: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
b330: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
b340: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
b350: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
b360: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
b370: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
b380: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
b390: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
b3a0: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
b3b0: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
b3c0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
b3d0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
b3e0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
b3f0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
b400: 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
b410: 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  t)nByte+2, pOut=
b420: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
b430: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
b440: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b450: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
b460: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
b470: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
b480: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
b490: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
b4a0: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
b4b0: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
b4c0: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
b4d0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30  pOut->z[nByte]=0
b4e0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
b4f0: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
b500: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
b510: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
b520: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
b530: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
b540: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
b550: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
b560: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b570: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
b580: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b590: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b5a0: 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41  1]+r[P2].**.** A
b5b0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
b5c0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
b5d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b5e0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b5f0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b600: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b610: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b620: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b630: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b640: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
b650: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
b660: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b670: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
b680: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
b690: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
b6a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
b6b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b6c0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b6d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b6e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b6f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b700: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b710: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b720: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b730: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
b740: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b750: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72  s: r[P3]=r[P2]-r
b760: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72  [P1].**.** Subtr
b770: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
b780: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
b790: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
b7a0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b7b0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b7c0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b7d0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b7e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b7f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b800: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b810: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
b820: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b830: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b  : r[P3]=r[P2]/r[
b840: 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  P1].**.** Divide
b850: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b860: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
b870: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b880: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b890: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b8a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33   register P3 (P3
b8b0: 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20  =P2/P1). If the 
b8c0: 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67  value in .** reg
b8d0: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
b8e0: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
b8f0: 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69  t is NULL. If ei
b900: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a  ther input is .*
b910: 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  * NULL, the resu
b920: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b930: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
b940: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
b950: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b960: 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a  P3]=r[P2]%r[P1].
b970: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
b980: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
b990: 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74  r integer regist
b9a0: 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64  er P2 is divided
b9b0: 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   by .** register
b9c0: 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P1 and store th
b9d0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b9e0: 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20  ster P3. .** If 
b9f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ba00: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
ba10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ba20: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
ba30: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
ba40: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ba50: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
ba60: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
ba70: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ba80: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
ba90: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
baa0: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bac0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
bad0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
bae0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
baf0: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
bb00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
bb10: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
bb20: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
bb30: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
bb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
bb50: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
bb60: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bb70: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
bb80: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
bb90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
bba0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
bbb0: 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69   */.  char bInti
bbc0: 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64  nt;   /* Started
bbd0: 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65   out as two inte
bbe0: 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  ger operands */.
bbf0: 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
bc00: 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45    /* Combined ME
bc10: 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62  M_* flags from b
bc20: 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20  oth inputs */.  
bc30: 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20 20  u16 type1;      
bc40: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
bc50: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
bc60: 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20  */.  u16 type2; 
bc70: 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20       /* Numeric 
bc80: 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70  type of right op
bc90: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
bca0: 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  A;         /* In
bcb0: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c  teger value of l
bcc0: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bcd0: 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20   i64 iB;        
bce0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
bcf0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
bd00: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
bd10: 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  A;      /* Real 
bd20: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
bd30: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bd40: 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rB;      /* Re
bd50: 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68  al value of righ
bd60: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20  t operand */..  
bd70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bd80: 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d  ->p1];.  type1 =
bd90: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e   numericType(pIn
bda0: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
bdb0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74  em[pOp->p2];.  t
bdc0: 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype2 = numericTy
bdd0: 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74  pe(pIn2);.  pOut
bde0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
bdf0: 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ];.  flags = pIn
be00: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
be10: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 74  >flags;.  if( (t
be20: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
be30: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
be40: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
be50: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
be60: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
be70: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
be80: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
be90: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
bea0: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
beb0: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
bec0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bed0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
bee0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
bef0: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
bf00: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
bf10: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
bf20: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bf30: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
bf40: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
bf50: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
bf60: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
bf70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bf80: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
bf90: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bfa0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bfb0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bfc0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bfd0: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
bfe0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
bff0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
c000: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
c010: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
c020: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
c030: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
c040: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
c050: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
c060: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c070: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
c080: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
c090: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
c0a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c0b0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
c0c0: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
c0d0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c0e0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
c0f0: 20 7d 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67   }else if( (flag
c100: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
c110: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 72 69   ){.    goto ari
c120: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c130: 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b  s_null;.  }else{
c140: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
c150: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
c160: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
c170: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
c180: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
c190: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
c1a0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
c1b0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
c1c0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
c1d0: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
c1e0: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
c1f0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c200: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
c210: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
c220: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c230: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
c240: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
c250: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c260: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
c270: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
c280: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
c290: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c2a0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
c2b0: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
c2c0: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
c2d0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c2e0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
c2f0: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
c300: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c310: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
c320: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
c330: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
c340: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
c350: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c360: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
c370: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c380: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
c390: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
c3a0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
c3b0: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
c3c0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
c3d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
c3e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
c3f0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c400: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c410: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c420: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c430: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
c440: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
c450: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
c460: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c470: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c480: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
c490: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
c4a0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
c4b0: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
c4c0: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
c4d0: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
c4e0: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
c4f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c500: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
c510: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
c520: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
c530: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
c540: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
c550: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c560: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
c570: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c580: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
c590: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
c5a0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
c5b0: 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65 63 74  a CollSeq object
c5c0: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
c5d0: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
c5e0: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
c5f0: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
c600: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
c610: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
c620: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
c630: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
c640: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
c650: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
c660: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
c670: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
c680: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
c690: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
c6a0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
c6b0: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
c6c0: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
c6d0: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
c6e0: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
c6f0: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
c700: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
c710: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
c720: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
c730: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
c740: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
c750: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
c760: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
c770: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
c780: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
c790: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
c7a0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
c7b0: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
c7c0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
c7d0: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
c7e0: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
c7f0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
c800: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
c810: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
c820: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
c830: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
c840: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
c850: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
c860: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
c870: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
c880: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
c890: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
c8a0: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c8b0: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c8c0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c8d0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
c8e0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c8f0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26  is: r[P3]=r[P1]&
c900: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
c910: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
c920: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
c930: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
c940: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
c950: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c960: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c970: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c980: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c990: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c9a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
c9b0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
c9c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
c9d0: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
c9e0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
c9f0: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
ca00: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
ca10: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
ca20: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
ca30: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ca40: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ca50: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
ca60: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ca70: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ca80: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
ca90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
caa0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
cab0: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
cac0: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
cad0: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
cae0: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
caf0: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
cb00: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
cb10: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
cb20: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
cb30: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
cb40: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
cb50: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
cb60: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
cb70: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
cb80: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
cb90: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
cba0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
cbb0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
cbc0: 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a  ]=r[P2]>>r[P1].*
cbd0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
cbe0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
cbf0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
cc00: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
cc10: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
cc20: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
cc30: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
cc40: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
cc50: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
cc60: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
cc70: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
cc80: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
cc90: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
cca0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
ccb0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ccc0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ccd0: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
cce0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ccf0: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
cd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cd10: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
cd20: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cd30: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
cd40: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
cd50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
cd60: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
cd70: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cd80: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
cd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cda0: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
cdb0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cdc0: 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34  .  i64 iA;.  u64
cdd0: 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20   uA;.  i64 iB;. 
cde0: 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20   u8 op;..  pIn1 
cdf0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ce00: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
ce10: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
ce20: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
ce30: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  3];.  if( (pIn1-
ce40: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
ce50: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
ce60: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ce70: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
ce80: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
ce90: 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74    }.  iA = sqlit
cea0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
ceb0: 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c  In2);.  iB = sql
cec0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
ced0: 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70  (pIn1);.  op = p
cee0: 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66  Op->opcode;.  if
cef0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20  ( op==OP_BitAnd 
cf00: 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b  ){.    iA &= iB;
cf10: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
cf20: 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20  =OP_BitOr ){.   
cf30: 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA |= iB;.  }el
cf40: 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a  se if( iB!=0 ){.
cf50: 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d      assert( op==
cf60: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c  OP_ShiftRight ||
cf70: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
cf80: 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  t );..    /* If 
cf90: 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65  shifting by a ne
cfa0: 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73  gative amount, s
cfb0: 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65  hift in the othe
cfc0: 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20  r direction */. 
cfd0: 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20     if( iB<0 ){. 
cfe0: 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
cff0: 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53  ShiftRight==OP_S
d000: 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20  hiftLeft+1 );.  
d010: 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68      op = 2*OP_Sh
d020: 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70  iftLeft + 1 - op
d030: 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e  ;.      iB = iB>
d040: 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34  (-64) ? -iB : 64
d050: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
d060: 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20   iB>=64 ){.     
d070: 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20   iA = (iA>=0 || 
d080: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
d090: 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20  ) ? 0 : -1;.    
d0a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
d0b0: 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69  cpy(&uA, &iA, si
d0c0: 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20  zeof(uA));.     
d0d0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66   if( op==OP_Shif
d0e0: 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20  tLeft ){.       
d0f0: 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20   uA <<= iB;.    
d100: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
d110: 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20   uA >>= iB;.    
d120: 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65      /* Sign-exte
d130: 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68  nd on a right sh
d140: 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76  ift of a negativ
d150: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
d160: 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75      if( iA<0 ) u
d170: 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66  A |= ((((u64)0xf
d180: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78  fffffff)<<32)|0x
d190: 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34  ffffffff) << (64
d1a0: 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -iB);.      }.  
d1b0: 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20      memcpy(&iA, 
d1c0: 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29  &uA, sizeof(iA))
d1d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  ;.    }.  }.  pO
d1e0: 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20  ut->u.i = iA;.  
d1f0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d200: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
d210: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d220: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
d230: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
d240: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50  opsis: r[P1]=r[P
d250: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
d260: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
d270: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
d280: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
d290: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
d2a0: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
d2b0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
d2c0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
d2d0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
d2e0: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
d2f0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
d300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
d310: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d320: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d330: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d340: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
d350: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
d360: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
d370: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
d380: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
d390: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
d3a0: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
d3b0: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
d3c0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d3d0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d3e0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
d3f0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
d400: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
d410: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
d420: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
d430: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
d440: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
d450: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
d460: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
d470: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
d480: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
d490: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
d4a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
d4b0: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
d4c0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
d4d0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d4e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d4f0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d500: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
d510: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
d520: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
d530: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
d540: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
d550: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
d560: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
d570: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
d580: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d590: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
d5a0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
d5b0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
d5c0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
d5d0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
d5e0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d5f0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
d600: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
d610: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
d620: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
d630: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d640: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
d650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
d660: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d670: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
d680: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
d690: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
d6a0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
d6b0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
d6c0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
d6d0: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
d6e0: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
d6f0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
d700: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
d710: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
d720: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
d730: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
d740: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
d750: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
d760: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
d770: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
d780: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
d790: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
d7a0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
d7b0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
d7c0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
d7d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
d7e0: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d800: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d810: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d820: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
d830: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
d840: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d850: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
d860: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
d870: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
d880: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
d890: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
d8a0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
d8b0: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
d8c0: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
d8d0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d8e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d8f0: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
d900: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
d910: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e  .** <ul>.** <li>
d920: 20 50 32 3d 3d 27 41 27 20 26 72 61 72 72 3b 20   P2=='A' &rarr; 
d930: 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  BLOB.** <li> P2=
d940: 3d 27 42 27 20 26 72 61 72 72 3b 20 54 45 58 54  ='B' &rarr; TEXT
d950: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 43 27  .** <li> P2=='C'
d960: 20 26 72 61 72 72 3b 20 4e 55 4d 45 52 49 43 0a   &rarr; NUMERIC.
d970: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44 27 20  ** <li> P2=='D' 
d980: 26 72 61 72 72 3b 20 49 4e 54 45 47 45 52 0a 2a  &rarr; INTEGER.*
d990: 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27 20 26  * <li> P2=='E' &
d9a0: 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20 3c 2f  rarr; REAL.** </
d9b0: 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ul>.**.** A NULL
d9c0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
d9d0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
d9e0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
d9f0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
da00: 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20   OP_Cast: {     
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
da20: 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
da30: 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45   pOp->p2>=SQLITE
da40: 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70  _AFF_BLOB && pOp
da50: 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2<=SQLITE_AFF
da60: 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63  _REAL );.  testc
da70: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
da80: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b  LITE_AFF_TEXT );
da90: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
daa0: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
dab0: 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63  _BLOB );.  testc
dac0: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
dad0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
dae0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
daf0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
db00: 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20  AFF_INTEGER );. 
db10: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
db20: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2==SQLITE_AFF_R
db30: 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  EAL );.  pIn1 = 
db40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
db50: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
db60: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72  ge(p, pIn1);.  r
db70: 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
db80: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
db90: 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c  dbeMemCast(pIn1,
dba0: 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69   pOp->p2, encodi
dbb0: 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
dbc0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
dbd0: 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
dbe0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
dbf0: 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
dc00: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
dc10: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
dc20: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
dc30: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
dc40: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
dc50: 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]==r[P1].**.** 
dc60: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
dc70: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
dc80: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
dc90: 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29 20 74  g(P3)==reg(P1) t
dca0: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
dcb0: 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69  ddress P2.  Or i
dcc0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
dcd0: 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74  REP2 flag is set
dce0: 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20   in P5, then.** 
dcf0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
dd00: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
dd10: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
dd20: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
dd30: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
dd40: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
dd50: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
dd60: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
dd70: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
dd80: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
dd90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
dda0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
ddb0: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
ddc0: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
ddd0: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
dde0: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
ddf0: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
de00: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
de10: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
de20: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
de30: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
de40: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
de50: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
de60: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
de70: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
de80: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
de90: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
dea0: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
deb0: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
dec0: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
ded0: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
dee0: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
def0: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
df00: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
df10: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
df20: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
df30: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
df40: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
df50: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
df60: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
df70: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
df80: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
df90: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
dfa0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
dfb0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
dfc0: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
dfd0: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
dfe0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
dff0: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
e000: 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20 74 6f  ** P4 is used to
e010: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
e020: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
e030: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
e040: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
e050: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
e060: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
e070: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
e080: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
e090: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
e0a0: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
e0b0: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
e0c0: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
e0d0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
e0e0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
e0f0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
e100: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
e110: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
e120: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
e130: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20  an blobs..**.** 
e140: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e150: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
e160: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
e170: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e180: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
e190: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
e1a0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
e1b0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
e1c0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
e1d0: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
e1e0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e1f0: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
e200: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e210: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e220: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
e230: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
e240: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
e250: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
e260: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
e270: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
e280: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
e290: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
e2a0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
e2b0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61  SQLITE_STOREP2 a
e2c0: 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  nd SQLITE_KEEPNU
e2d0: 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  LL flags are set
e2e0: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e   then the.** con
e2f0: 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73  tent of r[P2] is
e300: 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66   only changed if
e310: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
e320: 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c  s NULL or 0 (fal
e330: 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  se)..** In other
e340: 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20   words, a prior 
e350: 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c  r[P2] value will
e360: 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74   not be overwrit
e370: 74 65 6e 20 62 79 20 31 20 28 74 72 75 65 29 2e  ten by 1 (true).
e380: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
e390: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e3a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
e3b0: 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]!=r[P1].**
e3c0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e3d0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71 20  ust like the Eq 
e3e0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e3f0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e400: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
e410: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
e420: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
e430: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
e440: 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65  ee the Eq opcode
e450: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
e460: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e470: 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51  **.** If both SQ
e480: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64  LITE_STOREP2 and
e490: 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c   SQLITE_KEEPNULL
e4a0: 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74   flags are set t
e4b0: 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65  hen the.** conte
e4c0: 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f  nt of r[P2] is o
e4d0: 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74  nly changed if t
e4e0: 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
e4f0: 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75 65 29  NULL or 1 (true)
e500: 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
e510: 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50  rds, a prior r[P
e520: 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f  2] value will no
e530: 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  t be overwritten
e540: 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a   by 0 (false)..*
e550: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20  /./* Opcode: Lt 
e560: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e570: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
e580: 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P3]<r[P1].**.**
e590: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
e5a0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
e5b0: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
e5c0: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
e5d0: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
e5e0: 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69  ddress P2.  Or i
e5f0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
e600: 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74  REP2 flag is set
e610: 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20   in P5 store.** 
e620: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e630: 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31  mparison (0 or 1
e640: 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72   or NULL) into r
e650: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
e660: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
e670: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
e680: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
e690: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
e6a0: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
e6b0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61  NULL then the ta
e6c0: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
e6d0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
e6e0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
e6f0: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
e700: 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74  l through if eit
e710: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e720: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
e730: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
e740: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
e750: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
e760: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
e770: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
e780: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
e790: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
e7a0: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
e7b0: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
e7c0: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
e7d0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
e7e0: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
e7f0: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
e800: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
e810: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
e820: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
e830: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
e840: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
e850: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
e860: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
e870: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
e880: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
e890: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
e8a0: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
e8b0: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
e8c0: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
e8d0: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
e8e0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
e8f0: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
e900: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
e910: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
e920: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
e930: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
e940: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
e950: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
e960: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
e970: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
e980: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
e990: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
e9a0: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
e9b0: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
e9c0: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
e9d0: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
e9e0: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
e9f0: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
ea00: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
ea10: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
ea20: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
ea30: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
ea40: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
ea50: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
ea60: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
ea70: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
ea80: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
ea90: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
eaa0: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
eab0: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
eac0: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
ead0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
eae0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
eaf0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
eb00: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
eb10: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
eb20: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
eb30: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
eb40: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
eb50: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
eb60: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
eb70: 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]<=r[P1].**
eb80: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
eb90: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
eba0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
ebb0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
ebc0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
ebd0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
ebe0: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
ebf0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
ec00: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
ec10: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
ec20: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
ec30: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
ec40: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
ec50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
ec60: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ec70: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
ec80: 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  3]>r[P1].**.** T
ec90: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
eca0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ecb0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ecc0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ecd0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
ece0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
ecf0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
ed00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
ed10: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
ed20: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
ed30: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
ed40: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
ed50: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
ed60: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ed70: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
ed80: 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]>=r[P1].**.*
ed90: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
eda0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
edb0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
edc0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
edd0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
ede0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
edf0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
ee00: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
ee10: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
ee20: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
ee30: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
ee40: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
ee50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
ee60: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
ee70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ee80: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
ee90: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
eea0: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
eeb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
eec0: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
eed0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
eee0: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
eef0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ef00: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
ef10: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ef20: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
ef30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ef40: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
ef50: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ef60: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
ef70: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ef80: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
ef90: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
efa0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
efb0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
efc0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
efd0: 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20  3 */.  int res, 
efe0: 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20 52 65  res2;      /* Re
eff0: 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70  sult of the comp
f000: 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61  arison of pIn1 a
f010: 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20  gainst pIn3 */. 
f020: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
f030: 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
f040: 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70   to use for comp
f050: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  arison */.  u16 
f060: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
f070: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
f080: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31  al value of pIn1
f090: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36  ->flags */.  u16
f0a0: 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20   flags3;        
f0b0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
f0c0: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
f0d0: 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70  3->flags */..  p
f0e0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
f0f0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
f100: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
f110: 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e   flags1 = pIn1->
f120: 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20  flags;.  flags3 
f130: 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
f140: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
f150: 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20  lags3)&MEM_Null 
f160: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ){.    /* One or
f170: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f180: 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69  re NULL */.    i
f190: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f1a0: 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20  ITE_NULLEQ ){.  
f1b0: 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45      /* If SQLITE
f1c0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28  _NULLEQ is set (
f1d0: 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20  which will only 
f1e0: 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70  happen if the op
f1f0: 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20  erator is.      
f200: 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e  ** OP_Eq or OP_N
f210: 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e) then take the
f220: 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70   jump or not dep
f230: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
f240: 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f  r.      ** or no
f250: 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  t both operands 
f260: 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20  are null..      
f270: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
f280: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f290: 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Eq || pOp->opco
f2a0: 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
f2b0: 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
f2c0: 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
f2d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  )==0 );.      as
f2e0: 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
f2f0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f300: 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  LL)==0 );.      
f310: 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61 67  if( (flags1&flag
f320: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
f330: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
f340: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
f350: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
f360: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
f370: 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65 71 75  Operands are equ
f380: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
f390: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
f3a0: 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73   1;  /* Operands
f3b0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
f3c0: 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
f3d0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
f3e0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
f3f0: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
f400: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
f410: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
f420: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f430: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
f440: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
f450: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
f460: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f470: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
f480: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
f490: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f4a0: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
f4b0: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
f4c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
f4d0: 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d        iCompare =
f4e0: 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e   1;    /* Operan
f4f0: 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ds are not equal
f500: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   */.        memA
f510: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
f520: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d  pOut);.        M
f530: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f540: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
f550: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
f560: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
f570: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
f580: 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
f590: 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
f5a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
f5b0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
f5c0: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
f5d0: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
f5e0: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d  to_p2;.        }
f5f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
f600: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
f610: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
f620: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f630: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
f640: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
f650: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
f660: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
f670: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
f680: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
f690: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
f6a0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
f6b0: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72 20  flags3)&MEM_Str 
f6c0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
f6d0: 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
f6e0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
f6f0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
f700: 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c 79  .          apply
f710: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
f720: 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 20  pIn1,0);.       
f730: 20 20 20 74 65 73 74 63 61 73 65 28 20 66 6c 61     testcase( fla
f740: 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73  gs3!=pIn3->flags
f750: 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62 6c 65 20   ); /* Possible 
f760: 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33 20 2a 2f  if pIn1==pIn3 */
f770: 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73  .          flags
f780: 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
f790: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
f7a0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
f7b0: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
f7c0: 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
f7d0: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
f7e0: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
f7f0: 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b  ffinity(pIn3,0);
f800: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
f810: 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64   }.      /* Hand
f820: 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
f830: 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f  se of integer co
f840: 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61  mparison here, a
f850: 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70  s an.      ** op
f860: 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61  timization, to a
f870: 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73  void a call to s
f880: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
f890: 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  () */.      if( 
f8a0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
f8b0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
f8c0: 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
f8d0: 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
f8e0: 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  i > pIn1->u.i ){
f8f0: 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20   res = +1; goto 
f900: 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20  compare_op; }.  
f910: 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
f920: 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20  u.i < pIn1->u.i 
f930: 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74  ){ res = -1; got
f940: 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a  o compare_op; }.
f950: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
f960: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f  .        goto co
f970: 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20  mpare_op;.      
f980: 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
f990: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
f9a0: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
f9b0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26     if( (flags1 &
f9c0: 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
f9d0: 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49  (flags1 & (MEM_I
f9e0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
f9f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
fa00: 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
fa10: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
fa20: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
fa30: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
fa40: 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
fa50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
fa60: 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c  mStringify(pIn1,
fa70: 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
fa80: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
fa90: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e   (flags1&MEM_Dyn
faa0: 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ) != (pIn1->flag
fab0: 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
fac0: 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28        flags1 = (
fad0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn1->flags & ~M
fae0: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
faf0: 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70  flags1 & MEM_Typ
fb00: 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20 20  eMask);.        
fb10: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 49  assert( pIn1!=pI
fb20: 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  n3 );.      }.  
fb30: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
fb40: 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
fb50: 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f   (flags3 & (MEM_
fb60: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
fb70: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
fb80: 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
fb90: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
fba0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
fbb0: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
fbc0: 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
fbd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
fbe0: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33  emStringify(pIn3
fbf0: 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
fc00: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
fc10: 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79  ( (flags3&MEM_Dy
fc20: 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  n) != (pIn3->fla
fc30: 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
fc40: 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20         flags3 = 
fc50: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn3->flags & ~
fc60: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
fc70: 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79  (flags3 & MEM_Ty
fc80: 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d  peMask);.      }
fc90: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
fca0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
fcb0: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
fcc0: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
fcd0: 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69  ;.    res = sqli
fce0: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49  te3MemCompare(pI
fcf0: 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  n3, pIn1, pOp->p
fd00: 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f  4.pColl);.  }.co
fd10: 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41  mpare_op:.  /* A
fd20: 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65  t this point, re
fd30: 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a  s is negative, z
fd40: 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65  ero, or positive
fd50: 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20   if reg[P1] is. 
fd60: 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65   ** less than, e
fd70: 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
fd80: 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d  ter than reg[P3]
fd90: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
fda0: 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68   Compute.  ** th
fdb0: 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73  e answer to this
fdc0: 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73   operator in res
fdd0: 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  2, depending on 
fde0: 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69  what the compari
fdf0: 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f  son.  ** operato
fe00: 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20  r actually is.  
fe10: 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f  The next block o
fe20: 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f  f code depends o
fe30: 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20  n the fact.  ** 
fe40: 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61  that the 6 compa
fe50: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
fe60: 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20  are consecutive 
fe70: 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73  integers in this
fe80: 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45  .  ** order:  NE
fe90: 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54  , EQ, GT, LE, LT
fea0: 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74  , GE */.  assert
feb0: 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31  ( OP_Eq==OP_Ne+1
fec0: 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
fed0: 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73  t==OP_Ne+2 ); as
fee0: 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f  sert( OP_Le==OP_
fef0: 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  Ne+3 );.  assert
ff00: 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34  ( OP_Lt==OP_Ne+4
ff10: 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
ff20: 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20  e==OP_Ne+5 );.  
ff30: 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20  if( res<0 ){    
ff40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff50: 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67      /* ne, eq, g
ff60: 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f  t, le, lt, ge */
ff70: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
ff80: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
ff90: 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aLTb[] = { 1,  0
ffa0: 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30  ,  0,  1,  1,  0
ffb0: 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
ffc0: 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  LTb[pOp->opcode 
ffd0: 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73  - OP_Ne];.  }els
ffe0: 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a  e if( res==0 ){.
fff0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10000 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
10010 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c  EQb[] = { 0,  1,
10020 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20    0,  1,  0,  1 
10030 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45  };.    res2 = aE
10040 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Qb[pOp->opcode -
10050 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
10060 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10070 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10080 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20   aGTb[] = { 1,  
10090 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20  0,  1,  0,  0,  
100a0 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  1 };.    res2 = 
100b0 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aGTb[pOp->opcode
100c0 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a   - OP_Ne];.  }..
100d0 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
100e0 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
100f0 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
10100 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
10110 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72  ters. */.  asser
10120 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
10130 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
10140 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29  lags1 & MEM_Dyn)
10150 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
10160 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73  s = flags1;.  as
10170 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
10180 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
10190 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44   (flags3 & MEM_D
101a0 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66  yn) );.  pIn3->f
101b0 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a  lags = flags3;..
101c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
101d0 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
101e0 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
101f0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
10200 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b   iCompare = res;
10210 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
10220 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  5 & SQLITE_KEEPN
10230 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ULL)!=0 ){.     
10240 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c   /* The KEEPNULL
10250 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f   flag prevents O
10260 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72  P_Eq from overwr
10270 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74  iting a NULL wit
10280 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  h 1.      ** and
10290 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20   prevents OP_Ne 
102a0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
102b0 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54   NULL with 0.  T
102c0 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a  his flag.      *
102d0 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  * is only used i
102e0 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65  n contexts where
102f0 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a   either:.      *
10300 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45  *   (1) op==OP_E
10310 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c  q && (r[P2]==NUL
10320 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20  L || r[P2]==0). 
10330 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70       **   (2) op
10340 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32  ==OP_Ne && (r[P2
10350 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d  ]==NULL || r[P2]
10360 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68  ==1).      ** Th
10370 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f  erefore it is no
10380 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63  t necessary to c
10390 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74  heck the content
103a0 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20   of r[P2] for.  
103b0 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a      ** NULL. */.
103c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
103d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
103e0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
103f0 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
10400 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20  assert( res2==0 
10410 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20  || res2==1 );.  
10420 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
10430 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==0 && pOp->op
10440 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
10450 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
10460 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f  es2==1 && pOp->o
10470 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
10480 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10490 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
104a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
104b0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
104c0 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
104d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
104e0 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70  ;.      if( (pOp
104f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29  ->opcode==OP_Eq)
10500 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a  ==res2 ) break;.
10510 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f      }.    memAbo
10520 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
10530 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
10540 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
10550 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
10560 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20  ->u.i = res2;.  
10570 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10580 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
10590 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
105a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
105b0 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  s!=0, (pOp->p5 &
105c0 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
105d0 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
105e0 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  s2 ){.      goto
105f0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
10600 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
10610 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c  }../* Opcode: El
10620 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a  seNotEq * P2 * *
10630 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
10640 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69  code must immedi
10650 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20  ately follow an 
10660 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63  OP_Lt or OP_Gt c
10670 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
10680 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74  or..** If result
10690 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d   of an OP_Eq com
106a0 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73  parison on the s
106b0 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73  ame two operands
106c0 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62  .** would have b
106d0 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20  e NULL or false 
106e0 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a  (0), then then j
106f0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49  ump to P2. .** I
10700 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
10710 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69  an OP_Eq compari
10720 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70  son on the two p
10730 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73  revious operands
10740 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62  .** would have b
10750 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68  een true (1), th
10760 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  en fall through.
10770 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65  .*/.case OP_Else
10780 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f  NotEq: {       /
10790 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43  * same as TK_ESC
107a0 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61  APE, jump */.  a
107b0 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
107c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b  ;.  assert( pOp[
107d0 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c  -1].opcode==OP_L
107e0 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  t || pOp[-1].opc
107f0 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20  ode==OP_Gt );.  
10800 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
10810 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
10820 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61  EP2 );.  VdbeBra
10830 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72  nchTaken(iCompar
10840 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  e!=0, 2);.  if( 
10850 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f  iCompare!=0 ) go
10860 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
10870 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
10880 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69  pcode: Permutati
10890 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  on * * * P4 *.**
108a0 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d  .** Set the perm
108b0 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  utation used by 
108c0 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
108d0 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 6e  perator in the n
108e0 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
108f0 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
10900 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
10910 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  n the P4 operand
10920 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
10930 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
10940 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
10950 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
10960 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
10970 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
10980 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
10990 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
109a0 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
109b0 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
109c0 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
109d0 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
109e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
109f0 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20   integer in the 
10a00 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79  P4 integer array
10a10 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f   is the length o
10a20 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61  f the array.** a
10a30 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f  nd does not beco
10a40 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  me part of the p
10a50 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  ermutation..*/.c
10a60 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
10a70 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
10a80 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
10a90 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
10aa0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
10ab0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
10ac0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
10ad0 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73 73  Compare );.  ass
10ae0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20 26  ert( pOp[1].p5 &
10af0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
10b00 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
10b10 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
10b20 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
10b30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10b40 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
10b50 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
10b60 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
10b70 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
10b80 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
10b90 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
10ba0 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
10bb0 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
10bc0 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
10bd0 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
10be0 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
10bf0 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
10c00 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
10c10 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
10c20 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
10c30 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10c40 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
10c50 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
10c60 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
10c70 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
10c80 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
10c90 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
10ca0 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
10cb0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
10cc0 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
10cd0 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
10ce0 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
10cf0 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
10d00 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
10d10 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
10d20 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
10d30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
10d40 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
10d50 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
10d60 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
10d70 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
10d80 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
10d90 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
10da0 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
10db0 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
10dc0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
10dd0 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
10de0 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
10df0 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
10e00 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
10e10 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
10e20 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
10e30 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
10e40 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
10e50 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
10e60 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
10e70 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
10e80 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
10e90 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
10ea0 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
10eb0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
10ec0 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
10ed0 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
10ee0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
10ef0 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
10f00 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
10f10 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
10f20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
10f30 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
10f40 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50  der */.  int *aP
10f50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20 54  ermute;     /* T
10f60 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
10f70 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
10f80 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
10f90 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 50  TE)==0 ){.    aP
10fa0 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d 65  ermute = 0;.  }e
10fb0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
10fc0 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
10fd0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
10fe0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d 75  opcode==OP_Permu
10ff0 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61 73  tation );.    as
11000 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
11010 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
11020 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75 74  Y );.    aPermut
11030 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61  e = pOp[-1].p4.a
11040 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65 72  i + 1;.    asser
11050 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20 29  t( aPermute!=0 )
11060 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d  ;.  }.  n = pOp-
11070 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  >p3;.  pKeyInfo 
11080 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
11090 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  fo;.  assert( n>
110a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
110b0 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20  KeyInfo!=0 );.  
110c0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
110d0 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69  p2 = pOp->p2;.#i
110e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
110f0 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
11100 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
11110 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
11120 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
11130 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
11140 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
11150 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
11160 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
11170 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11180 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11190 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
111a0 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p2+mx<=(p->nMe
111b0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
111c0 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
111d0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
111e0 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
111f0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11200 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
11210 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
11220 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
11230 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
11240 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
11250 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
11260 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
11270 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
11280 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
11290 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
112a0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
112b0 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
112c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
112d0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
112e0 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
112f0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
11300 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
11310 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
11320 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
11330 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
11340 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
11350 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69  pKeyInfo->nKeyFi
11360 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
11370 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
11380 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
11390 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
113a0 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
113b0 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
113c0 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
113d0 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
113e0 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
113f0 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
11400 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
11410 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
11420 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
11430 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
11440 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11450 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
11460 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
11470 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
11480 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
11490 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
114a0 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
114b0 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
114c0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
114d0 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
114e0 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
114f0 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
11500 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
11510 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
11520 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
11530 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
11540 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
11550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
11560 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
11570 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
11580 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
11590 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
115a0 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
115b0 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
115c0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
115d0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
115e0 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
115f0 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
11600 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
11610 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f  chTaken(2,3); pO
11620 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
11630 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
11640 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11650 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
11660 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11670 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
11680 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
11690 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
116a0 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
116b0 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
116c0 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
116d0 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
116e0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
116f0 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
11700 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
11710 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
11720 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
11730 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
11740 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
11750 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
11760 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
11770 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
11780 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
11790 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
117a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
117b0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
117c0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
117d0 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
117e0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
117f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
11800 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
11810 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
11820 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
11830 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
11840 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
11850 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
11860 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
11870 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
11880 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
11890 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
118a0 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
118b0 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
118c0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
118d0 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
118e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
118f0 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
11900 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
11910 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
11920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11930 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
11940 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
11950 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
11960 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
11970 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
11980 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
11990 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
119a0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
119b0 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
119c0 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
119d0 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
119e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
119f0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
11a00 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11a10 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
11a20 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
11a30 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
11a40 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
11a50 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
11a60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
11a70 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
11a80 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11a90 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
11aa0 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
11ab0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
11ac0 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
11ad0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
11ae0 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
11af0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
11b00 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
11b10 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
11b20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
11b30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
11b40 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
11b50 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
11b60 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11b70 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
11b80 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
11b90 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
11ba0 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
11bb0 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
11bc0 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
11bd0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11be0 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
11bf0 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
11c00 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
11c10 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
11c20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
11c30 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
11c40 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
11c50 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
11c60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11c70 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
11c80 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11c90 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
11ca0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
11cb0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11cc0 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
11cd0 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
11ce0 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
11cf0 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
11d00 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
11d10 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11d20 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
11d30 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
11d40 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
11d50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
11d60 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11d70 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11d80 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
11d90 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11da0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
11db0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
11dc0 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
11dd0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
11de0 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
11df0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11e00 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
11e10 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
11e20 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
11e30 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65  i = !sqlite3Vdbe
11e40 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
11e50 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11e60 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
11e70 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
11e80 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
11e90 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
11ea0 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
11eb0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
11ec0 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
11ed0 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
11ee0 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
11ef0 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
11f00 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
11f10 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
11f20 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
11f30 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
11f40 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
11f50 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
11f60 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11f70 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
11f80 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
11f90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11fa0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
11fb0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
11fc0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
11fd0 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
11fe0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
11ff0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12000 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
12010 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
12020 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
12030 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
12040 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
12050 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
12060 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
12070 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75  **.** Fall throu
12080 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
12090 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66  nstruction the f
120a0 69 72 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f  irst time this o
120b0 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f  pcode is.** enco
120c0 75 6e 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20  untered on each 
120d0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
120e0 65 20 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67  e byte-code prog
120f0 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  ram.  Jump to P2
12100 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e  .** on the secon
12110 64 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  d and all subseq
12120 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20  uent encounters 
12130 64 75 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20  during the same 
12140 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  invocation..**.*
12150 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67  * Top-level prog
12160 72 61 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66  rams determine f
12170 69 72 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20  irst invocation 
12180 62 79 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65  by comparing the
12190 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61   P1.** operand a
121a0 67 61 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70  gainst the P1 op
121b0 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f  erand on the OP_
121c0 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74  Init opcode at t
121d0 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20  he beginning.** 
121e0 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
121f0 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
12200 73 20 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66  s differ, then f
12210 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
12220 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f  make.** the P1 o
12230 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71  f this opcode eq
12240 75 61 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66  ual to the P1 of
12250 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31   OP_Init.  If P1
12260 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74   values are.** t
12270 68 65 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b  he same then tak
12280 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a  e the jump..**.*
12290 2a 20 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d  * For subprogram
122a0 73 2c 20 74 68 65 72 65 20 69 73 20 61 20 62 69  s, there is a bi
122b0 74 6d 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62  tmask in the Vdb
122c0 65 46 72 61 6d 65 20 74 68 61 74 20 64 65 74 65  eFrame that dete
122d0 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65  rmines.** whethe
122e0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
122f0 70 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65  p should be take
12300 6e 2e 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20  n.  The bitmask 
12310 69 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20  is necessary.** 
12320 62 65 63 61 75 73 65 20 74 68 65 20 73 65 6c 66  because the self
12330 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74  -altering code t
12340 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f  rick does not wo
12350 72 6b 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  rk for recursive
12360 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f  .** triggers..*/
12370 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12390 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41  jump */.  u32 iA
123a0 64 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ddr;            
123b0 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
123c0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
123d0 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
123e0 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65  p->aOp[0].opcode
123f0 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69  ==OP_Init );.  i
12400 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
12410 20 20 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74      iAddr = (int
12420 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b  )(pOp - p->aOp);
12430 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72  .    if( (p->pFr
12440 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72  ame->aOnce[iAddr
12450 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72  /8] & (1<<(iAddr
12460 20 26 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20   & 7)))!=0 ){.  
12470 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12480 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
12490 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
124a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70  ;.    }.    p->p
124b0 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64  Frame->aOnce[iAd
124c0 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64  dr/8] |= 1<<(iAd
124d0 64 72 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65  dr & 7);.  }else
124e0 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70  {.    if( p->aOp
124f0 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20  [0].p1==pOp->p1 
12500 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61  ){.      VdbeBra
12510 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a  nchTaken(1, 2);.
12520 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
12530 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
12540 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
12550 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d  en(0, 2);.  pOp-
12560 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e  >p1 = p->aOp[0].
12570 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
12580 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
12590 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
125a0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
125b0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
125c0 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
125d0 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
125e0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
125f0 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
12600 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
12610 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
12620 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
12630 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
12640 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
12650 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
12660 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
12670 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
12680 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
12690 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
126a0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
126b0 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
126c0 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
126d0 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69  dered false if i
126e0 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
126f0 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
12700 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
12710 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
12720 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
12730 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
12740 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
12750 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12770 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
12780 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
12790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
127a0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
127b0 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   c;.  pIn1 = &aM
127c0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
127d0 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
127e0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
127f0 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
12800 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70  }else{.    if( p
12810 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12820 5f 49 6e 74 20 29 7b 0a 20 20 20 20 20 20 63 20  _Int ){.      c 
12830 3d 20 70 49 6e 31 2d 3e 75 2e 69 21 3d 30 3b 0a  = pIn1->u.i!=0;.
12840 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12850 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
12860 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21  RealValue(pIn1)!
12870 3d 30 2e 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20  =0.0;.    }.    
12880 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
12890 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
128a0 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  !c;.  }.  VdbeBr
128b0 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20  anchTaken(c!=0, 
128c0 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20  2);.  if( c ){. 
128d0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
128e0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
128f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
12900 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
12910 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
12920 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f  f r[P1]==NULL go
12930 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
12940 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12950 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12960 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
12970 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
12980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12990 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
129a0 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
129b0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
129c0 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
129d0 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
129e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
129f0 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)!=0, 2);.  if
12a00 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
12a10 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
12a20 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
12a30 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
12a40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12a50 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
12a60 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
12a70 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
12a80 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
12a90 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
12aa0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12ab0 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
12ac0 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
12ad0 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
12ae0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12af0 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
12b00 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
12b10 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
12b20 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
12b30 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
12b40 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
12b50 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
12b60 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12b70 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
12b80 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
12b90 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12ba0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 75  ./* Opcode: IfNu
12bb0 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33 20 2a  llRow P1 P2 P3 *
12bc0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
12bd0 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68  if P1.nullRow th
12be0 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67  en r[P3]=NULL, g
12bf0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65  oto P2.**.** Che
12c00 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ck the cursor P1
12c10 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 69 73   to see if it is
12c20 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
12c30 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20 72 6f  ing at a NULL ro
12c40 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c 20  w..** If it is, 
12c50 74 68 65 6e 20 73 65 74 20 72 65 67 69 73 74 65  then set registe
12c60 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61 6e 64  r P3 to NULL and
12c70 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
12c80 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
12c90 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20 4e 55  1 is not on a NU
12ca0 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66 61 6c  LL row, then fal
12cb0 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68 6f 75  l through withou
12cc0 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20  t making any.** 
12cd0 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73 65  changes..*/.case
12ce0 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b   OP_IfNullRow: {
12cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
12d00 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
12d10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
12d20 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
12d30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
12d40 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
12d50 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
12d60 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c  sr[pOp->p1]->nul
12d70 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
12d80 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
12d90 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  l(aMem + pOp->p3
12da0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
12db0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
12dc0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  eak;.}..#ifdef S
12dd0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
12de0 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20  SET_SQL_FUNC./* 
12df0 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 20 50  Opcode: Offset P
12e00 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
12e10 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 20 3d  ynopsis: r[P3] =
12e20 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 50   sqlite_offset(P
12e30 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  1).**.** Store i
12e40 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50 33 5d  n register r[P3]
12e50 20 74 68 65 20 62 79 74 65 20 6f 66 66 73 65 74   the byte offset
12e60 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
12e70 73 65 20 66 69 6c 65 20 74 68 61 74 20 69 73 20  se file that is 
12e80 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f 66 20  the.** start of 
12e90 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f 72 20  the payload for 
12ea0 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
12eb0 69 63 68 20 74 68 61 74 20 63 75 72 73 6f 72 20  ich that cursor 
12ec0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a  P1 is currently.
12ed0 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ** pointing..**.
12ee0 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63 6f 6c  ** P2 is the col
12ef0 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
12f00 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  he argument to t
12f10 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  he sqlite_offset
12f20 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20  () function..** 
12f30 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
12f40 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74 73 65   not use P2 itse
12f50 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32 20 76  lf, but the P2 v
12f60 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
12f70 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65 6e 65  the.** code gene
12f80 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31 2c 20  rator.  The P1, 
12f90 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65 72 61  P2, and P3 opera
12fa0 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70 63 6f  nds to this opco
12fb0 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20 61 73  de are the.** as
12fc0 20 61 73 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   as for OP_Colum
12fd0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
12fe0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 61 76 61  code is only ava
12ff0 69 6c 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65  ilable if SQLite
13000 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
13010 68 20 74 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54  h the.** -DSQLIT
13020 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
13030 53 51 4c 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e  SQL_FUNC option.
13040 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73  .*/.case OP_Offs
13050 65 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  et: {          /
13060 2a 20 6f 75 74 33 20 2a 2f 0a 20 20 56 64 62 65  * out3 */.  Vdbe
13070 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
13080 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
13090 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  r */.  assert( p
130a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
130b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
130c0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
130d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  sr[pOp->p1];.  p
130e0 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
130f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e  Op->p3];.  if( N
13100 45 56 45 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70  EVER(pC==0) || p
13110 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
13120 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20  TYPE_BTREE ){.  
13130 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13140 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
13150 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
13160 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
13170 36 34 28 70 4f 75 74 2c 20 73 71 6c 69 74 65 33  64(pOut, sqlite3
13180 42 74 72 65 65 4f 66 66 73 65 74 28 70 43 2d 3e  BtreeOffset(pC->
13190 75 63 2e 70 43 75 72 73 6f 72 29 29 3b 0a 20 20  uc.pCursor));.  
131a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
131b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
131c0 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f  ABLE_OFFSET_SQL_
131d0 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  FUNC */../* Opco
131e0 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32  de: Column P1 P2
131f0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
13200 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a  opsis: r[P3]=PX.
13210 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
13220 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
13230 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
13240 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
13250 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
13260 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
13270 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
13280 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
13290 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
132a0 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
132b0 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
132c0 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
132d0 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
132e0 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
132f0 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
13300 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
13310 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
13320 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
13330 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
13340 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
13350 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
13360 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
13370 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
13380 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65  .**.** If the re
13390 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65  cord contains fe
133a0 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
133b0 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
133c0 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
133d0 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
133e0 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
133f0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
13400 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
13410 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
13420 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
13430 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
13440 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
13450 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
13460 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
13470 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
13480 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
13490 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
134a0 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
134b0 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
134c0 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
134d0 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
134e0 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
134f0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
13500 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
13510 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
13520 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
13530 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  is bit set..**.*
13540 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
13550 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
13560 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62  FLAG_TYPEOFARG b
13570 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50  its are set on P
13580 35 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65  5 then.** the re
13590 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65  sult is guarante
135a0 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73  ed to only be us
135b0 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
135c0 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29  nt of a length()
135d0 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20  .** or typeof() 
135e0 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63  function, respec
135f0 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61  tively.  The loa
13600 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c  ding of large bl
13610 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b  obs can be.** sk
13620 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68  ipped for length
13630 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65  () and all conte
13640 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62  nt loading can b
13650 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79  e skipped for ty
13660 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  peof()..*/.case 
13670 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69  OP_Column: {.  i
13680 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
13690 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62    /* column numb
136a0 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a  er to retrieve *
136b0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
136c0 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44  pC;    /* The VD
136d0 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42  BE cursor */.  B
136e0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20  tCursor *pCrsr; 
136f0 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63    /* The BTree c
13700 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a  ursor */.  u32 *
13710 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a  aOffset;      /*
13720 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f   aOffset[i] is o
13730 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f  ffset to start o
13740 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20  f data for i-th 
13750 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
13760 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
13770 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
13780 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
13790 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
137a0 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
137b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
137c0 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
137d0 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20  Mem *pDest;     
137e0 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77     /* Where to w
137f0 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74  rite the extract
13800 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65  ed value */.  Me
13810 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
13820 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
13830 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
13840 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
13850 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20  nst u8 *zData;  
13860 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20   /* Part of the 
13870 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
13880 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
13890 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20  u8 *zHdr;    /* 
138a0 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79  Next unparsed by
138b0 74 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  te of the header
138c0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
138d0 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e  zEndHdr; /* Poin
138e0 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74  ter to first byt
138f0 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64  e after the head
13900 65 72 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73  er */.  u64 offs
13910 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34  et64;      /* 64
13920 2d 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20  -bit offset */. 
13930 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20   u32 t;         
13940 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f      /* A type co
13950 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  de from the reco
13960 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d  rd header */.  M
13970 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
13980 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
13990 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
139a0 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  */..  pC = p->ap
139b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
139c0 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20  p2 = pOp->p2;.. 
139d0 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
139e0 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65  r cache is stale
139f0 20 28 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20   (meaning it is 
13a00 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  not currently po
13a10 69 6e 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20  int at.  ** the 
13a20 63 6f 72 72 65 63 74 20 72 6f 77 29 20 74 68 65  correct row) the
13a30 6e 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f  n bring it up-to
13a40 2d 64 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74  -date by doing t
13a50 68 65 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20  he necessary .  
13a60 2a 2a 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20  ** B-Tree seek. 
13a70 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
13a80 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
13a90 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69  o(&pC, &p2);.  i
13aa0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
13ab0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
13ac0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
13ad0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
13ae0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
13af0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
13b00 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
13b10 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
13b20 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
13b30 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  est);.  assert( 
13b40 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
13b50 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
13b60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
13b70 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
13b80 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29   p2<pC->nField )
13b90 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43  ;.  aOffset = pC
13ba0 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73  ->aOffset;.  ass
13bb0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
13bc0 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e!=CURTYPE_VTAB 
13bd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
13be0 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
13bf0 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d  PE_PSEUDO || pC-
13c00 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73  >nullRow );.  as
13c10 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
13c20 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54  pe!=CURTYPE_SORT
13c30 45 52 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d  ER );..  if( pC-
13c40 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d  >cacheStatus!=p-
13c50 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20 20 20  >cacheCtr ){    
13c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50              /*OP
13c70 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
13c80 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43  LSE*/.    if( pC
13c90 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
13ca0 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54     if( pC->eCurT
13cb0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45  ype==CURTYPE_PSE
13cc0 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  UDO ){.        /
13cd0 2a 20 46 6f 72 20 74 68 65 20 73 70 65 63 69 61  * For the specia
13ce0 6c 20 63 61 73 65 20 6f 66 20 61 73 20 70 73 65  l case of as pse
13cf0 75 64 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20  udo-cursor, the 
13d00 73 65 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64  seekResult field
13d10 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e  .        ** iden
13d20 74 69 66 69 65 73 20 74 68 65 20 72 65 67 69 73  tifies the regis
13d30 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ter that holds t
13d40 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20  he record */.   
13d50 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
13d60 3e 73 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b  >seekResult>0 );
13d70 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
13d80 26 61 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65  &aMem[pC->seekRe
13d90 73 75 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61  sult];.        a
13da0 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
13db0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
13dc0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13dd0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
13de0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ) );.        pC-
13df0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
13e00 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d  C->szRow = pReg-
13e10 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  >n;.        pC->
13e20 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67  aRow = (u8*)pReg
13e30 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ->z;.      }else
13e40 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
13e50 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
13e60 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20  pDest);.        
13e70 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
13e80 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
13e90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72  }else{.      pCr
13ea0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
13eb0 73 6f 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72  sor;.      asser
13ec0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
13ed0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
13ee0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
13ef0 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61  pCrsr );.      a
13f00 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
13f10 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
13f20 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20  (pCrsr) );.     
13f30 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13f40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
13f50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72  ayloadSize(pCrsr
13f60 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  );.      pC->aRo
13f70 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  w = sqlite3Btree
13f80 50 61 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72  PayloadFetch(pCr
13f90 73 72 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b  sr, &pC->szRow);
13fa0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
13fb0 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61  C->szRow<=pC->pa
13fc0 79 6c 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20  yloadSize );.   
13fd0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
13fe0 7a 52 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20  zRow<=65536 );  
13ff0 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20  /* Maximum page 
14000 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f  size is 64KiB */
14010 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70  .      if( pC->p
14020 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33  ayloadSize > (u3
14030 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
14040 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
14050 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  ] ){.        got
14060 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20  o too_big;.     
14070 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d   }.    }.    pC-
14080 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
14090 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
140a0 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
140b0 20 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d   getVarint32(pC-
140c0 3e 61 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30  >aRow, aOffset[0
140d0 5d 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72  ]);.    pC->nHdr
140e0 50 61 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20  Parsed = 0;...  
140f0 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c    if( pC->szRow<
14100 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20  aOffset[0] ){   
14110 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f     /*OPTIMIZATIO
14120 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
14130 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64     /* pC->aRow d
14140 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20  oes not have to 
14150 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20  hold the entire 
14160 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73  row, but it does
14170 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20   at least.      
14180 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72  ** need to cover
14190 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74   the header of t
141a0 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70  he record.  If p
141b0 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
141c0 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a   contain.      *
141d0 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68  * the complete h
141e0 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20  eader, then set 
141f0 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63  it to zero, forc
14200 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74  ing the header t
14210 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79  o be.      ** dy
14220 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
14230 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43  ted. */.      pC
14240 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ->aRow = 0;.    
14250 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b    pC->szRow = 0;
14260 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  ..      /* Make 
14270 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64  sure a corrupt d
14280 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
14290 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72  given us an over
142a0 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20  size header..   
142b0 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f     ** Do this no
142c0 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76  w to avoid an ov
142d0 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c  ersize memory al
142e0 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20  location..      
142f0 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65  **.      ** Type
14300 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
14310 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
14320 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
14330 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
14340 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65      ** types use
14350 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70   so much data sp
14360 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63  ace that there c
14370 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20  an only be 4096 
14380 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20  and 32 of.      
14390 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
143a0 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
143b0 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
143c0 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
143d0 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62  m a.      ** 3-b
143e0 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63  yte type for eac
143f0 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d  h of the maximum
14400 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e   of 32768 column
14410 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20  s plus three.   
14420 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65     ** extra byte
14430 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72  s for the header
14440 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20   length itself. 
14450 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39   32768*3 + 3 = 9
14460 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  8307..      */. 
14470 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74       if( aOffset
14480 5b 30 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61  [0] > 98307 || a
14490 4f 66 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e  Offset[0] > pC->
144a0 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20  payloadSize ){. 
144b0 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
144c0 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20  olumn_corrupt;. 
144d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
144e0 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  {.      /* This 
144f0 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  is an optimizati
14500 6f 6e 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67  on.  By skipping
14510 20 6f 76 65 72 20 74 68 65 20 66 69 72 73 74 20   over the first 
14520 66 65 77 20 74 65 73 74 73 0a 20 20 20 20 20 20  few tests.      
14530 2a 2a 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72  ** (ex: pC->nHdr
14540 50 61 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74  Parsed<=p2) in t
14550 68 65 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c  he next section,
14560 20 77 65 20 61 63 68 69 65 76 65 20 61 0a 20 20   we achieve a.  
14570 20 20 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c      ** measurabl
14580 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61  e performance ga
14590 69 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  in..      **.   
145a0 20 20 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63     ** This branc
145b0 68 20 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20  h is taken even 
145c0 69 66 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30  if aOffset[0]==0
145d0 2e 20 20 53 75 63 68 20 61 20 72 65 63 6f 72 64  .  Such a record
145e0 20 69 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20   is never.      
145f0 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  ** generated by 
14600 53 51 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c  SQLite, and coul
14610 64 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20  d be considered 
14620 63 6f 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20  corruption, but 
14630 77 65 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65  we.      ** acce
14640 70 74 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72  pt it for histor
14650 69 63 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57  ical reasons.  W
14660 68 65 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d  hen aOffset[0]==
14670 30 2c 20 74 68 65 20 63 6f 64 65 20 74 68 69 73  0, the code this
14680 0a 20 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68  .      ** branch
14690 20 6a 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20   jumps to reads 
146a0 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
146b0 74 68 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20  the record, but 
146c0 6e 65 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20  never more.     
146d0 20 2a 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62   ** than a few b
146e0 79 74 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74  ytes.  Even if t
146f0 68 65 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73  he record occurs
14700 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14710 68 65 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a  he page.      **
14720 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74   content area, t
14730 68 65 20 22 70 61 67 65 20 68 65 61 64 65 72 22  he "page header"
14740 20 63 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65   comes after the
14750 20 70 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e   page content an
14760 64 20 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68  d so.      ** th
14770 69 73 20 6f 76 65 72 72 65 61 64 20 69 73 20 68  is overread is h
14780 61 72 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61  armless.  Simila
14790 72 20 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20  r overreads can 
147a0 6f 63 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72  occur for a corr
147b0 75 70 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74  upt.      ** dat
147c0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
147d0 20 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61    */.      zData
147e0 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20   = pC->aRow;.   
147f0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e     assert( pC->n
14800 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b  HdrParsed<=p2 );
14810 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64           /* Cond
14820 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20  itional skipped 
14830 2a 2f 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  */.      testcas
14840 65 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30  e( aOffset[0]==0
14850 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f   );.      goto o
14860 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
14870 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ader;.    }.  }.
14880 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
14890 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72  at least the fir
148a0 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20  st p2+1 entries 
148b0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61  of the header ha
148c0 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72  ve been.  ** par
148d0 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e  sed and valid in
148e0 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20  formation is in 
148f0 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43  aOffset[] and pC
14900 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a  ->aType[]..  */.
14910 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
14920 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
14930 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d  /* If there is m
14940 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c  ore header avail
14950 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67  able for parsing
14960 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
14970 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78  try.    ** to ex
14980 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c  tract additional
14990 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75   fields up throu
149a0 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66  gh the p2+1-th f
149b0 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ield .    */.   
149c0 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66   if( pC->iHdrOff
149d0 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  set<aOffset[0] )
149e0 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  {.      /* Make 
149f0 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74  sure zData point
14a00 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74  s to enough of t
14a10 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76  he record to cov
14a20 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a  er the header. *
14a30 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  /.      if( pC->
14a40 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
14a50 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c     memset(&sMem,
14a60 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
14a70 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
14a80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
14a90 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70  omBtree(pC->uc.p
14aa0 43 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73  Cursor, 0, aOffs
14ab0 65 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20  et[0], &sMem);. 
14ac0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
14ad0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
14ae0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
14af0 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  or;.        zDat
14b00 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b  a = (u8*)sMem.z;
14b10 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
14b20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
14b30 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a  ->aRow;.      }.
14b40 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c    .      /* Fill
14b50 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d   in pC->aType[i]
14b60 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
14b70 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74  values through t
14b80 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20  he p2-th field. 
14b90 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e  */.    op_column
14ba0 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20  _read_header:.  
14bb0 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72      i = pC->nHdr
14bc0 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66  Parsed;.      of
14bd0 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74  fset64 = aOffset
14be0 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20  [i];.      zHdr 
14bf0 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48  = zData + pC->iH
14c00 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  drOffset;.      
14c10 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20  zEndHdr = zData 
14c20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20  + aOffset[0];.  
14c30 20 20 20 20 74 65 73 74 63 61 73 65 28 20 7a 48      testcase( zH
14c40 64 72 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20  dr>=zEndHdr );. 
14c50 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
14c60 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30   if( (t = zHdr[0
14c70 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20  ])<0x80 ){.     
14c80 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20       zHdr++;.   
14c90 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
14ca0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e  += sqlite3VdbeOn
14cb0 65 42 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c  eByteSerialTypeL
14cc0 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
14cd0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
14ce0 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47  zHdr += sqlite3G
14cf0 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c  etVarint32(zHdr,
14d00 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &t);.          
14d10 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69  offset64 += sqli
14d20 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14d30 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
14d40 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61   }.        pC->a
14d50 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20  Type[i++] = t;. 
14d60 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
14d70 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74  ] = (u32)(offset
14d80 36 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29  64 & 0xffffffff)
14d90 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  ;.      }while( 
14da0 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45  i<=p2 && zHdr<zE
14db0 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20  ndHdr );..      
14dc0 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73  /* The record is
14dd0 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20   corrupt if any 
14de0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
14df0 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20   are true:.     
14e00 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65   ** (1) the byte
14e10 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
14e20 65 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20  extend past the 
14e30 64 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20  declared header 
14e40 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32  size.      ** (2
14e50 29 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61  ) the entire hea
14e60 64 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74  der was used but
14e70 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61   not all data wa
14e80 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20  s used.      ** 
14e90 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74  (3) the end of t
14ea0 68 65 20 64 61 74 61 20 65 78 74 65 6e 64 73 20  he data extends 
14eb0 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f  beyond the end o
14ec0 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  f the record..  
14ed0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
14ee0 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20   (zHdr>=zEndHdr 
14ef0 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72  && (zHdr>zEndHdr
14f00 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43   || offset64!=pC
14f10 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a  ->payloadSize)).
14f20 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65         || (offse
14f30 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  t64 > pC->payloa
14f40 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a  dSize).      ){.
14f50 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 66 66          if( aOff
14f60 73 65 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20  set[0]==0 ){.   
14f70 20 20 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20         i = 0;.  
14f80 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a          zHdr = z
14f90 45 6e 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20  EndHdr;.        
14fa0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
14fb0 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
14fc0 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
14fd0 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
14fe0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
14ff0 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
15000 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
15010 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e     }..      pC->
15020 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a  nHdrParsed = i;.
15030 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66        pC->iHdrOf
15040 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64  fset = (u32)(zHd
15050 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20  r - zData);.    
15060 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
15070 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  0 ) sqlite3VdbeM
15080 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
15090 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
150a0 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a     t = 0;.    }.
150b0 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
150c0 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
150d0 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ct new entries f
150e0 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
150f0 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
15100 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
15110 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
15120 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
15130 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
15140 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
15150 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
15160 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
15170 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
15180 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
15190 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
151a0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
151b0 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
151c0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
151d0 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
151e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
151f0 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
15200 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
15210 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
15220 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
15230 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
15240 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
15250 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
15260 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
15270 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
15280 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65     t = pC->aType
15290 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  [p2];.  }..  /* 
152a0 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74  Extract the cont
152b0 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31  ent for the p2+1
152c0 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e  -th column.  Con
152d0 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  trol can only.  
152e0 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  ** reach this po
152f0 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70  int if aOffset[p
15300 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31  2], aOffset[p2+1
15310 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  ], and pC->aType
15320 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c  [p2] are.  ** al
15330 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20  l valid..  */.  
15340 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
15350 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61  HdrParsed );.  a
15360 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
15370 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  E_OK );.  assert
15380 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
15390 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
153a0 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20  pDest) );.  if( 
153b0 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
153c0 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c  Dest) ){.    sql
153d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
153e0 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20  ll(pDest);.  }. 
153f0 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e   assert( t==pC->
15400 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69  aType[p2] );.  i
15410 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
15420 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
15430 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
15440 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
15450 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
15460 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
15470 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
15480 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
15490 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
154a0 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
154b0 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a  ow page */.    z
154c0 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20  Data = pC->aRow 
154d0 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20  + aOffset[p2];. 
154e0 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20     if( t<12 ){. 
154f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
15500 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c  SerialGet(zData,
15510 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
15520 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
15530 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  If the column va
15540 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
15550 20 77 65 20 6e 65 65 64 20 61 20 70 65 72 73 69   we need a persi
15560 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74  stent value, not
15570 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f  .      ** a MEM_
15580 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68  Ephem value.  Th
15590 69 73 20 62 72 61 6e 63 68 20 69 73 20 61 20 66  is branch is a f
155a0 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68  ast short-cut th
155b0 61 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  at is equivalent
155c0 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c  .      ** to cal
155d0 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65  ling sqlite3Vdbe
155e0 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20  SerialGet() and 
155f0 73 71 6c 69 74 65 33 56 64 62 65 44 65 65 70 68  sqlite3VdbeDeeph
15600 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20  emeralize()..   
15610 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74     */.      stat
15620 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c  ic const u16 aFl
15630 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f  ag[] = { MEM_Blo
15640 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54  b, MEM_Str|MEM_T
15650 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65  erm };.      pDe
15660 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74  st->n = len = (t
15670 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44  -12)/2;.      pD
15680 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
15690 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ing;.      if( p
156a0 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c  Dest->szMalloc <
156b0 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20   len+2 ){.      
156c0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
156d0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
156e0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
156f0 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c  beMemGrow(pDest,
15700 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74   len+2, 0) ) got
15710 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
15720 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
15730 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d  Dest->z = pDest-
15740 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20  >zMalloc;.      
15750 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70  }.      memcpy(p
15760 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20  Dest->z, zData, 
15770 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73  len);.      pDes
15780 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20  t->z[len] = 0;. 
15790 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65       pDest->z[le
157a0 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  n+1] = 0;.      
157b0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61  pDest->flags = a
157c0 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d  Flag[t&1];.    }
157d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44  .  }else{.    pD
157e0 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
157f0 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73  ing;.    /* This
15800 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20   branch happens 
15810 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e  only when conten
15820 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  t is on overflow
15830 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66   pages */.    if
15840 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  ( ((pOp->p5 & (O
15850 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
15860 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
15870 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ))!=0.          
15880 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74  && ((t>=12 && (t
15890 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d  &1)==0) || (pOp-
158a0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50  >p5 & OPFLAG_TYP
158b0 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20  EOFARG)!=0)).   
158c0 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69    || (len = sqli
158d0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
158e0 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20  eLen(t))==0.    
158f0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ){.      /* Cont
15900 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e  ent is irrelevan
15910 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20  t for.      **  
15920 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28    1. the typeof(
15930 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20  ) function,.    
15940 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c    **    2. the l
15950 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
15960 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  n if X is a blob
15970 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20  , and.      **  
15980 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74    3. if the cont
15990 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65  ent length is ze
159a0 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20  ro..      ** So 
159b0 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c  we might as well
159c0 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   use bogus conte
159d0 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
159e0 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  eading.      ** 
159f0 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73  content from dis
15a00 6b 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  k. .      **.   
15a10 20 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73     ** Although s
15a20 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15a30 47 65 74 28 29 20 6d 61 79 20 72 65 61 64 20 61  Get() may read a
15a40 74 20 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66  t most 8 bytes f
15a50 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  rom the.      **
15a60 20 62 75 66 66 65 72 20 70 61 73 73 65 64 20 74   buffer passed t
15a70 6f 20 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20  o it, debugging 
15a80 66 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d  function VdbeMem
15a90 50 72 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61  PrettyPrint() ma
15aa0 79 0a 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20  y.      ** read 
15ab0 75 70 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20  up to 16. So 16 
15ac0 62 79 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63  bytes of bogus c
15ad0 6f 6e 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69  ontent is suppli
15ae0 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ed..      */.   
15af0 20 20 20 73 74 61 74 69 63 20 75 38 20 61 5a 65     static u8 aZe
15b00 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73  ro[16];  /* This
15b10 20 69 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f   is the bogus co
15b20 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73  ntent */.      s
15b30 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15b40 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44  Get(aZero, t, pD
15b50 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
15b60 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
15b70 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
15b80 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
15b90 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  or, aOffset[p2],
15ba0 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20   len, pDest);.  
15bb0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
15bc0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
15bd0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15be0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
15bf0 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e  beSerialGet((con
15c00 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c  st u8*)pDest->z,
15c10 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
15c20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
15c30 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
15c40 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75    }.  }..op_colu
15c50 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45  mn_out:.  UPDATE
15c60 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
15c70 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  est);.  REGISTER
15c80 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
15c90 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b  pDest);.  break;
15ca0 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72  ..op_column_corr
15cb0 75 70 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30  upt:.  if( aOp[0
15cc0 5d 2e 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f  ].p3>0 ){.    pO
15cd0 70 20 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e  p = &aOp[aOp[0].
15ce0 70 33 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b  p3-1];.    break
15cf0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
15d00 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
15d10 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74  PT_BKPT;.    got
15d20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15d30 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20  rror;.  }.}../* 
15d40 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
15d50 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
15d60 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
15d70 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  ity(r[P1@P2]).**
15d80 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
15d90 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
15da0 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
15db0 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
15dc0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
15dd0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
15de0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
15df0 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72  g. The N-th char
15e00 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
15e10 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
15e20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
15e30 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
15e40 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15e50 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20   N-th.** memory 
15e60 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67  cell in the rang
15e70 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66  e..*/.case OP_Af
15e80 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73  finity: {.  cons
15e90 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74  t char *zAffinit
15ea0 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69  y;   /* The affi
15eb0 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
15ec0 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69  ed */..  zAffini
15ed0 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
15ee0 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
15ef0 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  ity!=0 );.  asse
15f00 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
15f10 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
15f20 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
15f30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
15f40 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64  em[pOp->p1];.  d
15f50 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o{.    assert( p
15f60 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
15f70 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
15f80 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
15f90 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
15fa0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
15fb0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
15fc0 49 6e 31 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79  In1, *(zAffinity
15fd0 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ++), encoding);.
15fe0 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77      pIn1++;.  }w
15ff0 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b  hile( zAffinity[
16000 30 5d 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  0] );.  break;.}
16010 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
16020 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
16030 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
16040 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72  s: r[P3]=mkrec(r
16050 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43  [P1@P2]).**.** C
16060 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
16070 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
16080 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b  th P1 into the [
16090 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a  record format].*
160a0 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20  * use as a data 
160b0 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61  record in a data
160c0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73  base table or as
160d0 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20   a key.** in an 
160e0 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43  index.  The OP_C
160f0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
16100 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
16110 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  rd later..**.** 
16120 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
16130 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
16140 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
16150 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74  The N-th charact
16160 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
16170 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
16180 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
16190 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
161a0 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d   used for the N-
161b0 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
161c0 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
161d0 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
161e0 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
161f0 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
16200 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
16210 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
16220 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
16230 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
16240 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
16250 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
16260 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
16270 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61  nity BLOB..*/.ca
16280 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
16290 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65  : {.  u8 *zNewRe
162a0 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cord;        /* 
162b0 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64  A buffer to hold
162c0 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
162d0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
162e0 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
162f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16300 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
16310 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20  u64 nData;      
16320 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16330 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
16340 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  a space */.  int
16350 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   nHdr;          
16360 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16370 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
16380 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20   space */.  i64 
16390 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
163a0 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
163b0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
163c0 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  is record */.  i
163d0 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  64 nZero;       
163e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
163f0 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
16400 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
16410 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
16420 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20  nVarint;        
16430 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16440 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e  bytes in a varin
16450 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61  t */.  u32 seria
16460 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a  l_type;       /*
16470 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20   Type field */. 
16480 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
16490 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
164a0 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d   field to be com
164b0 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72  bined into the r
164c0 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
164d0 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20  pLast;          
164e0 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20    /* Last field 
164f0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
16500 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
16510 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16520 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
16530 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16540 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
16550 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  ;       /* The a
16560 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66  ffinity string f
16570 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
16580 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d  .  int file_form
16590 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c  at;       /* Fil
165a0 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20  e format to use 
165b0 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  for encoding */.
165c0 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
165d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
165e0 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
165f0 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f  cord[] header */
16600 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
16610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
16620 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
16630 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20  ecord[] content 
16640 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20  */.  u32 len;   
16650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
16660 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64  ength of a field
16670 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69   */..  /* Assumi
16680 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f  ng the record co
16690 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c  ntains N fields,
166a0 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
166b0 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69  at looks.  ** li
166c0 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20  ke this:.  **.  
166d0 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
166e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16710 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
16720 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79   | hdr-size | ty
16730 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20  pe 0 | type 1 | 
16740 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c  ... | type N-1 |
16750 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64   data0 | ... | d
16760 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20  ata N-1 | .  ** 
16770 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16780 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16790 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
167a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
167b0 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20  --------.  **.  
167c0 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61  ** Data(0) is ta
167d0 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
167e0 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63  r P1.  Data(1) c
167f0 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74  omes from regist
16800 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64  er P1+1.  ** and
16810 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a   so forth..  **.
16820 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66    ** Each type f
16830 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74  ield is a varint
16840 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
16850 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66  e serial type of
16860 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65   the .  ** corre
16870 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c  sponding data el
16880 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74  ement (see sqlit
16890 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
168a0 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64  ()). The.  ** hd
168b0 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20  r-size field is 
168c0 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68  also a varint wh
168d0 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
168e0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
168f0 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65  ning.  ** of the
16900 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30   record to data0
16910 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d  ..  */.  nData =
16920 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
16930 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
16940 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
16950 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20    nHdr = 0;     
16960 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16970 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
16980 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65  r space */.  nZe
16990 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
169a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
169b0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
169c0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
169d0 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
169e0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
169f0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
16a00 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
16a10 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
16a20 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
16a30 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  ld<=(p->nMem+1 -
16a40 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
16a50 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d  ;.  pData0 = &aM
16a60 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
16a70 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
16a80 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
16a90 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
16aa0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
16ab0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
16ac0 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69  at;..  /* Identi
16ad0 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  fy the output re
16ae0 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65  gister */.  asse
16af0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
16b00 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
16b10 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
16b20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
16b30 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
16b40 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
16b50 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41  , pOut);..  /* A
16b60 70 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74  pply the request
16b70 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61  ed affinity to a
16b80 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20  ll inputs.  */. 
16b90 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c   assert( pData0<
16ba0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20  =pLast );.  if( 
16bb0 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20  zAffinity ){.   
16bc0 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
16bd0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70      do{.      ap
16be0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
16bf0 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  ++, *(zAffinity+
16c00 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  +), encoding);. 
16c10 20 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66       assert( zAf
16c20 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20  finity[0]==0 || 
16c30 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  pRec<=pLast );. 
16c40 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69     }while( zAffi
16c50 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a  nity[0] );.  }..
16c60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
16c70 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20  ABLE_NULL_TRIM. 
16c80 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65   /* NULLs can be
16c90 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20   safely trimmed 
16ca0 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20  from the end of 
16cb0 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c  the record, as l
16cc0 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74  ong as.  ** as t
16cd0 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
16ce0 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e   is 2 or more an
16cf0 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d  d none of the om
16d00 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20  itted columns.  
16d10 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55  ** have a non-NU
16d20 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  LL default value
16d30 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63  .  Also, the rec
16d40 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74  ord must be left
16d50 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65   with.  ** at le
16d60 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20  ast one field.  
16d70 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20  If P5>0 then it 
16d80 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65  will be one more
16d90 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69   than the.  ** i
16da0 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69 67 68  ndex of the righ
16db0 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69  t-most column wi
16dc0 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65  th a non-NULL de
16dd0 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20  fault value */. 
16de0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
16df0 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73      while( (pLas
16e00 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  t->flags & MEM_N
16e10 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c  ull)!=0 && nFiel
16e20 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  d>pOp->p5 ){.   
16e30 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20     pLast--;.    
16e40 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20    nField--;.    
16e50 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
16e60 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
16e70 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
16e80 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
16e90 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
16ea0 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
16eb0 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
16ec0 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
16ed0 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
16ee0 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b  .  pRec = pLast;
16ef0 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
16f00 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
16f10 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61  ec) );.    seria
16f20 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
16f30 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
16f40 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
16f50 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28  , &len);.    if(
16f60 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
16f70 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
16f80 20 69 66 28 20 73 65 72 69 61 6c 5f 74 79 70 65   if( serial_type
16f90 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
16fa0 2a 20 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45  * Values with ME
16fb0 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a  M_Null and MEM_Z
16fc0 65 72 6f 20 61 72 65 20 63 72 65 61 74 65 64 20  ero are created 
16fd0 62 79 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75  by xColumn virtu
16fe0 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61  al.        ** ta
16ff0 62 6c 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74  ble methods that
17000 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71   never invoke sq
17010 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78  lite3_result_xxx
17020 78 78 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20  xx() while.     
17030 20 20 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20     ** computing 
17040 61 6e 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f  an unchanging co
17050 6c 75 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e  lumn value in an
17060 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
17070 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69  t..        ** Gi
17080 76 65 20 73 75 63 68 20 76 61 6c 75 65 73 20 61  ve such values a
17090 20 73 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61   special interna
170a0 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61  l-use-only seria
170b0 6c 2d 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20  l-type of 10.   
170c0 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20       ** so that 
170d0 74 68 65 79 20 63 61 6e 20 62 65 20 70 61 73 73  they can be pass
170e0 65 64 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55  ed through to xU
170f0 70 64 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20  pdate and have. 
17100 20 20 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65         ** a true
17110 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e   sqlite3_value_n
17120 6f 63 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20  ochange(). */.  
17130 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
17140 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f  p->p5==OPFLAG_NO
17150 43 48 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f  CHNG_MAGIC || CO
17160 52 52 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20  RRUPT_DB );.    
17170 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
17180 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = 10;.      }els
17190 65 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20  e if( nData ){. 
171a0 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
171b0 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
171c0 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f  lob(pRec) ) goto
171d0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d   no_mem;.      }
171e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a  else{.        nZ
171f0 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e  ero += pRec->u.n
17200 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65  Zero;.        le
17210 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  n -= pRec->u.nZe
17220 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ro;.      }.    
17230 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  }.    nData += l
17240 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  en;.    testcase
17250 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
17260 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  27 );.    testca
17270 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  se( serial_type=
17280 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72  =128 );.    nHdr
17290 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c   += serial_type<
172a0 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74  =127 ? 1 : sqlit
172b0 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
172c0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 70 52  al_type);.    pR
172d0 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69  ec->uTemp = seri
172e0 61 6c 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 28  al_type;.    if(
172f0 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20   pRec==pData0 ) 
17300 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d  break;.    pRec-
17310 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a  -;.  }while(1);.
17320 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f  .  /* EVIDENCE-O
17330 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37  F: R-22564-11647
17340 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69   The header begi
17350 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
17360 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69   varint.  ** whi
17370 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
17380 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
17390 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
173a0 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e  eader. The varin
173b0 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20  t.  ** value is 
173c0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
173d0 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20  header in bytes 
173e0 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69  including the si
173f0 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69  ze varint.  ** i
17400 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74  tself. */.  test
17410 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20  case( nHdr==126 
17420 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
17430 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66  Hdr==127 );.  if
17440 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20  ( nHdr<=126 ){. 
17450 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e     /* The common
17460 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64   case */.    nHd
17470 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  r += 1;.  }else{
17480 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73  .    /* Rare cas
17490 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61  e of a really la
174a0 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  rge header */.  
174b0 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69    nVarint = sqli
174c0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
174d0 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  r);.    nHdr += 
174e0 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28  nVarint;.    if(
174f0 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
17500 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
17510 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ) nHdr++;.  }.  
17520 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
17530 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b  ta;.  if( nByte+
17540 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74  nZero>db->aLimit
17550 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
17560 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
17570 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
17580 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
17590 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
175a0 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
175b0 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
175c0 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
175d0 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
175e0 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
175f0 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
17600 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
17610 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
17620 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
17630 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
17640 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
17650 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
17660 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
17670 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
17680 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
17690 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
176a0 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
176b0 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
176c0 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74  esize(pOut, (int
176d0 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67  )nByte) ){.    g
176e0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
176f0 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
17700 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
17710 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
17720 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
17730 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
17740 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
17750 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
17760 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
17770 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
17780 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
17790 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
177a0 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
177b0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
177c0 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
177d0 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
177e0 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
177f0 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
17800 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
17810 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
17820 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74   */.    i += put
17830 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
17840 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
17850 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
17860 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
17870 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
17880 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
17890 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
178a0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
178b0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
178c0 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
178d0 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
178e0 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  der. */.    j +=
178f0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
17900 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
17910 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
17920 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
17930 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
17940 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
17950 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
17960 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
17970 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
17980 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17990 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
179a0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
179b0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
179c0 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
179d0 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
179e0 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20  gs = MEM_Blob;. 
179f0 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20   if( nZero ){.  
17a00 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20    pOut->u.nZero 
17a10 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
17a20 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
17a30 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49  Zero;.  }.  REGI
17a40 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
17a50 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
17a60 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
17a70 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
17a80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
17a90 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
17aa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
17ab0 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a  P2]=count().**.*
17ac0 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
17ad0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
17ae0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
17af0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
17b00 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
17b10 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
17b20 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
17b30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
17b40 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
17b50 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
17b60 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
17b70 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79   */.  i64 nEntry
17b80 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
17b90 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  rsr;..  assert( 
17ba0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
17bb0 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  ]->eCurType==CUR
17bc0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
17bd0 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  pCrsr = p->apCsr
17be0 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43  [pOp->p1]->uc.pC
17bf0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
17c00 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74   pCrsr );.  nEnt
17c10 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ry = 0;  /* Not 
17c20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
17c30 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
17c40 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
17c50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
17c60 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
17c70 74 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29  try);.  if( rc )
17c80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17c90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74  to_error;.  pOut
17ca0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
17cb0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
17cc0 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
17cd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
17ce0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
17cf0 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
17d00 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
17d10 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
17d20 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
17d30 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
17d40 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
17d50 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
17d60 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
17d70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
17d80 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
17d90 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
17da0 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
17db0 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
17dc0 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
17dd0 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
17de0 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
17df0 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
17e00 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
17e30 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
17e40 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
17e70 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
17e80 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
17e90 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
17ea0 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
17eb0 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
17ec0 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
17ed0 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
17ee0 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
17ef0 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
17f00 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
17f10 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
17f20 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
17f30 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
17f40 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
17f50 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
17f60 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
17f70 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
17f80 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
17f90 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
17fa0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
17fb0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
17fc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
17fd0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
17fe0 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
17ff0 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
18000 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
18010 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
18020 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
18030 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
18040 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
18050 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
18060 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
18070 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
18080 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
18090 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
180a0 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
180b0 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57    if( db->nVdbeW
180c0 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
180d0 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
180e0 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
180f0 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
18100 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
18110 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
18120 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
18130 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
18140 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
18150 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
18160 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
18170 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
18180 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
18190 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
181a0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
181b0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
181c0 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
181d0 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
181e0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
181f0 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66  zName);..#ifndef
18200 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
18210 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20  TUALTABLE.      
18220 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20  /* This call is 
18230 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20  Ok even if this 
18240 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74  savepoint is act
18250 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74  ually a transact
18260 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ion.      ** sav
18270 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72  epoint (and ther
18280 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74  efore should not
18290 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69   prompt xSavepoi
182a0 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e  nt()) callbacks.
182b0 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69  .      ** If thi
182c0 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
182d0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  on savepoint bei
182e0 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73  ng opened, it is
182f0 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20   guaranteed.    
18300 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62    ** that the db
18310 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61  ->aVTrans[] arra
18320 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a  y is empty.  */.
18330 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
18340 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
18350 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d  || db->nVTrans==
18360 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
18370 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
18380 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
18390 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20  NT_BEGIN,.      
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
183c0 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61  tatement+db->nSa
183d0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
183e0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
183f0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
18400 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
18410 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  dif..      /* Cr
18420 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
18430 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
18440 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
18450 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
18460 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
18470 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
18480 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
18490 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
184a0 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
184b0 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
184c0 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
184d0 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
184e0 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
184f0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
18500 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
18510 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
18520 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
18530 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
18540 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
18550 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
18560 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
18570 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
18580 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
18590 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
185a0 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
185b0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
185c0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
185d0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
185e0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
185f0 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
18600 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20      /* Link the 
18610 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e  new savepoint in
18620 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
18630 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a  handle's list. *
18640 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  /.        pNew->
18650 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76  pNext = db->pSav
18660 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
18670 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18680 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70   pNew;.        p
18690 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  New->nDeferredCo
186a0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
186b0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
186c0 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49  pNew->nDeferredI
186d0 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
186e0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
186f0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
18700 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70  else{.    iSavep
18710 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  oint = 0;..    /
18720 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64  * Find the named
18730 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74   savepoint. If t
18740 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
18750 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20  savepoint, then 
18760 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72  an.    ** an err
18770 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  or is returned t
18780 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a  o the user.  */.
18790 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70      for(.      p
187a0 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
187b0 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20  pSavepoint; .   
187c0 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26     pSavepoint &&
187d0 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
187e0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d  pSavepoint->zNam
187f0 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  e, zName);.     
18800 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53   pSavepoint = pS
18810 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a  avepoint->pNext.
18820 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61      ){.      iSa
18830 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d  vepoint++;.    }
18840 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70  .    if( !pSavep
18850 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  oint ){.      sq
18860 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
18870 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70  , "no such savep
18880 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65  oint: %s", zName
18890 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
188a0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
188b0 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56  }else if( db->nV
188c0 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31  dbeWrite>0 && p1
188d0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
188e0 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ASE ){.      /* 
188f0 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
18900 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63  le to release (c
18910 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69  ommit) a savepoi
18920 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20  nt if there are 
18930 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65  .      ** active
18940 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74   write statement
18950 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  s..      */.    
18960 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
18970 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65  or(p, "cannot re
18980 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
18990 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  - ".            
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
189b0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
189c0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
189d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
189e0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
189f0 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
18a00 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
18a10 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
18a20 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
18a30 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
18a40 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
18a50 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
18a60 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
18a70 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
18a80 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
18a90 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
18aa0 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
18ab0 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
18ac0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
18ad0 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
18ae0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
18af0 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
18b00 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
18b10 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
18b20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
18b30 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
18b40 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
18b50 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18b60 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
18b70 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
18b80 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
18b90 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
18ba0 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
18bb0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
18bc0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
18bd0 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
18be0 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
18bf0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
18c00 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
18c10 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
18c20 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
18c30 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
18c40 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
18c50 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18c60 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
18c70 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
18c80 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
18c90 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
18ca0 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
18cb0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a  isSchemaChange;.
18cc0 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
18cd0 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
18ce0 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
18cf0 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   - 1;.        if
18d00 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
18d10 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
18d20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
18d30 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46  ange = (db->mDbF
18d40 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63  lags & DBFLAG_Sc
18d50 68 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a  hemaChange)!=0;.
18d60 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
18d70 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
18d80 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
18d90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18da0 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
18db0 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
18dc0 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
18df0 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
18e00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
18e30 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20  aChange==0);.   
18e40 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
18e50 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18e60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18e70 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18e80 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
18e90 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
18ea0 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  emaChange = 0;. 
18eb0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18ec0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
18ed0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
18ee0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
18ef0 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
18f00 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
18f10 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
18f20 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
18f30 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
18f40 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
18f50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18f60 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
18f70 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
18f80 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68         if( isSch
18f90 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20  emaChange ){.   
18fa0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
18fb0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
18fc0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
18fd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
18fe0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
18ff0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
19000 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62 46          db->mDbF
19010 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53  lags |= DBFLAG_S
19020 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
19030 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
19040 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
19050 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
19060 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
19070 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
19080 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
19090 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
190a0 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
190b0 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
190c0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
190d0 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
190e0 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
190f0 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
19100 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
19110 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
19120 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
19130 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
19140 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
19150 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
19160 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
19170 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
19180 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
19190 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
191a0 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
191b0 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
191c0 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
191d0 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
191e0 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
191f0 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
19200 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
19210 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
19220 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
19230 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
19240 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
19250 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
19260 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
19270 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
19280 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
19290 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
192a0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
192b0 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
192c0 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
192d0 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
192e0 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
192f0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
19300 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
19310 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
19320 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
19330 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
19340 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
19350 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
19360 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
19370 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
19380 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
19390 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
193a0 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
193b0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
193c0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
193d0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70  erredImmCons = p
193e0 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
193f0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
19400 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
19410 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c  !isTransaction |
19420 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  | p1==SAVEPOINT_
19430 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
19440 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19450 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
19460 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
19470 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
19480 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
19490 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
194a0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
194b0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
194c0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
194d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
194e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
194f0 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
19500 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
19510 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
19520 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
19530 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
19540 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
19550 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
19560 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
19570 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
19580 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
19590 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
195a0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
195b0 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
195c0 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
195d0 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
195e0 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
195f0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
19600 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
19610 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
19620 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
19630 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
19640 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
19650 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
19660 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
19670 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
19680 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
19690 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
196a0 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
196b0 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
196c0 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
196d0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
196e0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
196f0 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
19700 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
19710 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
19720 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
19730 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
19740 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
19750 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
19760 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
19770 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
19780 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
19790 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
197a0 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65 64  ;..  if( desired
197b0 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
197c0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
197d0 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
197e0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
197f0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19800 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
19810 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
19820 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
19830 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
19840 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
19850 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
19860 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
19870 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e  oCommit && db->n
19880 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
19890 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
198a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
198b0 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
198c0 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
198d0 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20  e writing.      
198e0 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
198f0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
19900 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
19910 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
19920 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  irst. .      */.
19930 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
19940 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
19950 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
19960 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
19990 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
199a0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
199b0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
199c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
199d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
199e0 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
199f0 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
19a00 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
19a10 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
19a20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
19a30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
19a40 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
19a50 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
19a60 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  mmit;.    }.    
19a70 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
19a80 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
19a90 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
19aa0 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
19ab0 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d   aOp);.      db-
19ac0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
19ad0 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
19ae0 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70  Commit);.      p
19af0 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
19b00 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
19b10 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
19b20 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
19b30 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
19b40 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
19b50 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
19b60 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
19b70 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
19b80 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
19b90 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
19ba0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
19bb0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
19bc0 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
19bd0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
19be0 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
19bf0 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20  VdbeError(p,.   
19c00 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
19c10 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
19c20 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
19c30 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
19c40 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
19c50 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
19c60 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
19c70 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
19c80 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
19cb0 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
19cc0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
19cd0 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
19ce0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
19cf0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
19d00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19d10 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
19d20 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
19d30 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
19d40 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
19d50 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
19d60 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
19d70 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
19d80 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
19d90 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
19da0 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
19db0 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
19dc0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
19dd0 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
19de0 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
19df0 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
19e00 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
19e10 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
19e20 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
19e30 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
19e40 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
19e50 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
19e60 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
19e70 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
19e80 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
19e90 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
19ea0 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
19eb0 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
19ec0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
19ed0 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
19ee0 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
19ef0 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
19f00 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
19f10 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
19f20 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
19f30 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
19f40 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
19f50 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
19f60 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
19f70 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
19f80 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
19f90 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
19fa0 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
19fb0 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
19fc0 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
19fd0 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
19fe0 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
19ff0 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
1a000 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1a010 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
1a020 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
1a030 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
1a040 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1a050 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
1a060 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
1a070 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
1a080 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
1a090 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
1a0a0 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
1a0b0 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
1a0c0 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
1a0d0 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
1a0e0 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
1a0f0 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
1a100 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
1a110 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
1a120 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1a130 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
1a140 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
1a150 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
1a160 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
1a170 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
1a180 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
1a190 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
1a1a0 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
1a1b0 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
1a1c0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
1a1d0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
1a1e0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
1a1f0 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
1a200 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
1a210 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
1a220 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
1a230 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
1a240 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
1a250 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
1a260 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
1a270 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
1a280 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
1a290 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
1a2a0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
1a2b0 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
1a2c0 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
1a2d0 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
1a2e0 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
1a2f0 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
1a300 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
1a310 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
1a320 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
1a330 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
1a340 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
1a350 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1a360 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
1a370 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
1a380 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
1a390 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
1a3a0 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
1a3b0 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
1a3c0 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
1a3d0 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
1a3e0 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
1a3f0 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
1a400 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
1a410 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
1a420 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
1a430 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
1a440 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
1a450 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
1a460 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
1a470 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
1a480 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
1a490 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
1a4a0 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
1a4b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1a4c0 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
1a4d0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
1a4e0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
1a4f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a500 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1a510 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1a520 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1a530 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1a540 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1a550 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
1a560 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
1a570 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
1a580 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
1a590 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
1a5a0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1a5b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
1a5c0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
1a5d0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
1a5e0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
1a5f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a600 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
1a610 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65  pOp->p2);.    te
1a620 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
1a630 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54  TE_BUSY_SNAPSHOT
1a640 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
1a650 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
1a660 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20  Y_RECOVERY );.  
1a670 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1a680 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28  _OK ){.      if(
1a690 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
1a6a0 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
1a6b0 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
1a6c0 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
1a6d0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b       p->rc = rc;
1a6e0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
1a6f0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
1a700 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62   }.      goto ab
1a710 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a720 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
1a730 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75   pOp->p2 && p->u
1a740 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a  sesStmtJournal .
1a750 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74       && (db->aut
1a760 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
1a770 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a  ->nVdbeRead>1) .
1a780 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73      ){.      ass
1a790 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
1a7a0 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
1a7b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
1a7c0 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
1a7d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1a7e0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
1a7f0 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
1a800 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
1a810 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
1a820 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d  t++; .        p-
1a830 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
1a840 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
1a850 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
1a860 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63       }..      rc
1a870 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
1a880 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
1a890 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e  POINT_BEGIN, p->
1a8a0 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20  iStatement-1);. 
1a8b0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1a8c0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1a8d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a8e0 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74  reeBeginStmt(pBt
1a8f0 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29  , p->iStatement)
1a900 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1a910 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75   /* Store the cu
1a920 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
1a930 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
1a940 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  les deferred con
1a950 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a  straint.      **
1a960 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65   counter. If the
1a970 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1a980 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
1a990 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a  be rolled back,.
1a9a0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c        ** the val
1a9b0 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74  ue of this count
1a9c0 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  er needs to be r
1a9d0 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f  estored too.  */
1a9e0 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
1a9f0 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  efCons = db->nDe
1aa00 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
1aa10 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d    p->nStmtDefImm
1aa20 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1aa30 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
1aa40 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65   }..    /* Gathe
1aa50 72 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  r the schema ver
1aa60 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
1aa70 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a  checking:.    **
1aa80 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
1aa90 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33  OF: R-03189-5113
1aaa0 35 20 41 73 20 65 61 63 68 20 53 51 4c 20 73 74  5 As each SQL st
1aab0 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68  atement runs, th
1aac0 65 20 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20  e schema.    ** 
1aad0 76 65 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b  version is check
1aae0 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  ed to ensure tha
1aaf0 74 20 74 68 65 20 73 63 68 65 6d 61 20 68 61 73  t the schema has
1ab00 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e   not changed sin
1ab10 63 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51  ce the.    ** SQ
1ab20 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20  L statement was 
1ab30 70 72 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f  prepared..    */
1ab40 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1ab50 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
1ab60 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1ab70 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
1ab80 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
1ab90 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1aba0 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
1abb0 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
1abc0 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
1abd0 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  = 0;.  }.  asser
1abe0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1abf0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1ac00 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
1ac10 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74  pOp->p5 && (iMet
1ac20 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47  a!=pOp->p3 || iG
1ac30 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29  en!=pOp->p4.i) )
1ac40 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
1ac50 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
1ac60 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
1ac70 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
1ac80 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
1ac90 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
1aca0 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
1acb0 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
1acc0 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
1acd0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
1ace0 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
1acf0 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
1ad00 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
1ad10 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
1ad20 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
1ad30 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
1ad40 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
1ad50 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
1ad60 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
1ad70 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
1ad80 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
1ad90 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
1ada0 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
1adb0 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
1adc0 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
1add0 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
1ade0 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
1adf0 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
1ae00 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
1ae10 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
1ae20 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
1ae30 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
1ae40 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
1ae50 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
1ae60 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
1ae70 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
1ae80 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
1ae90 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
1aea0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1aeb0 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
1aec0 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
1aed0 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
1aee0 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
1aef0 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
1af00 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
1af10 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
1af20 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
1af30 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
1af40 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
1af50 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
1af60 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
1af70 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
1af80 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1af90 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1afa0 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
1afb0 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
1afc0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
1afd0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
1afe0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
1aff0 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
1b000 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
1b010 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
1b020 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1b030 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1b040 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1b050 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
1b060 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
1b070 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
1b080 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
1b090 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
1b0a0 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
1b0b0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1b0c0 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
1b0d0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1b0e0 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
1b0f0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1b100 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
1b110 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1b120 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
1b130 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1b140 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
1b150 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1b160 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1b170 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1b180 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
1b190 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1b1a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
1b1b0 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
1b1c0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1b1d0 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
1b1e0 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
1b1f0 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
1b200 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
1b210 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
1b220 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
1b230 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1b240 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
1b250 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
1b260 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1b270 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
1b280 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1b290 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
1b2a0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1b2b0 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
1b2c0 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
1b2d0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1b2e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1b2f0 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1b300 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1b310 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1b320 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1b330 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1b340 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1b350 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1b360 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1b370 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1b380 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1b390 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1b3a0 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1b3b0 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1b3c0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1b3d0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1b3e0 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1b3f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b400 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1b410 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1b420 57 72 69 74 65 20 74 68 65 20 69 6e 74 65 67 65  Write the intege
1b430 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20  r value P3 into 
1b440 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
1b450 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
1b460 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65  .** P2==1 is the
1b470 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1b480 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64    P2==2 is the d
1b490 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1b4a0 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  ** P2==3 is the 
1b4b0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1b4c0 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
1b4d0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1b4e0 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
1b4f0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1b500 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
1b510 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
1b520 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
1b530 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1b540 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
1b550 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
1b560 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
1b570 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
1b580 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
1b590 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  _SetCookie: {.  
1b5a0 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
1b5b0 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
1b5c0 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1b5d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b5e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1b5f0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1b600 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1b610 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1b620 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
1b630 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1b640 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
1b650 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
1b660 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
1b670 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
1b680 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1b690 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1b6a0 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
1b6b0 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
1b6c0 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
1b6d0 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
1b6e0 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
1b6f0 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
1b700 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
1b710 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29  Op->p2, pOp->p3)
1b720 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
1b730 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
1b740 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
1b750 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
1b760 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
1b770 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
1b780 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
1b790 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1b7a0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1b7b0 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1b7c0 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
1b7d0 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  |= DBFLAG_Schema
1b7e0 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20  Change;.  }else 
1b7f0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1b800 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
1b810 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
1b820 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
1b830 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
1b840 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1b850 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f  file_format = pO
1b860 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28  p->p3;.  }.  if(
1b870 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
1b880 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
1b890 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
1b8a0 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
1b8b0 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
1b8c0 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
1b8d0 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
1b8e0 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
1b8f0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
1b900 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
1b910 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65  ts(db);.    p->e
1b920 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
1b930 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1b940 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b950 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1b960 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
1b970 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
1b980 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1b990 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1b9a0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1b9b0 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
1b9c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1b9d0 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
1b9e0 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
1b9f0 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
1ba00 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
1ba10 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
1ba20 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
1ba30 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
1ba40 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
1ba50 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
1ba60 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
1ba70 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1ba80 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
1ba90 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
1baa0 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
1bab0 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
1bac0 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
1bad0 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
1bae0 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
1baf0 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
1bb00 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
1bb10 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
1bb20 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
1bb30 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
1bb40 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
1bb50 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
1bb60 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
1bb70 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
1bb80 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1bb90 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
1bba0 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
1bbb0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
1bbc0 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
1bbd0 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
1bbe0 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
1bbf0 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
1bc00 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
1bc10 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
1bc20 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
1bc30 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
1bc40 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
1bc50 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
1bc60 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
1bc70 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
1bc80 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
1bc90 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
1bca0 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
1bcb0 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
1bcc0 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1bcd0 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
1bce0 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
1bcf0 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
1bd00 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
1bd10 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
1bd20 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
1bd30 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
1bd40 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
1bd50 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1bd60 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
1bd70 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
1bd80 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
1bd90 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
1bda0 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
1bdb0 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
1bdc0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
1bdd0 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1bde0 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1bdf0 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1be00 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1be10 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1be20 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1be30 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1be40 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1be50 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1be60 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1be70 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1be80 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1be90 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1bea0 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1beb0 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1bec0 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1bed0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1bee0 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1bef0 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1bf00 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1bf10 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
1bf20 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69  ee also: OpenWri
1bf30 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f  te, ReopenIdx.*/
1bf40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70  ./* Opcode: Reop
1bf50 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50  enIdx P1 P2 P3 P
1bf60 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1bf70 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1bf80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1bf90 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b  nIdx opcode work
1bfa0 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52  s exactly like R
1bfb0 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74  eadOpen except t
1bfc0 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1bfd0 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1bfe0 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1bff0 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1c000 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61  n with a root pa
1c010 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  ge.** number of 
1c020 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20  P2 and if it is 
1c030 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f  this opcode beco
1c040 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e  mes a no-op.  In
1c050 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a   other words,.**
1c060 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
1c070 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
1c080 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74  do not reopen it
1c090 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  ..**.** The Reop
1c0a0 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79  enIdx opcode may
1c0b0 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69   only be used wi
1c0c0 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74  th P5==0 and wit
1c0d0 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20  h P4 being.** a 
1c0e0 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
1c0f0 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
1c100 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1c110 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
1c120 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72  s.** every other
1c130 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
1c140 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
1c150 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ame cursor numbe
1c160 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  r..**.** See the
1c170 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65   OpenRead opcode
1c180 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
1c190 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1c1a0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
1c1b0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
1c1c0 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
1c1d0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1c1e0 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1c1f0 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
1c200 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
1c210 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
1c220 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
1c230 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
1c240 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
1c250 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
1c260 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1c270 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
1c280 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
1c290 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1c2a0 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1c2b0 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1c2c0 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1c2d0 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1c2e0 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1c2f0 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1c300 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1c310 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1c320 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1c330 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1c340 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1c350 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1c360 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1c370 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1c380 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1c390 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1c3a0 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1c3b0 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1c3c0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1c3d0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  s in the table, 
1c3e0 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72  or to the.** lar
1c3f0 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e  gest index of an
1c400 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  y column of the 
1c410 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63  table that is ac
1c420 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a  tually used..**.
1c430 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1c440 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
1c450 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
1c460 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1c470 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
1c480 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
1c490 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
1c4a0 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
1c4b0 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
1c4c0 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
1c4d0 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
1c4e0 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
1c4f0 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
1c500 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1c510 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
1c520 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1c530 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1c540 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1c550 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1c560 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1c570 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1c580 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1c590 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1c5a0 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1c5b0 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1c5c0 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1c5d0 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1c5e0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1c5f0 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1c600 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1c610 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1c620 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1c630 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1c640 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1c650 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1c660 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1c670 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1c680 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1c690 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1c6a0 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1c6b0 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1c6c0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1c6d0 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1c6e0 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1c6f0 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1c700 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1c710 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1c720 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1c730 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1c740 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1c750 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1c760 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1c770 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c780 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1c790 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1c7a0 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1c7b0 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1c7c0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1c7d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1c7e0 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61  code==OP_OpenRea
1c7f0 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  d || pOp->opcode
1c800 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20  ==OP_ReopenIdx. 
1c810 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72           || p->r
1c820 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
1c830 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
1c840 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1c850 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
1c860 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  K;.    goto abor
1c870 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1c880 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1c890 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1c8a0 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1c8b0 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1c8c0 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1c8d0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1c8e0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1c8f0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1c900 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1c910 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1c920 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
1c930 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
1c940 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
1c950 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1c960 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
1c970 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c      assert( OPFL
1c980 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54  AG_FORDELETE==BT
1c990 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b  REE_FORDELETE );
1c9a0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54  .    wrFlag = BT
1c9b0 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70  REE_WRCSR | (pOp
1c9c0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f  ->p5 & OPFLAG_FO
1c9d0 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73  RDELETE);.    as
1c9e0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1c9f0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1ca00 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1ca10 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1ca20 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1ca30 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1ca40 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1ca50 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1ca60 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1ca70 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1ca80 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1ca90 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1caa0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1cab0 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1cac0 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1cad0 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1cae0 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1caf0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
1cb00 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  or) );.    pIn2 
1cb10 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1cb20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1cb30 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1cb40 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1cb50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1cb60 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1cb70 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1cb80 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1cb90 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1cba0 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1cbb0 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1cbc0 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1cbd0 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65  r OP_CreateBtree
1cbe0 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1cbf0 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1cc00 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1cc10 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1cc20 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1cc30 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1cc40 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1cc50 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1cc60 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1cc70 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1cc80 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1cc90 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1cca0 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1ccb0 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b  assert( p2>=2 );
1ccc0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1ccd0 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1cce0 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
1ccf0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1cd00 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72  yInfo;.    asser
1cd10 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1cd20 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1cd30 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1cd40 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1cd50 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
1cd60 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20  fo->nAllField;. 
1cd70 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1cd80 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1cd90 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1cda0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1cdb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cdc0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1cdd0 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1cde0 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1cdf0 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1ce00 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1ce10 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1ce20 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1ce30 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1ce40 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1ce50 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1ce60 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1ce70 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1ce80 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1ce90 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1cea0 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1ceb0 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  red = 1;.  pCur-
1cec0 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a  >pgnoRoot = p2;.
1ced0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1cee0 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c  BUG.  pCur->wrFl
1cef0 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e  ag = wrFlag;.#en
1cf00 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  dif.  rc = sqlit
1cf10 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1cf20 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1cf30 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63  eyInfo, pCur->uc
1cf40 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  .pCursor);.  pCu
1cf50 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1cf60 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1cf70 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1cf80 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1cf90 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1cfa0 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1cfb0 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1cfc0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1cfd0 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1cfe0 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1cff0 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1d000 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1d010 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1d020 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1d030 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1d040 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1d050 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1d060 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1d070 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1d080 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1d090 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1d0a0 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1d0b0 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1d0c0 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1d0d0 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1d0e0 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1d0f0 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1d100 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
1d110 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1d120 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51  CSR );.#ifdef SQ
1d130 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
1d140 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63  OR_HINTS.  testc
1d150 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f  ase( pOp->p2 & O
1d160 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1d170 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
1d180 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46  BtreeCursorHintF
1d190 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43  lags(pCur->uc.pC
1d1a0 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  ursor,.         
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1c0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
1d1d0 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52   (OPFLAG_BULKCSR
1d1e0 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29  |OPFLAG_SEEKEQ))
1d1f0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1d200 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d210 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1d220 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1d230 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20 2a 20  enDup P1 P2 * * 
1d240 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
1d250 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 68 61  ew cursor P1 tha
1d260 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1d270 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c 20 74  same ephemeral t
1d280 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f  able as.** curso
1d290 72 20 50 32 2e 20 20 54 68 65 20 50 32 20 63 75  r P2.  The P2 cu
1d2a0 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
1d2b0 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20 61 20  een opened by a 
1d2c0 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68  prior OP_OpenEph
1d2d0 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65  emeral.** opcode
1d2e0 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61  .  Only ephemera
1d2f0 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20 62 65  l cursors may be
1d300 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a   duplicated..**.
1d310 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65 70 68  ** Duplicate eph
1d320 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 61  emeral cursors a
1d330 72 65 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66  re used for self
1d340 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72 69  -joins of materi
1d350 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f  alized views..*/
1d360 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70  .case OP_OpenDup
1d370 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1d380 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54   *pOrig;    /* T
1d390 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75 72 73  he original curs
1d3a0 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69 63 61  or to be duplica
1d3b0 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1d3c0 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20 20 2f  sor *pCx;      /
1d3d0 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73 6f 72  * The new cursor
1d3e0 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70   */..  pOrig = p
1d3f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d  ->apCsr[pOp->p2]
1d400 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 72 69  ;.  assert( pOri
1d410 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20 20 2f  g->pBtx!=0 );  /
1d420 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c  * Only ephemeral
1d430 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62 65 20   cursors can be 
1d440 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20  duplicated */.. 
1d450 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1d460 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1d470 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c  , pOrig->nField,
1d480 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52   -1, CURTYPE_BTR
1d490 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  EE);.  if( pCx==
1d4a0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1d4b0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1d4c0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70  = 1;.  pCx->isEp
1d4d0 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70  hemeral = 1;.  p
1d4e0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1d4f0 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  Orig->pKeyInfo;.
1d500 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1d510 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b   pOrig->isTable;
1d520 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1d530 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72 69 67  treeCursor(pOrig
1d540 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52  ->pBtx, MASTER_R
1d550 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52  OOT, BTREE_WRCSR
1d560 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d570 20 20 20 20 20 20 20 20 20 20 20 20 70 43 78 2d              pCx-
1d580 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e  >pKeyInfo, pCx->
1d590 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f  uc.pCursor);.  /
1d5a0 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42 74 72  * The sqlite3Btr
1d5b0 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69  eeCursor() routi
1d5c0 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  ne can only fail
1d5d0 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 63   for the first c
1d5e0 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65  ursor.  ** opene
1d5f0 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
1d600 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65 20 69  .  Since there i
1d610 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65  s already an ope
1d620 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68  n cursor when th
1d630 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69  is.  ** opcode i
1d640 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74  s run, the sqlit
1d650 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1d660 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
1d670 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1d680 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61  ITE_OK );.  brea
1d690 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1d6a0 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1d6b0 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1d6c0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1d6d0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  mn=P2.**.** Open
1d6e0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1d6f0 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
1d700 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1d710 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
1d720 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
1d730 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
1d740 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
1d750 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
1d760 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
1d770 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
1d780 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
1d790 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1d7a0 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
1d7b0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
1d7c0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1d7d0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1d7e0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1d7f0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
1d800 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
1d810 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
1d820 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
1d830 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
1d840 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
1d850 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
1d860 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
1d870 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
1d880 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
1d890 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
1d8a0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
1d8b0 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
1d8c0 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
1d8d0 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
1d8e0 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
1d8f0 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
1d900 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
1d910 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
1d920 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
1d930 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
1d940 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
1d950 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
1d960 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
1d970 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
1d980 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
1d990 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
1d9a0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1d9b0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1d9c0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1d9d0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1d9e0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1d9f0 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1da00 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1da10 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1da20 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1da30 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1da40 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1da50 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1da60 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1da70 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1da80 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1da90 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1daa0 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1dab0 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1dac0 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1dad0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
1dae0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1daf0 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1db00 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1db10 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1db20 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1db30 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1db40 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1db50 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1db60 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1db70 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1db80 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1db90 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1dba0 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
1dbb0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1dbc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1dbd0 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1dbe0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1dbf0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1dc00 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
1dc10 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1dc20 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1dc30 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1dc40 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1dc50 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
1dc60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1dc70 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66  treeOpen(db->pVf
1dc80 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  s, 0, db, &pCx->
1dc90 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20  pBtx, .         
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1dcb0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1dcc0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1dcd0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1dce0 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1dcf0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1dd00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1dd10 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1dd20 78 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d  x->pBtx, 1);.  }
1dd30 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1dd40 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
1dd50 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
1dd60 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
1dd70 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
1dd80 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
1dd90 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1dda0 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
1ddb0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c  BTREE_BLOBKEY fl
1ddc0 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
1ddd0 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
1dde0 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1ddf0 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
1de00 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
1de10 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
1de20 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
1de30 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
1de40 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
1de50 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1de60 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65     if( (pCx->pKe
1de70 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1de80 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1de90 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
1dea0 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
1deb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1dec0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1ded0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
1dee0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1def0 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78  eTable(pCx->pBtx
1df00 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
1df10 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35  LOBKEY | pOp->p5
1df20 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
1df30 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1df40 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1df50 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
1df60 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  +1 );.        as
1df70 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1df80 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  db==db );.      
1df90 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1dfa0 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1dfb0 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
1dfc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1dfd0 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70  sor(pCx->pBtx, p
1dfe0 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52  gno, BTREE_WRCSR
1dff0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d    pKeyInfo, pCx-
1e020 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1e030 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d      }.      pCx-
1e040 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20  >isTable = 0;.  
1e050 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1e060 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e070 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78  Cursor(pCx->pBtx
1e080 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42  , MASTER_ROOT, B
1e090 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43 78            0, pCx
1e0c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1e0d0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1e0e0 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
1e0f0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1e100 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e110 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72  ror;.  pCx->isOr
1e120 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
1e130 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
1e140 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  D);.  break;.}..
1e150 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1e160 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  rOpen P1 P2 P3 P
1e170 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1e180 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1e190 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1e1a0 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1e1b0 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1e1c0 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1e1d0 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1e1e0 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1e1f0 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1e200 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1e210 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1e220 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20  lgorithm..**.** 
1e230 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69  If argument P3 i
1e240 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1e250 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   it indicates th
1e260 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61  at the sorter ma
1e270 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74  y.** assume that
1e280 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63   a stable sort c
1e290 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66  onsidering the f
1e2a0 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f  irst P3 fields o
1e2b0 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73  f each.** key is
1e2c0 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70   sufficient to p
1e2d0 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69  roduce the requi
1e2e0 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a  red results..*/.
1e2f0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1e300 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1e310 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1e320 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1e330 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e340 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1e350 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1e360 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1e370 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1e380 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28  E_SORTER);.  if(
1e390 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1e3a0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b  o_mem;.  pCx->pK
1e3b0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1e3c0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
1e3d0 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1e3e0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1e3f0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1e400 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1e410 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  db) );.  rc = sq
1e420 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1e430 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c  nit(db, pOp->p3,
1e440 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20   pCx);.  if( rc 
1e450 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1e460 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1e470 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e480 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50  : SequenceTest P
1e490 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1e4a0 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73  nopsis: if( curs
1e4b0 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70  or[P1].ctr++ ) p
1e4c0 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  c = P2.**.** P1 
1e4d0 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
1e4e0 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65  or. If the seque
1e4f0 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nce counter is c
1e500 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a  urrently zero, j
1e510 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65  ump.** to P2. Re
1e520 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
1e530 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a  her or not the j
1e540 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e  ump is taken, in
1e550 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74  crement the.** t
1e560 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75  he sequence valu
1e570 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1e580 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20  quenceTest: {.  
1e590 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e5a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e5b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1e5c0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e5d0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1e5e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1e5f0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
1e600 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1e610 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1e620 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1e630 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1e640 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1e650 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1e660 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1e670 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1e680 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1e690 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1e6a0 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1e6b0 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1e6c0 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1e6d0 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1e6e0 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1e6f0 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1e700 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1e710 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1e720 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1e730 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1e740 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1e750 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1e760 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1e770 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1e780 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1e790 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1e7a0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1e7b0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1e7c0 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1e7d0 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1e7e0 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1e7f0 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1e800 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1e810 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1e820 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1e830 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1e840 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1e850 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1e860 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1e870 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1e880 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1e890 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1e8a0 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1e8b0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1e8c0 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1e8d0 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1e8e0 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1e8f0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1e900 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1e910 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e920 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1e930 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1e940 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1e950 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1e960 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1e970 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1e980 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55  -1, CURTYPE_PSEU
1e990 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  DO);.  if( pCx==
1e9a0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1e9b0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1e9c0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b  = 1;.  pCx->seek
1e9d0 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 32  Result = pOp->p2
1e9e0 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
1e9f0 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69 76 65 20   = 1;.  /* Give 
1ea00 74 68 69 73 20 70 73 65 75 64 6f 2d 63 75 72 73  this pseudo-curs
1ea10 6f 72 20 61 20 66 61 6b 65 20 42 74 43 75 72 73  or a fake BtCurs
1ea20 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f 20 74 68  or pointer so th
1ea30 61 74 20 70 43 78 0a 20 20 2a 2a 20 63 61 6e 20  at pCx.  ** can 
1ea40 62 65 20 73 61 66 65 6c 79 20 70 61 73 73 65 64  be safely passed
1ea50 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 43   to sqlite3VdbeC
1ea60 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 20 20  ursorMoveto().  
1ea70 54 68 69 73 20 61 76 6f 69 64 73 20 61 20 74 65  This avoids a te
1ea80 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70 43 78 2d  st.  ** for pCx-
1ea90 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
1eaa0 50 45 5f 42 54 52 45 45 20 69 6e 73 69 64 65 20  PE_BTREE inside 
1eab0 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
1eac0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a 20 20 2a  rsorMoveto().  *
1ead0 2a 20 77 68 69 63 68 20 69 73 20 61 20 70 65 72  * which is a per
1eae0 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69 6d 69 7a  formance optimiz
1eaf0 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e  ation */.  pCx->
1eb00 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 73 71 6c  uc.pCursor = sql
1eb10 69 74 65 33 42 74 72 65 65 46 61 6b 65 56 61 6c  ite3BtreeFakeVal
1eb20 69 64 43 75 72 73 6f 72 28 29 3b 0a 20 20 61 73  idCursor();.  as
1eb30 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1eb40 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1eb50 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
1eb60 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1eb70 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
1eb80 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1eb90 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
1eba0 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
1ebb0 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
1ebc0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1ebd0 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
1ebe0 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
1ebf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1ec00 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1ec10 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
1ec20 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1ec30 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
1ec40 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
1ec50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
1ec60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
1ec70 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1ec80 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
1ec90 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  ASK./* Opcode: C
1eca0 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20  olumnsUsed P1 * 
1ecb0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
1ecc0 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20  s opcode (which 
1ecd0 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53  only exists if S
1ece0 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c  QLite was compil
1ecf0 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  ed with.** SQLIT
1ed00 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
1ed10 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74  USED_MASK) ident
1ed20 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75  ifies which colu
1ed30 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61  mns of the.** ta
1ed40 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72  ble or index for
1ed50 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75   cursor P1 are u
1ed60 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34  sed.  P4 is a 64
1ed70 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
1ed80 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68  (P4_INT64) in wh
1ed90 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33  ich the first 63
1eda0 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f   bits are one fo
1edb0 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a  r each of the.**
1edc0 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e   first 63 column
1edd0 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
1ede0 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  r index that are
1edf0 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a   actually used.*
1ee00 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e  * by the cursor.
1ee10 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72    The high-order
1ee20 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61   bit is set if a
1ee30 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a  ny column after.
1ee40 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75  ** the 64th is u
1ee50 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sed..*/.case OP_
1ee60 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20  ColumnsUsed: {. 
1ee70 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1ee80 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1ee90 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1eea0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
1eeb0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1eec0 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73   );.  pC->maskUs
1eed0 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d  ed = *(u64*)pOp-
1eee0 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
1eef0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
1ef00 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50  Opcode: SeekGE P
1ef10 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1ef20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1ef30 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1ef40 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1ef50 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1ef60 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1ef70 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1ef80 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1ef90 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1efa0 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
1efb0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1efc0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1efd0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1efe0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1eff0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1f000 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1f010 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1f020 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1f030 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1f040 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1f050 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1f060 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1f070 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1f080 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1f090 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1f0a0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1f0b0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1f0c0 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
1f0d0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1f0e0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1f0f0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1f100 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1f110 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
1f120 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
1f130 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
1f140 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
1f150 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
1f160 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1f170 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
1f180 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
1f190 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
1f1a0 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
1f1b0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1f1c0 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
1f1d0 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
1f1e0 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
1f1f0 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
1f200 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45  owed by an IdxLE
1f210 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
1f220 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
1f230 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70  .** The IdxLE op
1f240 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
1f250 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
1f260 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
1f270 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f  t the.** IdxLE o
1f280 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1f290 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
1f2a0 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
1f2b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1f2c0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1f2d0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1f2e0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1f2f0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1f300 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1f310 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1f320 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1f330 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1f340 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1f350 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1f360 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1f370 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1f380 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1f390 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1f3a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1f3b0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1f3c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1f3d0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1f3e0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1f3f0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1f400 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1f410 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1f420 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1f430 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1f440 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1f450 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1f460 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1f470 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1f480 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1f490 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1f4a0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1f4b0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1f4c0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1f4d0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1f4e0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1f4f0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1f500 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1f510 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1f520 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1f530 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1f540 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1f550 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1f560 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1f570 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1f580 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1f590 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1f5a0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1f5b0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1f5c0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1f5d0 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1f5e0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1f5f0 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1f600 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1f610 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1f620 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1f630 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1f640 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1f650 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1f660 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1f670 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1f680 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1f690 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1f6a0 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1f6b0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1f6c0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1f6d0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1f6e0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1f6f0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1f700 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1f710 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1f720 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1f730 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1f740 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1f750 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1f760 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1f770 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1f780 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1f790 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1f7a0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1f7b0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1f7c0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1f7d0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1f7e0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1f7f0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1f800 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1f810 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1f820 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1f830 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1f840 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1f850 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1f860 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1f870 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1f880 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1f890 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1f8a0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1f8b0 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1f8c0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1f8d0 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1f8e0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1f8f0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1f900 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1f910 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1f920 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1f930 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1f940 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1f950 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1f960 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1f970 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1f980 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1f990 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1f9a0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1f9b0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1f9c0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1f9d0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1f9e0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1f9f0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1fa00 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1fa10 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1fa20 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1fa30 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1fa40 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1fa50 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1fa60 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1fa70 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1fa80 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1fa90 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1faa0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1fab0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1fac0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1fad0 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1fae0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1faf0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1fb00 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1fb10 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1fb20 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1fb30 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1fb40 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1fb50 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1fb60 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1fb70 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1fb80 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1fb90 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1fba0 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1fbb0 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1fbc0 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1fbd0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1fbe0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1fbf0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1fc00 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1fc10 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1fc20 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  xt..**.** If the
1fc30 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
1fc40 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1fc50 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
1fc60 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
1fc70 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1fc80 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
1fc90 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
1fca0 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
1fcb0 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
1fcc0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1fcd0 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
1fce0 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
1fcf0 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
1fd00 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
1fd10 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
1fd20 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xGE opcode with 
1fd30 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
1fd40 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45  ts..** The IdxGE
1fd50 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1fd60 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
1fd70 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
1fd80 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47   but the.** IdxG
1fd90 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1fda0 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
1fdb0 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
1fdc0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
1fdd0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1fde0 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1fdf0 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
1fe00 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20  case OP_SeekLT: 
1fe10 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1fe20 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1fe30 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20  SeekLE:         
1fe40 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1fe50 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20  case OP_SeekGE: 
1fe60 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1fe70 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1fe80 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20  SeekGT: {       
1fe90 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1fea0 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1feb0 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
1fec0 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69  on result */.  i
1fed0 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20  nt oc;          
1fee0 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20    /* Opcode */. 
1fef0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1ff00 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f      /* The curso
1ff10 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55  r to seek */.  U
1ff20 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1ff30 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20    /* The key to 
1ff40 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  seek for */.  in
1ff50 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
1ff60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
1ff70 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20  lumns or fields 
1ff80 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  in the key */.  
1ff90 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
1ffa0 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1ffb0 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1ffc0 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c  o */.  int eqOnl
1ffd0 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  y;        /* Onl
1ffe0 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  y interested in 
1fff0 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20  == results */.. 
20000 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20010 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20020 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
20030 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
20040 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
20050 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
20060 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
20070 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20080 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
20090 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
200a0 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
200b0 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
200c0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
200d0 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
200e0 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
200f0 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
20100 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
20110 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
20120 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
20130 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
20140 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f  !=0 );.  oc = pO
20150 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f  p->opcode;.  eqO
20160 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e  nly = 0;.  pC->n
20170 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64  ullRow = 0;.#ifd
20180 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
20190 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
201a0 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
201b0 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
201c0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
201d0 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  The BTREE_SEEK_E
201e0 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73  Q flag is only s
201f0 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73  et on index curs
20200 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  ors */.    asser
20210 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
20220 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
20230 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
20240 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20  EE_SEEK_EQ)==0. 
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
20260 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20  CORRUPT_DB );.. 
20270 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20     /* The input 
20280 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68  value in P3 migh
20290 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65  t be of any type
202a0 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c  : integer, real,
202b0 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20   string,.    ** 
202c0 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20  blob, or NULL.  
202d0 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  But it needs to 
202e0 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  be an integer be
202f0 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20  fore we can do. 
20300 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20     ** the seek, 
20310 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a  so convert it. *
20320 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  /.    pIn3 = &aM
20330 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
20340 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
20350 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
20360 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
20370 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
20380 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
20390 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b  finity(pIn3, 0);
203a0 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20  .    }.    iKey 
203b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
203c0 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20  Value(pIn3);..  
203d0 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
203e0 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
203f0 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
20400 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
20410 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
20420 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
20430 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
20440 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
20450 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
20460 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
20470 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
20480 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
20490 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
204a0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
204b0 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
204c0 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
204d0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
204e0 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
204f0 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
20500 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
20510 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
20520 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
20530 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
20540 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f  Taken(1,2); goto
20550 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
20560 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
20570 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
20580 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
20590 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65  on iKey is large
205a0 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
205b0 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
205c0 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
205d0 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e  stitute >= for >
205e0 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65   and < for <=. e
205f0 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63  .g. if the searc
20600 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20  h term.      ** 
20610 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69  is 4.9 and the i
20620 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61  nteger approxima
20630 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a  tion 5:.      **
20640 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
20650 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d   (x >  4.9)    -
20660 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20  >     (x >= 5). 
20670 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
20680 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20  x <= 4.9)    -> 
20690 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20      (x <  5).   
206a0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
206b0 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c  pIn3->u.r<(doubl
206c0 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
206d0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
206e0 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
206f0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
20700 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
20710 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
20720 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
20730 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
20740 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
20750 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
20760 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
20770 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
20780 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
20790 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
207a0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
207b0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
207c0 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
207d0 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
207e0 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
207f0 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
20800 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
20810 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
20820 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
20830 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65  In3->u.r>(double
20840 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
20850 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
20860 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31  LE==(OP_SeekLT+1
20870 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
20880 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d  ert( OP_SeekGT==
20890 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b  (OP_SeekGE+1) );
208a0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
208b0 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78   (OP_SeekLT & 0x
208c0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
208d0 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  E & 0x0001) );. 
208e0 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
208f0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
20900 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29  ekLT & 0x0001) )
20910 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20   oc++;.      }. 
20920 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73     } .    rc = s
20930 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
20940 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
20950 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  .pCursor, 0, (u6
20960 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
20970 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  ;.    pC->moveto
20980 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
20990 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
209a0 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  lete */.    if( 
209b0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
209c0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
209d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
209e0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
209f0 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73     /* For a curs
20a00 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45  or with the BTRE
20a10 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20  E_SEEK_EQ hint, 
20a20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b  only the OP_Seek
20a30 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50  GE and.    ** OP
20a40 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20  _SeekLE opcodes 
20a50 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64  are allowed, and
20a60 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69   these must be i
20a70 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
20a80 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e  wed.    ** by an
20a90 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f   OP_IdxGT or OP_
20aa0 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65  IdxLT opcode, re
20ab0 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68  spectively, with
20ac0 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20   the same key.. 
20ad0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71     */.    if( sq
20ae0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
20af0 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  HasHint(pC->uc.p
20b00 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
20b10 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20  EK_EQ) ){.      
20b20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20  eqOnly = 1;.    
20b30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
20b40 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45  pcode==OP_SeekGE
20b50 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
20b60 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
20b70 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20b80 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
20b90 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
20ba0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
20bb0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20bc0 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30  pOp[1].p1==pOp[0
20bd0 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p1 );.      as
20be0 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d  sert( pOp[1].p2=
20bf0 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20  =pOp[0].p2 );.  
20c00 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20c10 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33  1].p3==pOp[0].p3
20c20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
20c30 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70  ( pOp[1].p4.i==p
20c40 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20  Op[0].p4.i );.  
20c50 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20    }..    nField 
20c60 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
20c70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
20c80 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
20c90 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
20ca0 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
20cb0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
20cc0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
20cd0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
20ce0 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
20cf0 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
20d00 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
20d10 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
20d20 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
20d30 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
20d40 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
20d50 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
20d60 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
20d70 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
20d80 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
20d90 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
20da0 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
20db0 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
20dc0 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
20dd0 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
20de0 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
20df0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
20e00 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
20e10 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
20e20 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
20e30 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
20e40 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
20e50 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
20e60 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
20e70 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
20e80 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
20e90 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
20ea0 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
20eb0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
20ec0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
20ed0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
20ee0 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
20ef0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
20f00 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
20f10 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
20f20 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
20f30 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20  .    r.eqSeen = 
20f40 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  0;.    rc = sqli
20f50 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
20f60 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
20f70 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
20f80 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
20f90 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
20fa0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
20fb0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20fc0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71      }.    if( eq
20fd0 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e  Only && r.eqSeen
20fe0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ==0 ){.      ass
20ff0 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20  ert( res!=0 );. 
21000 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e       goto seek_n
21010 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a  ot_found;.    }.
21020 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
21030 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21040 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21050 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
21060 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
21070 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
21080 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
21090 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
210a0 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
210b0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
210c0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
210d0 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
210e0 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
210f0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
21100 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
21110 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
21120 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
21130 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29  ->uc.pCursor, 0)
21140 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
21150 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
21160 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
21170 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
21180 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
21190 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20  E_OK;.          
211a0 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  res = 1;.       
211b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
211c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
211d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
211e0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
211f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
21200 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
21210 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
21220 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ( oc==OP_SeekLT 
21230 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
21240 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e   );.    if( res>
21250 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
21260 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29  oc==OP_SeekLT) )
21270 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
21280 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
21290 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
212a0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
212b0 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
212c0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
212d0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
212e0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
212f0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
21300 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20  LITE_OK;.       
21310 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
21320 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21330 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
21340 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
21350 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
21360 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21370 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
21380 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73   negative becaus
21390 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  e the table is e
213a0 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a  mpty.  Check to.
213b0 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20        ** see if 
213c0 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
213d0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
213e0 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
213f0 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43  reeEof(pC->uc.pC
21400 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
21410 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64  }.seek_not_found
21420 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  :.  assert( pOp-
21430 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42  >p2>0 );.  VdbeB
21440 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
21450 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
21460 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
21470 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20  _to_p2;.  }else 
21480 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20  if( eqOnly ){.  
21490 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
214a0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  .opcode==OP_IdxL
214b0 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  T || pOp[1].opco
214c0 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
214d0 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b      pOp++; /* Sk
214e0 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20  ip the OP_IdxLt 
214f0 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74  or OP_IdxGT that
21500 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a   follows */.  }.
21510 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21520 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
21530 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
21540 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
21550 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
21560 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
21570 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
21580 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
21590 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
215a0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
215b0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
215c0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
215d0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
215e0 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
215f0 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
21600 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
21610 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
21620 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
21630 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
21640 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
21650 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
21660 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
21670 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
21680 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
21690 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
216a0 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
216b0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
216c0 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
216d0 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
216e0 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
216f0 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  n be.** advanced
21700 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20   in the forward 
21710 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  direction.  The 
21720 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
21730 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62   will work,.** b
21740 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20  ut not the Prev 
21750 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
21760 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
21770 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
21780 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
21790 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
217a0 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
217b0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
217c0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
217d0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
217e0 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
217f0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
21800 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
21810 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
21820 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
21830 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
21840 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
21850 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
21860 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
21870 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
21880 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
21890 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
218a0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
218b0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
218c0 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
218d0 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
218e0 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
218f0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
21900 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
21910 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
21920 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
21930 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
21940 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
21950 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
21960 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
21970 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
21980 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
21990 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
219a0 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
219b0 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
219c0 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
219d0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
219e0 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
219f0 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
21a00 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
21a10 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
21a20 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
21a30 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
21a40 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
21a50 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
21a60 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
21a70 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
21a80 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
21a90 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20  oConflict.*/./* 
21aa0 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
21ab0 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
21ac0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
21ad0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
21ae0 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
21af0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
21b00 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
21b10 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
21b20 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
21b30 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
21b40 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
21b50 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
21b60 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
21b70 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
21b80 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
21b90 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
21ba0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
21bb0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
21bc0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
21bd0 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
21be0 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
21bf0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
21c00 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
21c10 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
21c20 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
21c30 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
21c40 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
21c50 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
21c60 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
21c70 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
21c80 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
21c90 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
21ca0 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
21cb0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
21cc0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
21cd0 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
21ce0 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
21cf0 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
21d00 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
21d10 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
21d20 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
21d30 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
21d40 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
21d50 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
21d60 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
21d70 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
21d80 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
21d90 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
21da0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
21db0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
21dc0 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
21dd0 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
21de0 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
21df0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
21e00 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
21e10 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
21e20 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
21e30 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
21e40 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
21e50 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
21e60 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
21e70 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f  so: NotFound, Fo
21e80 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a  und, NotExists.*
21e90 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66  /.case OP_NoConf
21ea0 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d  lict:     /* jum
21eb0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
21ec0 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
21ed0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
21ee0 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
21ef0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
21f00 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
21f10 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
21f20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20   int takeJump;. 
21f30 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43   int ii;.  VdbeC
21f40 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
21f50 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
21f60 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20  Record *pFree;. 
21f70 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
21f80 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
21f90 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23  ckedRecord r;..#
21fa0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
21fb0 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  T.  if( pOp->opc
21fc0 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode!=OP_NoConfli
21fd0 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75  ct ) sqlite3_fou
21fe0 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  nd_count++;.#end
21ff0 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  if..  assert( pO
22000 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22010 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22020 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22030 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
22040 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  2 );.  pC = p->a
22050 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22060 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22070 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
22080 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
22090 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
220a0 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20  ;.#endif.  pIn3 
220b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
220c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
220d0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
220e0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
220f0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
22100 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
22110 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
22120 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
22130 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72  >p4.i>0 ){.    r
22140 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
22150 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
22160 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
22170 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61  p->p4.i;.    r.a
22180 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64  Mem = pIn3;.#ifd
22190 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
221a0 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
221b0 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  <r.nField; ii++)
221c0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
221d0 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
221e0 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20  em[ii]) );.     
221f0 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d   assert( (r.aMem
22200 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
22210 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61  _Zero)==0 || r.a
22220 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a  Mem[ii].n==0 );.
22230 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52        if( ii ) R
22240 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
22250 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65  p->p3+ii, &r.aMe
22260 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  m[ii]);.    }.#e
22270 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79  ndif.    pIdxKey
22280 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65   = &r;.    pFree
22290 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
222a0 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
222b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
222c0 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78  b );.    rc = Ex
222d0 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
222e0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
222f0 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
22300 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b  =SQLITE_NOMEM );
22310 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
22320 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70  to no_mem;.    p
22330 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d  Free = pIdxKey =
22340 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f   sqlite3VdbeAllo
22350 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  cUnpackedRecord(
22360 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20  pC->pKeyInfo);. 
22370 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
22380 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
22390 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
223a0 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d  RecordUnpack(pC-
223b0 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d  >pKeyInfo, pIn3-
223c0 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64  >n, pIn3->z, pId
223d0 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64  xKey);.  }.  pId
223e0 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63  xKey->default_rc
223f0 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70   = 0;.  takeJump
22400 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
22410 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f  >opcode==OP_NoCo
22420 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a  nflict ){.    /*
22430 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f   For the OP_NoCo
22440 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74  nflict opcode, t
22450 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
22460 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  any of the.    *
22470 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61  * input fields a
22480 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61  re NULL, since a
22490 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55  ny key with a NU
224a0 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20  LL will not.    
224b0 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20  ** conflict */. 
224c0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
224d0 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b  pIdxKey->nField;
224e0 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66   ii++){.      if
224f0 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b  ( pIdxKey->aMem[
22500 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
22510 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
22520 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20  takeJump = 1;.  
22530 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
22540 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
22550 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22560 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
22570 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
22580 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
22590 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72  &res);.  if( pFr
225a0 65 65 20 29 20 73 71 6c 69 74 65 33 44 62 46 72  ee ) sqlite3DbFr
225b0 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b  eeNN(db, pFree);
225c0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
225d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f  E_OK ){.    goto
225e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
225f0 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73  ror;.  }.  pC->s
22600 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
22610 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
22620 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70   = (res==0);.  p
22630 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61  C->nullRow = 1-a
22640 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
22650 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
22660 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
22670 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
22680 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
22690 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46  Op->opcode==OP_F
226a0 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65  ound ){.    Vdbe
226b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65  BranchTaken(alre
226c0 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b  adyExists!=0,2);
226d0 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
226e0 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
226f0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
22700 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
22710 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c  hTaken(takeJump|
22720 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d  |alreadyExists==
22730 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61  0,2);.    if( ta
22740 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61  keJump || !alrea
22750 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
22760 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
22770 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22780 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64  pcode: SeekRowid
22790 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
227a0 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
227b0 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P3].**.** P1
227c0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
227d0 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f   a cursor open o
227e0 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62  n an SQL table b
227f0 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67  tree (with integ
22800 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66  er.** keys).  If
22810 20 72 65 67 69 73 74 65 72 20 50 33 20 64 6f 65   register P3 doe
22820 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  s not contain an
22830 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50   integer or if P
22840 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f  1 does not.** co
22850 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
22860 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
22870 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
22880 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f  ly to P2.  .** O
22890 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72  r, if P2 is 0, r
228a0 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43  aise an SQLITE_C
228b0 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66  ORRUPT error. If
228c0 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
228d0 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74  .** a record wit
228e0 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
228f0 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75  .** leave the cu
22900 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74  rsor pointing at
22910 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64   that record and
22920 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
22930 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
22940 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
22950 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  The OP_NotExists
22960 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
22970 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
22980 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50  ion, but with OP
22990 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68  _NotExists.** th
229a0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 6d 75  e P3 register mu
229b0 73 74 20 62 65 20 67 75 61 72 61 6e 74 65 65 64  st be guaranteed
229c0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69   to contain an i
229d0 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57  nteger value.  W
229e0 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  ith this.** opco
229f0 64 65 2c 20 72 65 67 69 73 74 65 72 20 50 33 20  de, register P3 
22a00 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69  might not contai
22a10 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  n an integer..**
22a20 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
22a30 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
22a40 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
22a50 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
22a60 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
22a70 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
22a80 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
22a90 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
22aa0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
22ab0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
22ac0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
22ad0 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
22ae0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
22af0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
22b00 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
22b10 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
22b20 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
22b30 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
22b40 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
22b50 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
22b60 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
22b70 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20  SeekRowid.*/./* 
22b80 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
22b90 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
22ba0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
22bb0 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P3].**.** P
22bc0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
22bd0 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20  f a cursor open 
22be0 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  on an SQL table 
22bf0 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65  btree (with inte
22c00 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50  ger.** keys).  P
22c10 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  3 is an integer 
22c20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f  rowid.  If P1 do
22c30 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es not contain a
22c40 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20   record with.** 
22c50 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
22c60 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
22c70 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32  o P2.  Or, if P2
22c80 20 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a   is 0, raise an.
22c90 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ** SQLITE_CORRUP
22ca0 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64  T error. If P1 d
22cb0 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  oes contain a re
22cc0 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20  cord with rowid 
22cd0 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76  P3 then .** leav
22ce0 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69  e the cursor poi
22cf0 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65  nting at that re
22d00 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68  cord and fall th
22d10 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
22d20 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
22d30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53  ..**.** The OP_S
22d40 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  eekRowid opcode 
22d50 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
22d60 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
22d70 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a  also allows the.
22d80 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72 20 74  ** P3 register t
22d90 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d  o contain a non-
22da0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
22db0 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
22dc0 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61   jump is.** alwa
22dd0 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20  ys taken.  This 
22de0 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65 73 20  opcode requires 
22df0 74 68 61 74 20 50 33 20 61 6c 77 61 79 73 20 63  that P3 always c
22e00 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
22e10 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  r..**.** The OP_
22e20 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
22e30 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
22e40 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
22e50 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
22e60 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
22e70 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
22e80 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
22e90 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
22ea0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
22eb0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
22ec0 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
22ed0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
22ee0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
22ef0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
22f00 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
22f10 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
22f20 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
22f30 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
22f40 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
22f50 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
22f60 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a  ict, SeekRowid.*
22f70 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f  /.case OP_SeekRo
22f80 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  wid: {        /*
22f90 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
22fa0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22fb0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
22fc0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
22fd0 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
22fe0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
22ff0 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
23000 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
23010 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
23020 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
23030 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
23040 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
23050 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
23060 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
23070 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
23080 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  _p2;.  }.  /* Fa
23090 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
230a0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a  OP_NotExists */.
230b0 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
230c0 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  s:          /* j
230d0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49  ump, in3 */.  pI
230e0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
230f0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
23100 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
23110 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
23120 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23130 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23140 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23150 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23160 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23170 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
23180 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
23190 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  kOp = 0;.#endif.
231a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
231b0 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
231c0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
231d0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
231e0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
231f0 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
23200 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
23210 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69  ;.  res = 0;.  i
23220 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
23230 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23240 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
23250 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
23260 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61  y, 0, &res);.  a
23270 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
23280 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
23290 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ;.  pC->movetoTa
232a0 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
232b0 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
232c0 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c  te */.  pC->null
232d0 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
232e0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
232f0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
23300 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
23310 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
23320 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
23330 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
23340 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72  t = res;.  if( r
23350 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  es!=0 ){.    ass
23360 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
23370 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  OK );.    if( pO
23380 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
23390 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
233a0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
233b0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74  }else{.      got
233c0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
233d0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
233e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
233f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
23400 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23410 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50  e: Sequence P1 P
23420 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
23430 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f  sis: r[P2]=curso
23440 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a  r[P1].ctr++.**.*
23450 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
23460 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
23470 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
23480 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
23490 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
234a0 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
234b0 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
234c0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
234d0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
234e0 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
234f0 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
23500 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
23510 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
23520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
23530 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
23540 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23550 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23560 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
23570 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d  apCsr[pOp->p1]!=
23580 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23590 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
235a0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
235b0 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f  YPE_VTAB );.  pO
235c0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
235d0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
235e0 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70  Out->u.i = p->ap
235f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65  Csr[pOp->p1]->se
23600 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61  qCount++;.  brea
23610 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
23620 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
23630 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
23640 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
23650 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
23660 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
23670 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
23680 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
23690 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
236a0 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
236b0 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
236c0 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
236d0 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
236e0 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
236f0 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
23700 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
23710 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
23720 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
23730 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
23740 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
23750 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
23760 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
23770 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
23780 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
23790 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
237a0 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
237b0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
237c0 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
237d0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
237e0 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
237f0 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
23800 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
23810 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
23820 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
23830 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
23840 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
23850 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
23860 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
23870 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
23880 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
23890 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
238a0 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
238b0 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
238c0 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
238d0 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
238e0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
238f0 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
23900 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
23910 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
23920 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
23930 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
23940 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
23950 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
23960 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
23970 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
23980 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
23990 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
239a0 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
239b0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
239c0 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
239d0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
239e0 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
239f0 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
23a00 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
23a10 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
23a20 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
23a30 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
23a40 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
23a50 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
23a60 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
23a70 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
23a80 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
23a90 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ;.  res = 0;.  p
23aa0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
23ab0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
23ac0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23ad0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23ae0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23af0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23b00 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23b10 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
23b20 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
23b30 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
23b40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23b50 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
23b60 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  .  {.    /* The 
23b70 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65  next rowid or re
23b80 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66  cord number (dif
23b90 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72  ferent terms for
23ba0 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a   the same.    **
23bb0 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69   thing) is obtai
23bc0 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65  ned in a two-ste
23bd0 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20  p algorithm..   
23be0 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74   **.    ** First
23bf0 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66   we attempt to f
23c00 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20  ind the largest 
23c10 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61  existing rowid a
23c20 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a  nd add one.    *
23c30 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20  * to that.  But 
23c40 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  if the largest e
23c50 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73  xisting rowid is
23c60 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78   already the max
23c70 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69  imum.    ** posi
23c80 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65  tive integer, we
23c90 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68   have to fall th
23ca0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63  rough to the sec
23cb0 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61  ond.    ** proba
23cc0 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74  bilistic algorit
23cd0 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  hm.    **.    **
23ce0 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f   The second algo
23cf0 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65  rithm is to sele
23d00 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61  ct a rowid at ra
23d10 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a  ndom and see if.
23d20 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64      ** it alread
23d30 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20  y exists in the 
23d40 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f  table.  If it do
23d50 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65  es not exist, we
23d60 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63   have.    ** suc
23d70 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20  ceeded.  If the 
23d80 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65  random rowid doe
23d90 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65  s exist, we sele
23da0 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20  ct a new one.   
23db0 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69   ** and try agai
23dc0 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d  n, up to 100 tim
23dd0 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  es..    */.    a
23de0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
23df0 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  le );..#ifdef SQ
23e00 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
23e10 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
23e20 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66  ROWID 0x7fffffff
23e30 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f  .#else.    /* So
23e40 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d  me compilers com
23e50 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73  plain about cons
23e60 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  tants of the for
23e70 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  m 0x7fffffffffff
23e80 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68  ffff..    ** Oth
23e90 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
23ea0 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66  ut 0x7ffffffffff
23eb0 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66  ffffffLL.  The f
23ec0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73  ollowing macro s
23ed0 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70  eems.    ** to p
23ee0 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74  rovide the const
23ef0 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67  ant while making
23f00 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68   all compilers h
23f10 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20  appy..    */.#  
23f20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
23f30 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34  D  (i64)( (((u64
23f40 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32  )0x7fffffff)<<32
23f50 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66  ) | (u64)0xfffff
23f60 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20  fff ).#endif..  
23f70 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61    if( !pC->useRa
23f80 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
23f90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
23fa0 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e  treeLast(pC->uc.
23fb0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
23fc0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
23fd0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
23fe0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
23ff0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
24000 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
24010 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  s ){.        v =
24020 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d   1;   /* IMP: R-
24030 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20  61914-48074 */. 
24040 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
24050 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
24060 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
24070 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75  Valid(pC->uc.pCu
24080 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
24090 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
240a0 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
240b0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
240c0 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f       if( v>=MAX_
240d0 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
240e0 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
240f0 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
24100 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24110 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
24120 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
24130 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
24140 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66      }.    }..#if
24150 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24160 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
24170 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29     if( pOp->p3 )
24180 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72  {.      /* Asser
24190 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
241a0 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
241b0 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
241c0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
241d0 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72        if( p->pFr
241e0 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ame ){.        f
241f0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
24200 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
24210 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
24220 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
24230 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
24240 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
24250 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
24260 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
24270 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72  rt( pOp->p3<=pFr
24280 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  ame->nMem );.   
24290 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
242a0 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
242b0 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  3];.      }else{
242c0 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
242d0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
242e0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
242f0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
24300 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
24310 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
24320 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
24330 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b     pMem = &aMem[
24340 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
24350 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
24360 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ge(p, pMem);.   
24370 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
24380 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d  t( memIsValid(pM
24390 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45  em) );..      RE
243a0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
243b0 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ->p3, pMem);.   
243c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
243d0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
243e0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
243f0 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
24400 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
24410 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
24420 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
24430 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75       if( pMem->u
24440 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c  .i==MAX_ROWID ||
24450 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
24460 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72  wid ){.        r
24470 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
24480 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38     /* IMP: R-178
24490 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20 20  17-00630 */.    
244a0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
244b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
244c0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76     }.      if( v
244d0 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
244e0 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
244f0 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
24500 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75   }.      pMem->u
24510 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65  .i = v;.    }.#e
24520 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d  ndif.    if( pC-
24530 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
24540 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c  ){.      /* IMPL
24550 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
24560 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20  -07677-41881 If 
24570 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49  the largest ROWI
24580 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  D is equal to th
24590 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65  e.      ** large
245a0 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65  st possible inte
245b0 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38  ger (92233720368
245c0 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
245d0 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
245e0 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72    ** engine star
245f0 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74  ts picking posit
24600 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f  ive candidate RO
24610 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75  WIDs at random u
24620 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74  ntil.      ** it
24630 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20   finds one that 
24640 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
24650 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20  y used. */.     
24660 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
24670 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61  ==0 );  /* We ca
24680 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f  nnot be in rando
24690 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20  m rowid mode if 
246a0 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20  this is.        
246b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246c0 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49       ** an AUTOI
246d0 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20  NCREMENT table. 
246e0 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30  */.      cnt = 0
246f0 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
24700 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
24710 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
24720 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76  , &v);.        v
24730 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
24740 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73  1); v++;  /* Ens
24750 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72  ure that v is gr
24760 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20  eater than zero 
24770 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  */.      }while(
24780 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33    ((rc = sqlite3
24790 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
247a0 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
247b0 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20  or, 0, (u64)v,. 
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54  0, &res))==SQLIT
24800 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20  E_OK).          
24810 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20    && (res==0).  
24820 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b            && (++
24830 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20  cnt<100));.     
24840 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
24850 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
24860 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  r;.      if( res
24870 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
24880 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
24890 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
248a0 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
248b0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
248c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
248d0 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
248e0 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
248f0 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
24900 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
24910 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
24920 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
24930 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
24940 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f  _STALE;.  }.  pO
24950 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
24960 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
24970 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32  de: Insert P1 P2
24980 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
24990 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
249a0 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  P3] data=r[P2].*
249b0 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
249c0 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
249d0 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
249e0 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
249f0 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
24a00 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
24a10 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
24a20 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
24a30 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
24a40 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
24a50 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
24a60 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f  lue MEM_Blob sto
24a70 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
24a80 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
24a90 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
24aa0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
24ab0 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
24ac0 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a  be a MEM_Int..**
24ad0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
24ae0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
24af0 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
24b00 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
24b10 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
24b20 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
24b30 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
24b40 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
24b50 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
24b60 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
24b70 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
24b80 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
24b90 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
24ba0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
24bb0 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
24bc0 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
24bd0 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
24be0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
24bf0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
24c00 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
24c10 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d   set, the implem
24c20 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a  entation might.*
24c30 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20  * run faster by 
24c40 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65  avoiding an unne
24c50 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20  cessary seek on 
24c60 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65  cursor P1.  Howe
24c70 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c  ver,.** the OPFL
24c80 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
24c90 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20   flag must only 
24ca0 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20  be set if there 
24cb0 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69  have been no pri
24cc0 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74  or.** seeks on t
24cd0 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20  he cursor or if 
24ce0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
24cf0 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20  seek used a key 
24d00 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a  equal to P3..**.
24d10 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
24d20 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
24d30 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73  s set, then this
24d40 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20   opcode is part 
24d50 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20  of an.** UPDATE 
24d60 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65  operation.  Othe
24d70 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c  rwise (if the fl
24d80 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65  ag is clear) the
24d90 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a  n this opcode.**
24da0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49   is part of an I
24db0 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e  NSERT operation.
24dc0 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
24dd0 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61   is only importa
24de0 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64  nt to.** the upd
24df0 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20  ate hook..**.** 
24e00 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
24e10 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c   point to a Tabl
24e20 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20  e structure, or 
24e30 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
24e40 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55  it is .** not NU
24e50 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
24e60 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65  ate-hook (sqlite
24e70 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
24e80 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a  k) is invoked .*
24e90 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  * following a su
24ea0 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
24eb0 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
24ec0 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
24ed0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
24ee0 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
24ef0 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
24f00 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
24f10 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
24f20 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
24f30 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
24f40 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
24f50 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
24f60 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
24f70 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
24f80 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
24f90 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
24fa0 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
24fb0 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
24fc0 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
24fd0 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
24fe0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
24ff0 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
25000 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
25010 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
25020 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
25030 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
25040 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
25050 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20  e: InsertInt P1 
25060 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
25070 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
25080 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  P3 data=r[P2].**
25090 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65  .** This works e
250a0 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49  xactly like OP_I
250b0 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61  nsert except tha
250c0 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65  t the key is the
250d0 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75  .** integer valu
250e0 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61  e P3, not the va
250f0 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
25100 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  er stored in reg
25110 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
25120 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61  e OP_Insert: .ca
25130 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a  se OP_InsertInt:
25140 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b   {.  Mem *pData;
25150 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
25160 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20  ll holding data 
25170 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
25180 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
25190 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20  .  Mem *pKey;   
251a0 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
251b0 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f   holding key  fo
251c0 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
251d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
251e0 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
251f0 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
25200 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
25210 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  ten */.  int see
25220 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
25230 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
25240 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
25250 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
25260 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
25270 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
25280 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
25290 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
252a0 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ok */.  Table *p
252b0 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62  Tab;      /* Tab
252c0 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d 20 75  le structure - u
252d0 73 65 64 20 62 79 20 75 70 64 61 74 65 20 61 6e  sed by update an
252e0 64 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  d pre-update hoo
252f0 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65 50 61 79  ks */.  BtreePay
25300 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50 61 79  load x;   /* Pay
25310 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73 65 72  load to be inser
25320 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ted */..  pData 
25330 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
25340 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25350 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25360 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25370 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
25380 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
25390 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
253a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
253b0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
253c0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
253d0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
253e0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
253f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
25400 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
25410 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
25420 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69  ISNOOP) || pC->i
25430 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
25440 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
25450 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70  =P4_TABLE || pOp
25460 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41  ->p4type>=P4_STA
25470 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45  TIC );.  REGISTE
25480 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
25490 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
254a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
254b0 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
254c0 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
254d0 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
254e0 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
254f0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
25500 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
25510 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
25520 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
25530 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
25540 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e   x.nKey = pKey->
25550 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
25560 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
25570 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
25580 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65  Int );.    x.nKe
25590 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
255a0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ..  if( pOp->p4t
255b0 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
255c0 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
255d0 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
255e0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
255f0 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
25600 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62  aDb[pC->iDb].zDb
25610 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  SName;.    pTab 
25620 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
25630 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70      assert( (pOp
25640 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
25650 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77 69  NOOP) || HasRowi
25660 64 28 70 54 61 62 29 20 29 3b 0a 20 20 7d 65 6c  d(pTab) );.  }el
25670 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30  se{.    pTab = 0
25680 3b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20  ;.    zDb = 0;  
25690 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
256a0 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
256b0 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
256c0 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
256d0 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
256e0 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76  TE_HOOK.  /* Inv
256f0 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61  oke the pre-upda
25700 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20  te hook, if any 
25710 2a 2f 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b  */.  if( pTab ){
25720 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
25730 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
25740 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f  && !(pOp->p5 & O
25750 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
25760 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
25770 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
25780 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f  k(p, pC, SQLITE_
25790 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61  INSERT, zDb, pTa
257a0 62 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d 3e 70  b, x.nKey,pOp->p
257b0 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  2);.    }.    if
257c0 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
257d0 6c 62 61 63 6b 3d 3d 30 20 7c 7c 20 70 54 61 62  lback==0 || pTab
257e0 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20  ->aCol==0 ){.   
257f0 20 20 20 2f 2a 20 50 72 65 76 65 6e 74 20 70 6f     /* Prevent po
25800 73 74 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 66  st-update hook f
25810 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 69 6e 20 63  rom running in c
25820 61 73 65 73 20 77 68 65 6e 20 69 74 20 73 68 6f  ases when it sho
25830 75 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20 20 20 20  uld not */.     
25840 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7d   pTab = 0;.    }
25850 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
25860 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  p5 & OPFLAG_ISNO
25870 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64  OP ) break;.#end
25880 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  if..  if( pOp->p
25890 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
258a0 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
258b0 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  +;.  if( pOp->p5
258c0 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f   & OPFLAG_LASTRO
258d0 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f  WID ) db->lastRo
258e0 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20  wid = x.nKey;.  
258f0 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
25900 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
25910 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 78  |MEM_Str) );.  x
25920 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e  .pData = pData->
25930 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d 20 70  z;.  x.nData = p
25940 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65 6b 52  Data->n;.  seekR
25950 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70  esult = ((pOp->p
25960 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
25970 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
25980 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b  seekResult : 0);
25990 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
259a0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
259b0 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  {.    x.nZero = 
259c0 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a  pData->u.nZero;.
259d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e    }else{.    x.n
259e0 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
259f0 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63  x.pKey = 0;.  rc
25a00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
25a10 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75  nsert(pC->uc.pCu
25a20 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20  rsor, &x,.      
25a30 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
25a40 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47  AG_APPEND|OPFLAG
25a50 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c  _SAVEPOSITION)),
25a60 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b   seekResult.  );
25a70 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
25a80 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
25a90 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
25aa0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
25ab0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
25ac0 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
25ad0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
25ae0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
25af0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
25b00 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 61  f( pTab ){.    a
25b10 73 73 65 72 74 28 20 64 62 2d 3e 78 55 70 64 61  ssert( db->xUpda
25b20 74 65 43 61 6c 6c 62 61 63 6b 21 3d 30 20 29 3b  teCallback!=0 );
25b30 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61  .    assert( pTa
25b40 62 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a 20 20  b->aCol!=0 );.  
25b50 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
25b60 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
25b70 65 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20  eArg,.          
25b80 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
25b90 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
25ba0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
25bb0 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 0a 20 20  QLITE_INSERT,.  
25bc0 20 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54           zDb, pT
25bd0 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65  ab->zName, x.nKe
25be0 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  y);.  }.  break;
25bf0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
25c00 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50  elete P1 P2 P3 P
25c10 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  4 P5.**.** Delet
25c20 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
25c30 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
25c40 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
25c50 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
25c60 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53   If the OPFLAG_S
25c70 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
25c80 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  of the P5 parame
25c90 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ter is set, then
25ca0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77  .** the cursor w
25cb0 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
25cc0 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20  ting at  either 
25cd0 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
25ce0 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
25cf0 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
25d00 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
25d10 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
25d20 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
25d30 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
25d40 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
25d50 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41  ll be a no-op. A
25d60 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74  s a result, in t
25d70 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69  his case.** it i
25d80 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61  s ok to delete a
25d90 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
25da0 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e  hin a Next loop.
25db0 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53   If .** OPFLAG_S
25dc0 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
25dd0 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20  of P5 is clear, 
25de0 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
25df0 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20  will be.** left 
25e00 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
25e10 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  state..**.** If 
25e20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  the OPFLAG_AUXDE
25e30 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20  LETE bit is set 
25e40 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69  on P5, that indi
25e50 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a  cates that this.
25e60 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66  ** delete one of
25e70 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61   several associa
25e80 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e  ted with deletin
25e90 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  g a table row an
25ea0 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73  d all its.** ass
25eb0 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e  ociated index en
25ec0 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20  tries.  Exactly 
25ed0 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c  one of those del
25ee0 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69  etes is the "pri
25ef0 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e  mary".** delete.
25f00 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65    The others are
25f10 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46   all on OPFLAG_F
25f20 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73  ORDELETE cursors
25f30 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20   or else are.** 
25f40 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20  marked with the 
25f50 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a  AUXDELETE flag..
25f60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
25f70 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
25f80 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e   of P2 (NB: P2 n
25f90 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74  ot P5) is set, t
25fa0 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63  hen the row.** c
25fb0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69  hange count is i
25fc0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
25fd0 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
25fe0 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
25ff0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
26000 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
26010 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
26020 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
26030 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
26040 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
26050 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62   points to a Tab
26060 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68  le object. In th
26070 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a  is case either .
26080 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72  ** the update or
26090 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
260a0 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62  , or both, may b
260b0 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50  e invoked. The P
260c0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a  1 cursor must.**
260d0 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
260e0 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e  ioned using OP_N
260f0 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
26100 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
26110 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69  pcode in .** thi
26120 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63  s case. Specific
26130 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20  ally, if one is 
26140 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20  configured, the 
26150 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20  pre-update hook 
26160 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69  is .** invoked i
26170 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
26180 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  . The update-hoo
26190 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20  k is invoked if 
261a0 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65  one is configure
261b0 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74  d, .** P4 is not
261c0 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f   NULL, and the O
261d0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
261e0 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e  ag is set in P2.
261f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
26200 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
26210 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c  ag is set in P2,
26220 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e   then P3 contain
26230 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a  s the address.**
26240 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
26250 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
26260 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74  s the value that
26270 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
26280 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65  e row will.** be
26290 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75   set to by the u
262a0 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pdate..*/.case O
262b0 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  P_Delete: {.  Vd
262c0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
262d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
262e0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
262f0 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a    int opflags;..
26300 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d    opflags = pOp-
26310 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
26320 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26330 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26340 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26350 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26360 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
26370 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
26380 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
26390 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
263a0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
263b0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
263c0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
263d0 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64  veto==0 );..#ifd
263e0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
263f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
26400 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
26410 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e  asRowid(pOp->p4.
26420 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35  pTab) && pOp->p5
26430 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ==0 ){.    /* If
26440 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   p5 is zero, the
26450 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
26460 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20  that positioned 
26470 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72  the cursor prior
26480 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65   to.    ** OP_De
26490 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61  lete will have a
264a0 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e  lso set the pC->
264b0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65  movetoTarget fie
264c0 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ld to the rowid 
264d0 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f  of.    ** the ro
264e0 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20  w that is being 
264f0 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69  deleted */.    i
26500 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65  64 iKey = sqlite
26510 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
26520 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
26530 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
26540 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d  ->movetoTarget==
26550 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  iKey );.  }.#end
26560 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  if..  /* If the 
26570 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70  update-hook or p
26580 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77  re-update-hook w
26590 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
265a0 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20  set zDb to.  ** 
265b0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
265c0 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f  db to pass as to
265d0 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f   it. Also set lo
265e0 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f  cal pTab to a co
265f0 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54  py.  ** of p4.pT
26600 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  ab. Finally, if 
26610 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69  p5 is true, indi
26620 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73  cating that this
26630 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a   cursor was.  **
26640 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68   last moved with
26650 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50   OP_Next or OP_P
26660 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72  rev, not Seek or
26670 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a   NotFound, set .
26680 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e    ** VdbeCursor.
26690 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20  movetoTarget to 
266a0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69  the current rowi
266b0 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  d.  */.  if( pOp
266c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
266d0 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  LE && HAS_UPDATE
266e0 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
266f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
26700 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
26710 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21  t( pOp->p4.pTab!
26720 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20  =0 );.    zDb = 
26730 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
26740 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70  .zDbSName;.    p
26750 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
26760 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70  ab;.    if( (pOp
26770 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41  ->p5 & OPFLAG_SA
26780 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26  VEPOSITION)!=0 &
26790 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
267a0 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  .      pC->movet
267b0 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
267c0 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
267d0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
267e0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
267f0 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20  .    zDb = 0;   
26800 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
26810 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
26820 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
26830 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a     pTab = 0;  /*
26840 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
26850 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
26860 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
26870 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26880 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
26890 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
268a0 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
268b0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
268c0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  d. */.  if( db->
268d0 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
268e0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54  ck && pOp->p4.pT
268f0 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ab ){.    assert
26900 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50  ( !(opflags & OP
26910 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a  FLAG_ISUPDATE) .
26920 20 20 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52           || HasR
26930 6f 77 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20  owid(pTab)==0 . 
26940 20 20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d          || (aMem
26950 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20  [pOp->p3].flags 
26960 26 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20  & MEM_Int) .    
26970 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
26980 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
26990 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28  p, pC,.        (
269a0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
269b0 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
269c0 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
269d0 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20  ITE_DELETE, .   
269e0 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20       zDb, pTab, 
269f0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
26a00 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70  ,.        pOp->p
26a10 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69  3.    );.  }.  i
26a20 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  f( opflags & OPF
26a30 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65  LAG_ISNOOP ) bre
26a40 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f  ak;.#endif. .  /
26a50 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61  * Only flags tha
26a60 74 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65  t can be set are
26a70 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e   SAVEPOISTION an
26a80 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a  d AUXDELETE */ .
26a90 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
26aa0 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41  p5 & ~(OPFLAG_SA
26ab0 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41  VEPOSITION|OPFLA
26ac0 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30  G_AUXDELETE))==0
26ad0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
26ae0 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
26af0 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53  N==BTREE_SAVEPOS
26b00 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72  ITION );.  asser
26b10 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  t( OPFLAG_AUXDEL
26b20 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45  ETE==BTREE_AUXDE
26b30 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20  LETE );..#ifdef 
26b40 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
26b50 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20  f( p->pFrame==0 
26b60 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  ){.    if( pC->i
26b70 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20  sEphemeral==0.  
26b80 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70        && (pOp->p
26b90 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  5 & OPFLAG_AUXDE
26ba0 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20  LETE)==0.       
26bb0 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20   && (pC->wrFlag 
26bc0 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
26bd0 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a  TE)==0.      ){.
26be0 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
26bf0 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  te++;.    }.    
26c00 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
26c10 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a  FLAG_NCHANGE ){.
26c20 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
26c30 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  te--;.    }.  }.
26c40 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73  #endif..  rc = s
26c50 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
26c60 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
26c70 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43  , pOp->p5);.  pC
26c80 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
26c90 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
26ca0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
26cb0 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  0;.  if( rc ) go
26cc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
26cd0 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76  error;..  /* Inv
26ce0 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
26cf0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
26d00 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67   */.  if( opflag
26d10 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  s & OPFLAG_NCHAN
26d20 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  GE ){.    p->nCh
26d30 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20  ange++;.    if( 
26d40 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
26d50 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28  ack && HasRowid(
26d60 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64  pTab) ){.      d
26d70 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
26d80 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
26d90 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
26da0 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61  , zDb, pTab->zNa
26db0 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43  me,.          pC
26dc0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
26dd0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
26de0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
26df0 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
26e00 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
26e10 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
26e20 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
26e30 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
26e40 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
26e50 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
26e60 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
26e70 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
26e80 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
26e90 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
26ea0 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
26eb0 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
26ec0 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
26ed0 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
26ee0 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
26ef0 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
26f00 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
26f10 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
26f20 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
26f30 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
26f40 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
26f50 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
26f60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
26f70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70  code: SorterComp
26f80 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a  are P1 P2 P3 P4.
26f90 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
26fa0 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b  key(P1)!=trim(r[
26fb0 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a  P3],P4) goto P2.
26fc0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
26fd0 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69  rter cursor. Thi
26fe0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
26ff0 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20  mpares a prefix 
27000 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
27010 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
27020 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70  r P3 against a p
27030 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74  refix of the ent
27040 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20  ry that .** the 
27050 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75  sorter cursor cu
27060 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74  rrently points t
27070 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72  o.  Only the fir
27080 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20  st P4 fields.** 
27090 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65  of r[P3] and the
270a0 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61   sorter record a
270b0 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a  re compared..**.
270c0 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20  ** If either P3 
270d0 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f  or the sorter co
270e0 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e  ntains a NULL in
270f0 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69   one of their si
27100 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65  gnificant.** fie
27110 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e  lds (not countin
27120 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20  g the P4 fields 
27130 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68  at the end which
27140 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68   are ignored) th
27150 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  en.** the compar
27160 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20  ison is assumed 
27170 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a  to be equal..**.
27180 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  ** Fall through 
27190 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  to next instruct
271a0 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72  ion if the two r
271b0 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65  ecords compare e
271c0 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20  qual to.** each 
271d0 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20  other.  Jump to 
271e0 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64  P2 if they are d
271f0 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73  ifferent..*/.cas
27200 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61  e OP_SorterCompa
27210 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  re: {.  VdbeCurs
27220 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
27230 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c  s;.  int nKeyCol
27240 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
27250 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27260 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
27270 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  pC) );.  assert(
27280 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
27290 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33  _INT32 );.  pIn3
272a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
272b0 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70  ];.  nKeyCol = p
272c0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20  Op->p4.i;.  res 
272d0 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
272e0 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d  te3VdbeSorterCom
272f0 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e  pare(pC, pIn3, n
27300 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20  KeyCol, &res);. 
27310 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
27320 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
27330 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
27340 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
27350 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
27360 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
27370 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63  reak;.};../* Opc
27380 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20  ode: SorterData 
27390 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
273a0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
273b0 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
273c0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
273d0 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
273e0 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
273f0 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
27400 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68  ** Then clear th
27410 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20  e column header 
27420 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20  cache on cursor 
27430 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P3..**.** This o
27440 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c  pcode is normall
27450 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20  y use to move a 
27460 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68  record out of th
27470 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74  e sorter and int
27480 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20  o.** a register 
27490 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72  that is the sour
274a0 63 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d  ce for a pseudo-
274b0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65  table cursor cre
274c0 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70  ated using.** Op
274d0 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20  enPseudo.  That 
274e0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
274f0 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74  sor is the one t
27500 68 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65  hat is identifie
27510 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d by.** paramete
27520 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20  r P3.  Clearing 
27530 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61  the P3 column ca
27540 63 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74  che as part of t
27550 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73  his opcode saves
27560 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69  .** us from havi
27570 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65  ng to issue a se
27580 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69  parate NullRow i
27590 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c  nstruction to cl
275a0 65 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a  ear that cache..
275b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
275c0 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
275d0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f  ursor *pC;..  pO
275e0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
275f0 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
27600 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27610 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
27620 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
27630 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
27640 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
27650 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21  );.  assert( rc!
27660 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70  =SQLITE_OK || (p
27670 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
27680 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65  _Blob) );.  asse
27690 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
276a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
276b0 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63  rsor );.  if( rc
276c0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
276d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d  e_to_error;.  p-
276e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d  >apCsr[pOp->p3]-
276f0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
27700 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72  ACHE_STALE;.  br
27710 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27720 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
27730 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
27740 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
27750 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
27760 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
27770 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f   complete row co
27780 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f  ntent for the ro
27790 77 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63  w at .** which c
277a0 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72  ursor P1 is curr
277b0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
277c0 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
277d0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
277e0 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
277f0 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
27800 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
27810 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
27820 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
27830 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
27840 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
27850 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e   cursor P1 is an
27860 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65   index, then the
27870 20 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20   content is the 
27880 6b 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a  key of the row..
27890 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32 20  ** If cursor P2 
278a0 69 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e  is a table, then
278b0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74   the content ext
278c0 72 61 63 74 65 64 20 69 73 20 74 68 65 20 64 61  racted is the da
278d0 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ta..**.** If the
278e0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
278f0 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
27900 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
27910 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
27920 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
27930 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
27940 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21  le..**.** If P3!
27950 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
27960 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ode is allowed t
27970 6f 20 6d 61 6b 65 20 61 6e 20 65 70 68 65 72 6d  o make an epherm
27980 65 72 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20  eral pointer.** 
27990 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
279a0 65 20 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65  e page.  That me
279b0 61 6e 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e  ans that the con
279c0 74 65 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70  tent of the outp
279d0 75 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77  ut.** register w
279e0 69 6c 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74  ill be invalidat
279f0 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68  ed as soon as th
27a00 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d  e cursor moves -
27a10 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f   including.** mo
27a20 76 65 73 20 63 61 75 73 65 64 20 62 79 20 6f 74  ves caused by ot
27a30 68 65 72 20 63 75 72 73 6f 72 73 20 74 68 61 74  her cursors that
27a40 20 22 73 61 76 65 22 20 74 68 65 20 74 68 65 20   "save" the the 
27a50 63 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73 0a  current cursors.
27a60 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f  ** position in o
27a70 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 63  rder that they c
27a80 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65 20  an write to the 
27a90 73 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66 20  same table.  If 
27aa0 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20  P3==0.** then a 
27ab0 63 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74 61  copy of the data
27ac0 20 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65   is made into me
27ad0 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73 20  mory.  P3!=0 is 
27ae0 66 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50  faster, but.** P
27af0 33 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a 2a  3==0 is safer..*
27b00 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68  *.** If P3!=0 th
27b10 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  en the content o
27b20 66 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  f the P2 registe
27b30 72 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65 20  r is unsuitable 
27b40 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50  for use.** in OP
27b50 5f 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79 20  _Result and any 
27b60 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20 69  OP_Result will i
27b70 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 50 32  nvalidate the P2
27b80 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e   register conten
27b90 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65 67  t..** The P2 reg
27ba0 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69 73  ister content is
27bb0 20 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79 20   invalidated by 
27bc0 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f  opcodes like OP_
27bd0 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62  Function or.** b
27be0 79 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f  y any use of ano
27bf0 74 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69 6e  ther cursor poin
27c00 74 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65  ting to the same
27c10 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
27c20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
27c30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27c40 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
27c50 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70  r;.  u32 n;..  p
27c60 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
27c70 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20  ease(p, pOp);.. 
27c80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27c90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27ca0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27cb0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27cc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27cd0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
27ce0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
27cf0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
27d00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
27d10 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a  orter(pC)==0 );.
27d20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
27d30 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
27d40 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
27d50 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
27d60 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
27d70 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  sor;..  /* The O
27d80 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
27d90 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
27da0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
27db0 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69    ** OP_SeekRowi
27dc0 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f  d or OP_Rewind/O
27dd0 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
27de0 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
27df0 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61  uctions.  ** tha
27e00 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
27e10 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20  te the cursor.. 
27e20 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65 72   ** If this wher
27e30 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20  e not the case, 
27e40 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  on of the follow
27e50 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20  ing assert()s.  
27e60 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20  ** would fail.  
27e70 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72  Should this ever
27e80 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65   change (because
27e90 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74   of changes in t
27ea0 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e  he code.  ** gen
27eb0 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65  erator) then the
27ec0 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f   fix would be to
27ed0 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74   insert a call t
27ee0 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
27ef0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
27f00 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
27f10 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27f20 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
27f30 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
27f40 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
27f50 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f  rsr) );.#if 0  /
27f60 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64  * Not required d
27f70 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ue to the previo
27f80 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73  us to assert() s
27f90 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72  tatements */.  r
27fa0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
27fb0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
27fc0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
27fd0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
27fe0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
27ff0 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71  #endif..  n = sq
28000 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
28010 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20  dSize(pCrsr);.  
28020 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61  if( n>(u32)db->a
28030 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
28040 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
28050 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
28060 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
28070 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  n==0 );.  rc = s
28080 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
28090 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
280a0 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66 28   n, pOut);.  if(
280b0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
280c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
280d0 20 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29 20   if( !pOp->p3 ) 
280e0 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
280f0 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
28100 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
28110 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
28120 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
28130 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
28140 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
28150 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
28160 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
28170 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
28180 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
28190 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
281a0 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
281b0 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
281c0 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
281d0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
281e0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
281f0 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
28200 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
28210 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
28220 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
28230 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
28240 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
28250 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
28260 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
28270 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
28280 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
28290 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
282a0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
282b0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
282c0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
282d0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
282e0 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  *pC;.  i64 v;.  
282f0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
28300 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
28310 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
28320 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  dule;..  pOut = 
28330 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
28340 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
28350 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28360 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28370 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28380 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28390 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
283a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
283b0 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
283c0 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d  PE_PSEUDO || pC-
283d0 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66  >nullRow );.  if
283e0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
283f0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
28400 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
28410 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20   break;.  }else 
28420 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  if( pC->deferred
28430 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20  Moveto ){.    v 
28440 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  = pC->movetoTarg
28450 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
28460 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28470 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28  ABLE.  }else if(
28480 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
28490 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20  URTYPE_VTAB ){. 
284a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
284b0 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20  c.pVCur!=0 );.  
284c0 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63    pVtab = pC->uc
284d0 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
284e0 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
284f0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
28500 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
28510 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
28520 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
28530 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75  owid(pC->uc.pVCu
28540 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
28550 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
28560 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
28570 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
28580 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
28590 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ror;.#endif /* S
285a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
285b0 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
285c0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
285d0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
285e0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
285f0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
28600 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
28610 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
28620 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
28630 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  e(pC);.    if( r
28640 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
28650 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
28660 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
28670 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
28680 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
28690 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
286a0 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c     }.    v = sql
286b0 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72  ite3BtreeInteger
286c0 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  Key(pC->uc.pCurs
286d0 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  or);.  }.  pOut-
286e0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
286f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28700 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
28710 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
28720 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
28730 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
28740 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
28750 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
28760 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
28770 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
28780 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
28790 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
287a0 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
287b0 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
287c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
287d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
287e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
287f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
28800 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
28810 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
28820 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
28830 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
28840 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
28850 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
28860 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
28870 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
28880 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
28890 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
288a0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  );.    sqlite3Bt
288b0 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70  reeClearCursor(p
288c0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
288d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
288e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45  /* Opcode: SeekE
288f0 6e 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  nd P1 * * * *.**
28900 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e 20 63 75 72  .** Position cur
28910 73 6f 72 20 50 31 20 61 74 20 74 68 65 20 65 6e  sor P1 at the en
28920 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 66  d of the btree f
28930 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f  or the purpose o
28940 66 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20 61  f.** appending a
28950 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20   new entry onto 
28960 74 68 65 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  the btree..**.**
28970 20 49 74 20 69 73 20 61 73 73 75 6d 65 64 20 74   It is assumed t
28980 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
28990 73 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20  s used only for 
289a0 61 70 70 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f  appending and so
289b0 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
289c0 72 20 69 73 20 76 61 6c 69 64 2c 20 74 68 65 6e  r is valid, then
289d0 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74   the cursor must
289e0 20 61 6c 72 65 61 64 79 20 62 65 20 70 6f 69 6e   already be poin
289f0 74 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 65  ting.** at the e
28a00 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 20  nd of the btree 
28a10 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65  and so no change
28a20 73 20 61 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a  s are made to.**
28a30 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a   the cursor..*/.
28a40 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20  /* Opcode: Last 
28a50 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
28a60 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
28a70 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
28a80 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e  olumn or Prev in
28a90 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
28aa0 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
28ab0 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  to the last entr
28ac0 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
28ad0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
28ae0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
28af0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
28b00 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
28b10 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
28b20 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
28b30 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
28b40 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
28b50 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
28b60 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
28b70 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
28b80 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
28b90 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28ba0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
28bb0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
28bc0 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
28bd0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
28be0 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
28bf0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
28c00 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
28c10 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
28c20 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
28c30 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
28c40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
28c50 45 6e 64 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73  End:.case OP_Las
28c60 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
28c70 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
28c80 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
28c90 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
28ca0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
28cb0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28cc0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28cd0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28ce0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28cf0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28d00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
28d10 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28d20 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
28d30 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
28d40 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b  rsor;.  res = 0;
28d50 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
28d60 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
28d70 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
28d80 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
28d90 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
28da0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
28db0 3d 4f 50 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20  =OP_SeekEnd ){. 
28dc0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
28dd0 70 32 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  p2==0 );.    pC-
28de0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31  >seekResult = -1
28df0 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
28e00 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
28e10 6c 69 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a  lidNN(pCrsr) ){.
28e20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
28e30 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71   }.  }.  rc = sq
28e40 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
28e50 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
28e60 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
28e70 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
28e80 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
28e90 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
28ea0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
28eb0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
28ec0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
28ed0 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
28ee0 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65  p2>0 ){.    Vdbe
28ef0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
28f00 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72  =0,2);.    if( r
28f10 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
28f20 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
28f30 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28f40 20 49 66 53 6d 61 6c 6c 65 72 20 50 31 20 50 32   IfSmaller P1 P2
28f50 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73   P3 * *.**.** Es
28f60 74 69 6d 61 74 65 20 74 68 65 20 6e 75 6d 62 65  timate the numbe
28f70 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
28f80 20 74 61 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70   table P1.  Jump
28f90 20 74 6f 20 50 32 20 69 66 20 74 68 61 74 0a 2a   to P2 if that.*
28fa0 2a 20 65 73 74 69 6d 61 74 65 20 69 73 20 6c 65  * estimate is le
28fb0 73 73 20 74 68 61 6e 20 61 70 70 72 6f 78 69 6d  ss than approxim
28fc0 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33  ately 2**(0.1*P3
28fd0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  )..*/.case OP_If
28fe0 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20  Smaller: {      
28ff0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
29000 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
29010 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
29020 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
29030 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74  64 sz;..  assert
29040 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29050 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29060 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
29070 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29080 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29090 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
290a0 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
290b0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
290c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
290d0 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
290e0 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
290f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29100 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
29110 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
29120 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
29130 52 6f 77 43 6f 75 6e 74 45 73 74 28 70 43 72 73  RowCountEst(pCrs
29140 72 29 3b 0a 20 20 20 20 69 66 28 20 41 4c 57 41  r);.    if( ALWA
29150 59 53 28 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c  YS(sz>=0) && sql
29160 69 74 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29  ite3LogEst((u64)
29170 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65  sz)<pOp->p3 ) re
29180 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62  s = 1;.  }.  Vdb
29190 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
291a0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
291b0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
291c0 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
291d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
291e0 74 65 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20  terSort P1 P2 * 
291f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  * *.**.** After 
29200 61 6c 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65  all records have
29210 20 62 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69   been inserted i
29220 6e 74 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f  nto the Sorter o
29230 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66  bject.** identif
29240 69 65 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b  ied by P1, invok
29250 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
29260 20 61 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65   actually do the
29270 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d   sorting..** Jum
29280 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65  p to P2 if there
29290 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
292a0 74 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a  to be sorted..**
292b0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
292c0 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
292d0 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52  OP_Sort and OP_R
292e0 65 77 69 6e 64 20 74 68 61 74 20 69 73 20 75 73  ewind that is us
292f0 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72  ed.** for Sorter
29300 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20   objects..*/./* 
29310 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
29320 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
29330 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
29340 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
29350 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
29360 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
29370 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
29380 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
29390 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
293a0 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
293b0 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
293c0 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
293d0 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
293e0 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
293f0 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
29400 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
29410 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
29420 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
29430 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
29440 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
29450 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
29460 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
29470 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
29480 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
29490 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
294a0 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
294b0 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
294c0 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
294d0 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
294e0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
294f0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
29500 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
29510 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
29520 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
29530 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
29540 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
29550 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
29560 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
29570 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
29580 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
29590 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
295a0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
295b0 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
295c0 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
295d0 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
295e0 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
295f0 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
29600 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
29610 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
29620 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
29630 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
29640 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
29650 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
29660 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
29670 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
29680 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
29690 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
296a0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
296b0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
296c0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a  ndex is empty, j
296d0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
296e0 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65  to P2..** If the
296f0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
29700 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
29710 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
29720 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20  e following .** 
29730 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
29740 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
29750 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
29760 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
29770 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
29780 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
29790 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
297a0 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
297b0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
297c0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
297d0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
297e0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
297f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
29800 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
29810 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
29820 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
29830 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
29840 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
29850 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29860 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29870 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
29880 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29890 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
298a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
298b0 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
298c0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
298d0 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
298e0 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
298f0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
29900 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69  seekOp = OP_Rewi
29910 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nd;.#endif.  if(
29920 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
29930 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
29940 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
29950 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  d(pC, &res);.  }
29960 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
29970 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
29980 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
29990 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
299a0 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
299b0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
299c0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
299d0 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
299e0 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
299f0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
29a00 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
29a10 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
29a20 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
29a30 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
29a40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
29a50 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
29a60 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
29a70 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
29a80 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
29a90 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
29aa0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
29ab0 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
29ac0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
29ad0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29ae0 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
29af0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41  P3 P4 P5.**.** A
29b00 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
29b10 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
29b20 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
29b30 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
29b40 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
29b50 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
29b60 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
29b70 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
29b80 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
29b90 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
29ba0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
29bb0 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
29bc0 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
29bd0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
29be0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
29bf0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
29c00 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
29c10 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
29c20 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53  ing an SeekGT, S
29c30 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekGE, or.** OP_
29c40 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73  Rewind opcode us
29c50 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
29c60 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74  he cursor.  Next
29c70 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
29c80 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
29c90 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20  kLT, SeekLE, or 
29ca0 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  OP_Last..**.** T
29cb0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
29cc0 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
29cd0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
29ce0 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
29cf0 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
29d00 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
29d10 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
29d20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
29d30 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
29d40 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
29d50 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
29d60 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
29d70 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
29d80 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
29d90 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
29da0 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
29db0 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
29dc0 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
29dd0 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
29de0 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
29df0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
29e00 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
29e10 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
29e20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
29e30 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
29e40 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
29e50 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
29e60 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
29e70 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
29e80 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
29e90 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
29ea0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
29eb0 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
29ec0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
29ed0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
29ee0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
29ef0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
29f00 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
29f10 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
29f20 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
29f30 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
29f40 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
29f50 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
29f60 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78  ust like Next ex
29f70 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
29f80 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
29f90 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
29fa0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
29fb0 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
29fc0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
29fd0 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
29fe0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
29ff0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
2a000 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
2a010 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
2a020 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
2a030 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
2a040 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
2a050 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
2a060 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
2a070 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
2a080 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
2a090 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
2a0a0 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
2a0b0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
2a0c0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2a0d0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
2a0e0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2a0f0 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
2a100 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
2a110 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
2a120 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
2a130 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
2a140 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
2a150 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
2a160 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
2a170 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
2a180 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
2a190 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
2a1a0 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
2a1b0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
2a1c0 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
2a1d0 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
2a1e0 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
2a1f0 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
2a200 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
2a210 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
2a220 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
2a230 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
2a240 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
2a250 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
2a260 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
2a270 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
2a280 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
2a290 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
2a2a0 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
2a2b0 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
2a2c0 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
2a2d0 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
2a2e0 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
2a2f0 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
2a300 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
2a310 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
2a320 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
2a330 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
2a340 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
2a350 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
2a360 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
2a370 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
2a380 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
2a390 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
2a3a0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
2a3b0 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
2a3c0 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
2a3d0 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
2a3e0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2a3f0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
2a400 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72  rks just like Pr
2a410 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
2a420 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
2a430 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
2a440 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
2a450 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  /./* Opcode: Sor
2a460 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a 20  terNext P1 P2 * 
2a470 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  * P5.**.** This 
2a480 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
2a490 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65  t like OP_Next e
2a4a0 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d 75  xcept that P1 mu
2a4b0 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65  st be a.** sorte
2a4c0 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68 69  r object for whi
2a4d0 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65 72  ch the OP_Sorter
2a4e0 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73 20  Sort opcode has 
2a4f0 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e  been.** invoked.
2a500 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61 64    This opcode ad
2a510 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73 6f  vances the curso
2a520 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 6f  r to the next so
2a530 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20  rted.** record, 
2a540 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69  or jumps to P2 i
2a550 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
2a560 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f 72  ore sorted recor
2a570 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ds..*/.case OP_S
2a580 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a  orterNext: {  /*
2a590 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2a5a0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43  ursor *pC;..  pC
2a5b0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2a5c0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2a5d0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
2a5e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2a5f0 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
2a600 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78   pC);.  goto nex
2a610 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f  t_tail;.case OP_
2a620 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f  PrevIfOpen:    /
2a630 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2a640 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20  P_NextIfOpen:   
2a650 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
2a660 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
2a670 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  p1]==0 ) break;.
2a680 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
2a690 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65  h */.case OP_Pre
2a6a0 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
2a6b0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
2a6c0 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  ext:          /*
2a6d0 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
2a6e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2a6f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2a700 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
2a710 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69   pOp->p5<ArraySi
2a720 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20  ze(p->aCounter) 
2a730 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2a740 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2a750 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2a760 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2a770 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2a780 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2a790 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2a7a0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
2a7b0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2a7c0 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
2a7d0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
2a7e0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
2a7f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2a800 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
2a810 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
2a820 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
2a830 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
2a840 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2a850 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
2a860 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
2a870 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
2a880 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
2a890 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2a8a0 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
2a8b0 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
2a8c0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
2a8d0 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a  treePrevious);..
2a8e0 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
2a8f0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
2a900 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
2a910 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69  SeekGE, and Rewi
2a920 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
2a930 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
2a940 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
2a950 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
2a960 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
2a970 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a980 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
2a990 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
2a9a0 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
2a9b0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
2a9c0 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
2a9d0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
2a9e0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2a9f0 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
2aa00 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2aa10 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72  _Found);.  asser
2aa20 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2aa30 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
2aa40 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
2aa50 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
2aa60 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
2aa70 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
2aa80 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
2aa90 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2aaa0 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
2aab0 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
2aac0 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e  xAdvance(pC->uc.
2aad0 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33  pCursor, pOp->p3
2aae0 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20  );.next_tail:.  
2aaf0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2ab00 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2ab10 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2ab20 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32  (rc==SQLITE_OK,2
2ab30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2ab40 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43  ITE_OK ){.    pC
2ab50 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
2ab60 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70     p->aCounter[p
2ab70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65  Op->p5]++;.#ifde
2ab80 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
2ab90 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
2aba0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
2abb0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
2abc0 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
2abd0 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  or_interrupt;.  
2abe0 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
2abf0 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61  TE_DONE ) goto a
2ac00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2ac10 72 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  r;.  rc = SQLITE
2ac20 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  _OK;.  pC->nullR
2ac30 6f 77 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63  ow = 1;.  goto c
2ac40 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2ac50 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2ac60 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
2ac70 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2ac80 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
2ac90 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
2aca0 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
2acb0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
2acc0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
2acd0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
2ace0 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
2acf0 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
2ad00 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
2ad10 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
2ad20 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
2ad30 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  nil..**.** If P4
2ad40 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2ad50 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d  en it is the num
2ad60 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber of values in
2ad70 20 74 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a   the unpacked.**
2ad80 20 6b 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e   key of reg(P2).
2ad90 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
2ada0 50 33 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P3 is the index 
2adb0 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 67  of the first reg
2adc0 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65  ister.** for the
2add0 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20   unpacked key.  
2ade0 54 68 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79  The availability
2adf0 20 6f 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64   of the unpacked
2ae00 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d   key can sometim
2ae10 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69  es.** be an opti
2ae20 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  mization..**.** 
2ae30 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
2ae40 46 4c 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20  FLAG_APPEND bit 
2ae50 73 65 74 2c 20 74 68 61 74 20 69 73 20 61 20 68  set, that is a h
2ae60 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
2ae70 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20  e layer.** that 
2ae80 74 68 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c  this insert is l
2ae90 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
2aea0 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ppend..**.** If 
2aeb0 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
2aec0 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65  G_NCHANGE bit se
2aed0 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  t, then the chan
2aee0 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a  ge counter is.**
2aef0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2af00 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2af10 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
2af20 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20  _NCHANGE bit is 
2af30 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  clear,.** then t
2af40 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2af50 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  r is unchanged..
2af60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
2af70 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2af80 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
2af90 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65  set, the impleme
2afa0 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a  ntation might.**
2afb0 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61   run faster by a
2afc0 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63  voiding an unnec
2afd0 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63  essary seek on c
2afe0 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76  ursor P1.  Howev
2aff0 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  er,.** the OPFLA
2b000 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
2b010 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62  flag must only b
2b020 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68  e set if there h
2b030 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f  ave been no prio
2b040 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68  r.** seeks on th
2b050 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74  e cursor or if t
2b060 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  he most recent s
2b070 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65  eek used a key e
2b080 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20  quivalent.** to 
2b090 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P2. .**.** This 
2b0a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
2b0b0 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
2b0c0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
2b0d0 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
2b0e0 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
2b0f0 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f   OP_Insert..*/./
2b100 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
2b110 49 6e 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a  Insert P1 P2 * *
2b120 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2b130 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
2b140 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
2b150 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
2b160 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
2b170 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
2b180 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
2b190 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
2b1a0 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
2b1b0 74 6f 20 74 68 65 20 73 6f 72 74 65 72 20 50 31  to the sorter P1
2b1c0 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
2b1d0 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f  entry is nil..*/
2b1e0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
2b1f0 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
2b200 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in2 */.case OP_I
2b210 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
2b220 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
2b230 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2b240 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b   BtreePayload x;
2b250 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2b260 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2b270 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2b280 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2b290 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2b2a0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2b2b0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
2b2c0 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
2b2d0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2b2e0 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  rt) );.  pIn2 = 
2b2f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2b300 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
2b310 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
2b320 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
2b330 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
2b340 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
2b350 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  +;.  assert( pC-
2b360 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2b370 50 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d  PE_BTREE || pOp-
2b380 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
2b390 65 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73  erInsert );.  as
2b3a0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
2b3b0 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45  e==0 );.  rc = E
2b3c0 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
2b3d0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2b3e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b3f0 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
2b400 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2b410 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72  rInsert ){.    r
2b420 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
2b430 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
2b440 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  In2);.  }else{. 
2b450 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32     x.nKey = pIn2
2b460 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20  ->n;.    x.pKey 
2b470 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78  = pIn2->z;.    x
2b480 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70  .aMem = aMem + p
2b490 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d  Op->p3;.    x.nM
2b4a0 65 6d 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  em = (u16)pOp->p
2b4b0 34 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  4.i;.    rc = sq
2b4c0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
2b4d0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
2b4e0 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20 28 70   &x,.         (p
2b4f0 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
2b500 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53  _APPEND|OPFLAG_S
2b510 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a  AVEPOSITION)), .
2b520 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
2b530 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
2b540 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
2b550 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
2b560 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61          );.    a
2b570 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2b580 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2b590 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
2b5a0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2b5b0 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29  E;.  }.  if( rc)
2b5c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2b5d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2b5e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b5f0 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32   IdxDelete P1 P2
2b600 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2b610 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33  sis: key=r[P2@P3
2b620 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74  ].**.** The cont
2b630 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74  ent of P3 regist
2b640 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  ers starting at 
2b650 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d  register P2 form
2b660 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  .** an unpacked 
2b670 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20  index key. This 
2b680 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74  opcode removes t
2b690 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74  hat entry from t
2b6a0 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65  he .** index ope
2b6b0 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
2b6c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
2b6d0 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
2b6e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2b6f0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
2b700 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
2b710 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
2b720 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2b730 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
2b740 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
2b750 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70  ->p2+pOp->p3<=(p
2b760 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
2b770 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73  ursor)+1 );.  as
2b780 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2b790 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2b7a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2b7b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2b7c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2b7d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2b7e0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b7f0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b800 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2b810 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
2b820 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2b830 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b840 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79  5==0 );.  r.pKey
2b850 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2b860 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2b870 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
2b880 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2b890 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26   0;.  r.aMem = &
2b8a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2b8b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2b8c0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
2b8d0 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
2b8e0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2b8f0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2b900 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2b910 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2b920 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2b930 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20  eeDelete(pCrsr, 
2b940 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29  BTREE_AUXDELETE)
2b950 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2b960 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2b970 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
2b980 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2b990 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2b9a0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2b9b0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2b9c0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
2b9d0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2b9e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66  ../* Opcode: Def
2b9f0 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50  erredSeek P1 * P
2ba00 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2ba10 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2ba20 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65  1.rowid if neede
2ba30 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  d.**.** P1 is an
2ba40 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73   open index curs
2ba50 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63  or and P3 is a c
2ba60 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72  ursor on the cor
2ba70 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61  responding.** ta
2ba80 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ble.  This opcod
2ba90 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65  e does a deferre
2baa0 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33  d seek of the P3
2bab0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a   table cursor.**
2bac0 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74   to the row that
2bad0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2bae0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
2baf0 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  of P1..**.** Thi
2bb00 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20  s is a deferred 
2bb10 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
2bb20 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
2bb30 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
2bb40 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
2bb50 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
2bb60 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
2bb70 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
2bb80 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
2bb90 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a  O happens..**.**
2bba0 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72   P4 may be an ar
2bbb0 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20  ray of integers 
2bbc0 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41  (type P4_INTARRA
2bbd0 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a  Y) containing.**
2bbe0 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
2bbf0 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
2bc00 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20  e P3 table.  If 
2bc10 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29  array entry a(i)
2bc20 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  .** is non-zero,
2bc30 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2bc40 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d  lumn a(i)-1 from
2bc50 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a   cursor P3 is .*
2bc60 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  * equivalent to 
2bc70 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64  performing the d
2bc80 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64  eferred seek and
2bc90 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2bca0 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20  lumn i .** from 
2bcb0 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  P1.  This inform
2bcc0 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
2bcd0 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74  in P3 and used t
2bce0 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65  o redirect.** re
2bcf0 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f  ads against P3 o
2bd00 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20  ver to P1, thus 
2bd10 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e  possibly avoidin
2bd20 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a  g the need to.**
2bd30 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63   seek and read c
2bd40 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20  ursor P3..*/./* 
2bd50 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
2bd60 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2bd70 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
2bd80 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
2bd90 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2bda0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
2bdb0 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
2bdc0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
2bdd0 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
2bde0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
2bdf0 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
2be00 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
2be10 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
2be20 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
2be30 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
2be40 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
2be50 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
2be60 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
2be70 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
2be80 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
2be90 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b   OP_DeferredSeek
2bea0 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  :.case OP_IdxRow
2beb0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
2bec0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2bed0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
2bee0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2bef0 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  P1 index cursor 
2bf00 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2bf10 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20  *pTabCur;       
2bf20 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65   /* The P2 table
2bf30 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65   cursor (OP_Defe
2bf40 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a  rredSeek only) *
2bf50 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf70 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31  /* Rowid that P1
2bf80 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20   current points 
2bf90 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
2bfa0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2bfb0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2bfc0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2bfd0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2bfe0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2bff0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2c000 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2c010 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2c020 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2c030 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
2c040 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2c050 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2c060 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2c070 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2c080 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  t( !pC->nullRow 
2c090 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2c0a0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a  OP_IdxRowid );..
2c0b0 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69    /* The IdxRowi
2c0c0 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64  d and Seek opcod
2c0d0 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  es are combined 
2c0e0 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63  because of the c
2c0f0 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20  ommonality.  ** 
2c100 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
2c110 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e  rsorRestore() an
2c120 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  d sqlite3VdbeIdx
2c130 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63  Rowid(). */.  rc
2c140 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2c150 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
2c160 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
2c170 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2c180 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
2c190 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
2c1a0 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
2c1b0 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
2c1c0 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
2c1d0 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
2c1e0 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64  appens for an Id
2c1f0 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53  xRowid.  ** or S
2c200 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  eek opcode */.  
2c210 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
2c220 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
2c230 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c240 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
2c250 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
2c260 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
2c270 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2c280 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2c290 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2c2a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2c2b0 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
2c2c0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2c2d0 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
2c2e0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2c2f0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
2c300 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2c310 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2c320 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65  p->opcode==OP_De
2c330 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20  ferredSeek ){.  
2c340 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2c350 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
2c360 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  3<p->nCursor );.
2c370 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20        pTabCur = 
2c380 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
2c390 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
2c3a0 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20   pTabCur!=0 );. 
2c3b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2c3c0 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  bCur->eCurType==
2c3d0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2c3e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2c3f0 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  TabCur->uc.pCurs
2c400 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  or!=0 );.      a
2c410 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2c420 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20  isTable );.     
2c430 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f   pTabCur->nullRo
2c440 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61  w = 0;.      pTa
2c450 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  bCur->movetoTarg
2c460 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  et = rowid;.    
2c470 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72    pTabCur->defer
2c480 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
2c490 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2c4a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2c4b0 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34  ARRAY || pOp->p4
2c4c0 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  .ai==0 );.      
2c4d0 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70  pTabCur->aAltMap
2c4e0 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2c4f0 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41       pTabCur->pA
2c500 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20  ltCursor = pC;. 
2c510 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2c520 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2c530 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2c540 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
2c550 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2c560 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2c570 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2c580 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20  OP_IdxRowid );. 
2c590 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2c5a0 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70  mSetNull(&aMem[p
2c5b0 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20  Op->p2]);.  }.  
2c5c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2c5d0 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
2c5e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2c5f0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2c600 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2c610 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2c620 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2c630 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2c640 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2c650 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2c660 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2c670 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2c680 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2c690 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2c6a0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2c6b0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2c6c0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2c6d0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2c6e0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2c6f0 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2c700 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2c710 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2c720 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2c730 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2c740 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2c750 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2c760 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2c770 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2c780 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2c790 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
2c7a0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2c7b0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2c7c0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2c7d0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2c7e0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2c7f0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2c800 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2c810 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2c820 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2c830 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2c840 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2c850 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2c860 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2c870 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2c880 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2c890 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2c8a0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2c8b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2c8c0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2c8d0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
2c8e0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2c8f0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2c900 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2c910 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2c920 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2c930 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2c940 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
2c950 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2c960 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2c970 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2c980 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2c990 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2c9a0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2c9b0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2c9c0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2c9d0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2c9e0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2c9f0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2ca00 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2ca10 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2ca20 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2ca30 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2ca40 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2ca50 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2ca60 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2ca70 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2ca80 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
2ca90 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2caa0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
2cab0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2cac0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2cad0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2cae0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2caf0 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
2cb00 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2cb10 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2cb20 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2cb30 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2cb40 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2cb50 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2cb60 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2cb70 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2cb80 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2cb90 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2cba0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2cbb0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2cbc0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2cbd0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2cbe0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2cbf0 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2cc00 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2cc10 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2cc20 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2cc30 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
2cc40 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2cc50 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
2cc60 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
2cc70 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2cc80 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2cc90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2cca0 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
2ccb0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2ccc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
2ccd0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2cce0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2ccf0 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
2cd00 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2cd10 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
2cd20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2cd30 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2cd40 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2cd50 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2cd60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2cd70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2cd80 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2cd90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2cda0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2cdb0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2cdc0 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
2cdd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2cde0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2cdf0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2ce00 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2ce10 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
2ce20 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2ce30 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2ce40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2ce50 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
2ce60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2ce70 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2ce80 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
2ce90 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2cea0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2ceb0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2cec0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2ced0 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
2cee0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2cef0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2cf00 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2cf10 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2cf20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2cf30 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2cf40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2cf50 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2cf60 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2cf70 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2cf80 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2cf90 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
2cfa0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2cfb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2cfc0 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
2cfd0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
2cfe0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
2cff0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
2d000 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
2d010 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
2d020 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2d030 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2d040 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2d050 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2d060 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
2d070 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
2d080 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
2d090 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
2d0a0 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
2d0b0 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
2d0c0 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
2d0d0 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
2d0e0 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2d0f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2d100 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2d110 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
2d120 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
2d130 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
2d140 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2d150 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2d160 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2d170 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2d180 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
2d190 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
2d1a0 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
2d1b0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2d1c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2d1d0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
2d1e0 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  >0 ) goto jump_t
2d1f0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2d200 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
2d210 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
2d220 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2d230 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
2d240 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2d250 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2d260 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2d270 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
2d280 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
2d290 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
2d2a0 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
2d2b0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2d2c0 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
2d2d0 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
2d2e0 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
2d2f0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
2d300 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2d310 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
2d320 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2d330 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
2d340 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
2d350 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
2d360 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
2d370 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
2d380 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
2d390 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
2d3a0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
2d3b0 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
2d3c0 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
2d3d0 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
2d3e0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
2d3f0 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
2d400 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
2d410 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
2d420 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
2d430 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
2d440 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
2d450 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
2d460 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
2d470 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
2d480 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
2d490 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2d4a0 20 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65   If no page move
2d4b0 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
2d4c0 64 20 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a  d (because the.*
2d4d0 2a 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  * table being dr
2d4e0 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
2d4f0 79 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69  y the last one i
2d500 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20  n the database) 
2d510 74 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20  then a .** zero 
2d520 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2d530 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 41 55  ister P2.  If AU
2d540 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
2d550 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
2d560 20 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69   .** is stored i
2d570 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2d580 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2d590 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
2d5a0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
2d5b0 79 20 61 63 74 69 76 65 20 72 65 61 64 65 72 20  y active reader 
2d5c0 56 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69  VMs when.** it i
2d5d0 73 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20  s invoked. This 
2d5e0 69 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64  is done to avoid
2d5f0 20 74 68 65 20 64 69 66 66 69 63 75 6c 74 79 20   the difficulty 
2d600 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2d610 0a 2a 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69  .** updating exi
2d620 73 74 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68  sting cursors wh
2d630 65 6e 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69  en a root page i
2d640 73 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55  s moved in an AU
2d650 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74  TOVACUUM .** dat
2d660 61 62 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f  abase. This erro
2d670 72 20 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e  r is thrown even
2d680 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2d690 20 69 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56   is not an AUTOV
2d6a0 41 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20  ACUUM .** db in 
2d6b0 6f 72 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69  order to avoid i
2d6c0 6e 74 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e  ntroducing an in
2d6d0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65  compatibility be
2d6e0 74 77 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d  tween autovacuum
2d6f0 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74   .** and non-aut
2d700 6f 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a  ovacuum modes..*
2d710 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2d720 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
2d730 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
2d740 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
2d750 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44  iMoved;.  int iD
2d760 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  b;..  assert( p-
2d770 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2d780 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d790 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  1>1 );.  pOut = 
2d7a0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2d7b0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
2d7c0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2d7d0 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  ;.  if( db->nVdb
2d7e0 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65  eRead > db->nVDe
2d7f0 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72  stroy+1 ){.    r
2d800 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
2d810 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
2d820 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
2d830 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
2d840 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2d850 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20   }else{.    iDb 
2d860 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61  = pOp->p3;.    a
2d870 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2d880 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2d890 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76  iDb) );.    iMov
2d8a0 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
2d8b0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
2d8c0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2d8d0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2d8e0 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
2d8f0 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
2d900 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
2d910 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
2d920 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2d930 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
2d940 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20  u.i = iMoved;.  
2d950 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2d960 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d970 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  or;.#ifndef SQLI
2d980 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2d990 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65  UM.    if( iMove
2d9a0 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  d!=0 ){.      sq
2d9b0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2d9c0 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76  ed(db, iDb, iMov
2d9d0 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  ed, pOp->p1);.  
2d9e0 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65      /* All OP_De
2d9f0 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
2da00 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61   occur on the sa
2da10 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20  me btree */.    
2da20 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53    assert( resetS
2da30 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20  chemaOnFault==0 
2da40 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  || resetSchemaOn
2da50 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a  Fault==iDb+1 );.
2da60 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
2da70 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31  aOnFault = iDb+1
2da80 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
2da90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2daa0 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
2dab0 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
2dac0 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2dad0 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
2dae0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
2daf0 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
2db00 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
2db10 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
2db20 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
2db30 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
2db40 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
2db50 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2db60 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
2db70 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2db80 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
2db90 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
2dba0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2dbb0 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
2dbc0 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
2dbd0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2dbe0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2dbf0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2dc00 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2dc10 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2dc20 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2dc30 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2dc40 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2dc50 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
2dc60 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
2dc70 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2dc80 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
2dc90 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
2dca0 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
2dcb0 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
2dcc0 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
2dcd0 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
2dce0 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
2dcf0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2dd00 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2dd10 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2dd20 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
2dd30 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
2dd40 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
2dd50 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
2dd60 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
2dd70 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
2dd80 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2dd90 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2dda0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2ddb0 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
2ddc0 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
2ddd0 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
2dde0 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
2ddf0 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65  nge;. .  nChange
2de00 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2de10 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2de20 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2de30 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2de40 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b  ask, pOp->p2) );
2de50 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2de60 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
2de70 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
2de80 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
2de90 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
2dea0 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
2deb0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
2dec0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
2ded0 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
2dee0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
2def0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
2df00 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
2df10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
2df20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
2df30 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
2df40 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
2df50 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75   aMem[pOp->p3].u
2df60 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  .i += nChange;. 
2df70 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
2df80 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2df90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2dfa0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2dfb0 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20  de: ResetSorter 
2dfc0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2dfd0 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
2dfe0 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70  ents from the ep
2dff0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72  hemeral table or
2e000 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20   sorter.** that 
2e010 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f  is open on curso
2e020 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P1..**.** This
2e030 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72   opcode only wor
2e040 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75  ks for cursors u
2e050 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20  sed for sorting 
2e060 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69  and.** opened wi
2e070 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  th OP_OpenEpheme
2e080 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  ral or OP_Sorter
2e090 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Open..*/.case OP
2e0a0 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a  _ResetSorter: {.
2e0b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2e0c0 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ;. .  assert( pO
2e0d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2e0e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2e0f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2e100 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2e110 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2e120 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
2e130 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
2e140 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
2e150 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74  db, pC->uc.pSort
2e160 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  er);.  }else{.  
2e170 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2e180 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2e190 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73  BTREE );.    ass
2e1a0 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d  ert( pC->isEphem
2e1b0 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d  eral );.    rc =
2e1c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2e1d0 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28  arTableOfCursor(
2e1e0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2e1f0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2e200 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2e210 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
2e220 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2e230 3a 20 43 72 65 61 74 65 42 74 72 65 65 20 50 31  : CreateBtree P1
2e240 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2e250 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2e260 6f 74 20 69 44 62 3d 50 31 20 66 6c 61 67 73 3d  ot iDb=P1 flags=
2e270 50 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P3.**.** Allocat
2e280 65 20 61 20 6e 65 77 20 62 2d 74 72 65 65 20 69  e a new b-tree i
2e290 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2e2a0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2e2b0 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54  0 or in the.** T
2e2c0 45 4d 50 20 64 61 74 61 62 61 73 65 20 66 69 6c  EMP database fil
2e2d0 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
2e2e0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
2e2f0 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
2e300 2e 20 20 54 68 65 20 50 33 20 61 72 67 75 6d 65  .  The P3 argume
2e310 6e 74 20 6d 75 73 74 20 62 65 20 31 20 28 42 54  nt must be 1 (BT
2e320 52 45 45 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20  REE_INTKEY) for 
2e330 61 20 72 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a  a rowid table.**
2e340 20 69 74 20 6d 75 73 74 20 62 65 20 32 20 28 42   it must be 2 (B
2e350 54 52 45 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f  TREE_BLOBKEY) fo
2e360 72 20 61 20 69 6e 64 65 78 20 6f 72 20 57 49 54  r a index or WIT
2e370 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
2e380 2e 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  ..** The root pa
2e390 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
2e3a0 20 6e 65 77 20 62 2d 74 72 65 65 20 69 73 20 73   new b-tree is s
2e3b0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2e3c0 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
2e3d0 5f 43 72 65 61 74 65 42 74 72 65 65 3a 20 7b 20  _CreateBtree: { 
2e3e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2e3f0 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
2e400 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f    Db *pDb;..  pO
2e410 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2e420 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2e430 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  gno = 0;.  asser
2e440 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45  t( pOp->p3==BTRE
2e450 45 5f 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d  E_INTKEY || pOp-
2e460 3e 70 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b  >p3==BTREE_BLOBK
2e470 45 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EY );.  assert( 
2e480 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2e490 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2e4a0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2e4b0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2e4c0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
2e4d0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2e4e0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
2e4f0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
2e500 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2e510 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
2e520 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2e530 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
2e540 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
2e550 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20  pOp->p3);.  if( 
2e560 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2e570 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2e580 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
2e590 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2e5a0 20 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63   Opcode: SqlExec
2e5b0 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
2e5c0 2a 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74  * Run the SQL st
2e5d0 61 74 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65  atement or state
2e5e0 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
2e5f0 69 6e 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  in the P4 string
2e600 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c  ..*/.case OP_Sql
2e610 45 78 65 63 3a 20 7b 0a 20 20 64 62 2d 3e 6e 53  Exec: {.  db->nS
2e620 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d  qlExec++;.  rc =
2e630 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
2e640 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20  , pOp->p4.z, 0, 
2e650 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71  0, 0);.  db->nSq
2e660 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72  lExec--;.  if( r
2e670 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2e680 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2e690 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2e6a0 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20  de: ParseSchema 
2e6b0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2e6c0 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
2e6d0 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
2e6e0 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  m the SQLITE_MAS
2e6f0 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74  TER table of dat
2e700 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74  abase P1.** that
2e710 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45   match the WHERE
2e720 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a   clause P4. .**.
2e730 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2e740 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
2e750 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
2e760 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
2e770 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
2e780 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
2e790 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
2e7a0 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
2e7b0 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
2e7c0 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
2e7d0 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  : {.  int iDb;. 
2e7e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
2e7f0 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53  ster;.  char *zS
2e800 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69  ql;.  InitData i
2e810 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41  nitData;..  /* A
2e820 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ny prepared stat
2e830 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b  ement that invok
2e840 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  es this opcode w
2e850 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73  ill hold mutexes
2e860 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62  .  ** on every b
2e870 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61  tree.  This is a
2e880 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f   prerequisite fo
2e890 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a  r invoking .  **
2e8a0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
2e8b0 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66  back()..  */.#if
2e8c0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2e8d0 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44  .  for(iDb=0; iD
2e8e0 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
2e8f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  ){.    assert( i
2e900 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33  Db==1 || sqlite3
2e910 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
2e920 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
2e930 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ) );.  }.#endif.
2e940 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
2e950 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
2e960 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
2e970 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
2e980 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
2e990 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
2e9a0 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55  oaded) );.  /* U
2e9b0 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64  sed to be a cond
2e9c0 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20  itional */ {.   
2e9d0 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45   zMaster = MASTE
2e9e0 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74  R_NAME;.    init
2e9f0 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
2ea00 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
2ea10 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e   pOp->p1;.    in
2ea20 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
2ea30 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  = &p->zErrMsg;. 
2ea40 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
2ea50 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
2ea60 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
2ea70 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
2ea80 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
2ea90 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
2eaa0 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62  owid",.       db
2eab0 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e  ->aDb[iDb].zDbSN
2eac0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
2ead0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
2eae0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
2eaf0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
2eb00 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d  OMEM_BKPT;.    }
2eb10 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
2eb20 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  rt( db->init.bus
2eb30 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  y==0 );.      db
2eb40 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
2eb50 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e  .      initData.
2eb60 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2eb70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64        assert( !d
2eb80 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2eb90 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
2eba0 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
2ebb0 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
2ebc0 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
2ebd0 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ata, 0);.      i
2ebe0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2ebf0 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61   ) rc = initData
2ec00 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  .rc;.      sqlit
2ec10 65 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a  e3DbFreeNN(db, z
2ec20 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
2ec30 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
2ec40 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
2ec50 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2ec60 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
2ec70 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
2ec80 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
2ec90 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
2eca0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2ecb0 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61      }.    goto a
2ecc0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2ecd0 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  r;.  }.  break; 
2ece0 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
2ecf0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
2ed00 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
2ed10 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
2ed20 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
2ed30 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
2ed40 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
2ed50 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
2ed60 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
2ed70 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2ed80 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
2ed90 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
2eda0 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
2edb0 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
2edc0 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
2edd0 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
2ede0 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
2edf0 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
2ee00 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
2ee10 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
2ee20 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2ee30 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2ee40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
2ee50 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
2ee60 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63  p->p1);.  if( rc
2ee70 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2ee80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2ee90 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
2eea0 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
2eeb0 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2eec0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2eed0 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a  DropTable P1 * *
2eee0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2eef0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2ef00 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2ef10 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2ef20 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2ef30 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20   table named P4 
2ef40 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2ef50 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2ef60 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a  after a table.**
2ef70 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2ef80 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2ef90 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2efa0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2efb0 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2efc0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2efd0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2efe0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2eff0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2f000 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2f010 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
2f020 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2f030 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
2f040 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2f050 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2f060 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
2f070 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
2f080 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2f090 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2f0a0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2f0b0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2f0c0 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
2f0d0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2f0e0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2f0f0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2f100 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
2f110 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2f120 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2f130 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69  roy opcode).** i
2f140 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2f150 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2f160 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2f170 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2f180 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2f190 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2f1a0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
2f1b0 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
2f1c0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
2f1d0 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
2f1e0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2f1f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2f200 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
2f210 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2f220 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2f230 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2f240 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2f250 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2f260 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
2f270 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2f280 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2f290 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
2f2a0 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
2f2b0 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2f2c0 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2f2d0 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
2f2e0 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
2f2f0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2f300 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2f310 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2f320 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2f330 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2f340 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
2f350 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
2f360 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2f370 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
2f380 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2f390 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2f3a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2f3b0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2f3c0 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
2f3d0 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
2f3e0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  3 P4 P5.**.** Do
2f3f0 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
2f400 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
2f410 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
2f420 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
2f430 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
2f440 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
2f450 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
2f460 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
2f470 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
2f480 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
2f490 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
2f4a0 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
2f4b0 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
2f4c0 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74 68  ains one less th
2f4d0 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  an the maximum n
2f4e0 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64  umber of allowed
2f4f0 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d   errors..** At m
2f500 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f  ost reg(P3) erro
2f510 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72  rs will be repor
2f520 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ted..** In other
2f530 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c   words, the anal
2f540 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f  ysis stops as so
2f550 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72  on as reg(P1) er
2f560 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65  rors are .** see
2f570 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75  n.  Reg(P1) is u
2f580 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
2f590 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  number of errors
2f5a0 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a   remaining..**.*
2f5b0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
2f5c0 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74  numbers of all t
2f5d0 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
2f5e0 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65  abase are intege
2f5f0 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  rs.** stored in 
2f600 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75  P4_INTARRAY argu
2f610 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ment..**.** If P
2f620 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
2f630 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
2f640 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
2f650 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
2f660 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
2f670 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2f680 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2f690 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
2f6a0 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
2f6b0 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
2f6c0 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
2f6d0 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
2f6e0 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
2f6f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
2f700 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
2f710 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
2f720 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
2f730 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
2f740 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
2f750 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
2f760 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
2f770 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
2f780 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2f790 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74  of errors report
2f7a0 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b  ed */.  char *z;
2f7b0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
2f7c0 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70  of the error rep
2f7d0 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e  ort */.  Mem *pn
2f7e0 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69  Err;     /* Regi
2f7f0 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61  ster keeping tra
2f800 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  ck of errors rem
2f810 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73  aining */..  ass
2f820 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
2f830 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70  r );.  nRoot = p
2f840 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20  Op->p2;.  aRoot 
2f850 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
2f860 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
2f870 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f  );.  assert( aRo
2f880 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a  ot[0]==nRoot );.
2f890 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f8a0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2f8b0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
2f8c0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e  nCursor) );.  pn
2f8d0 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Err = &aMem[pOp-
2f8e0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
2f8f0 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
2f900 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2f910 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
2f920 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
2f930 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
2f940 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
2f950 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2f960 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
2f970 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2f980 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2f990 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2f9a0 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71  >p5) );.  z = sq
2f9b0 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
2f9c0 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
2f9d0 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26  [pOp->p5].pBt, &
2f9e0 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c  aRoot[1], nRoot,
2f9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa10 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e    (int)pnErr->u.
2fa20 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  i+1, &nErr);.  s
2fa30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2fa40 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66  Null(pIn1);.  if
2fa50 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20  ( nErr==0 ){.   
2fa60 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b   assert( z==0 );
2fa70 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d  .  }else if( z==
2fa80 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  0 ){.    goto no
2fa90 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _mem;.  }else{. 
2faa0 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d     pnErr->u.i -=
2fab0 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c   nErr-1;.    sql
2fac0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
2fad0 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53  r(pIn1, z, -1, S
2fae0 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69  QLITE_UTF8, sqli
2faf0 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20  te3_free);.  }. 
2fb00 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2fb10 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71  SIZE(pIn1);.  sq
2fb20 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2fb30 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e  ncoding(pIn1, en
2fb40 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2fb50 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2fb60 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2fb70 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a  ITY_CHECK */../*
2fb80 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41   Opcode: RowSetA
2fb90 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  dd P1 P2 * * *.*
2fba0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73  * Synopsis: rows
2fbb0 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
2fbc0 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
2fbd0 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
2fbe0 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
2fbf0 69 6e 74 6f 20 61 20 52 6f 77 53 65 74 20 6f 62  into a RowSet ob
2fc00 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ject.** held in 
2fc10 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2fc20 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
2fc30 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
2fc40 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
2fc50 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2fc60 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
2fc70 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
2fc80 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2fc90 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
2fca0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2fcb0 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
2fcc0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2fcd0 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
2fce0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2fcf0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2fd00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2fd10 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2fd20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2fd30 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2fd40 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2fd50 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
2fd60 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2fd70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2fd80 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
2fd90 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2fda0 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
2fdb0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2fdc0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f  nopsis: r[P3]=ro
2fdd0 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45  wset(P1).**.** E
2fde0 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
2fdf0 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  est value from t
2fe00 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
2fe10 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75   in P1.** and pu
2fe20 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
2fe30 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
2fe40 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74 20  * Or, if RowSet 
2fe50 6f 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e 69  object P1 is ini
2fe60 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
2fe70 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
2fe80 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
2fe90 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
2fea0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2feb0 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
2fec0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74  * jump, in1, out
2fed0 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a  3 */.  i64 val;.
2fee0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2fef0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
2ff00 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2ff10 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20  EM_RowSet)==0 . 
2ff20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53    || sqlite3RowS
2ff30 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70  etNext(pIn1->u.p
2ff40 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30  RowSet, &val)==0
2ff50 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  .  ){.    /* The
2ff60 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69   boolean index i
2ff70 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73  s empty */.    s
2ff80 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2ff90 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20  Null(pIn1);.    
2ffa0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2ffb0 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  1,2);.    goto j
2ffc0 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
2ffd0 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2ffe0 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2fff0 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
30000 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
30010 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65  ndex */.    Vdbe
30020 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29  BranchTaken(0,2)
30030 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
30040 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
30050 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
30060 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  );.  }.  goto ch
30070 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
30080 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
30090 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
300a0 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
300b0 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e  sis: if r[P3] in
300c0 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f   rowset(P1) goto
300d0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
300e0 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
300f0 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
30100 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
30110 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
30120 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
30130 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
30140 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
30150 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
30160 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
30170 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
30180 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
30190 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
301a0 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
301b0 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
301c0 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
301d0 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
301e0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
301f0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
30200 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
30210 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
30220 73 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73  sets of integers
30230 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64  .** are inserted
30240 20 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61   in distinct pha
30250 73 65 73 2c 20 77 68 69 63 68 20 65 61 63 68 20  ses, which each 
30260 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
30270 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45  duplicates..** E
30280 61 63 68 20 73 65 74 20 69 73 20 69 64 65 6e 74  ach set is ident
30290 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75  ified by a uniqu
302a0 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20  e P4 value. The 
302b0 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73  first set.** mus
302c0 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68  t have P4==0, th
302d0 65 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74  e final set must
302e0 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e   have P4==-1, an
302f0 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20  d for all other 
30300 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76  sets.** must hav
30310 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  e P4>0..**.** Th
30320 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
30330 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
30340 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
30350 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
30360 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f  .** the RowSet o
30370 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
30380 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
30390 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
303a0 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
303b0 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
303c0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
303d0 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
303e0 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
303f0 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
30400 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
30410 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
30420 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
30430 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
30440 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
30450 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
30460 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
30470 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
30480 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
30490 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
304a0 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
304b0 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
304c0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
304d0 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
304e0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
304f0 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
30500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
30510 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
30520 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
30530 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
30540 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
30550 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
30560 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
30570 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
30580 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
30590 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
305a0 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
305b0 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
305c0 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
305d0 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
305e0 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
305f0 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
30600 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
30610 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
30620 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
30630 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
30640 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
30650 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
30660 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
30670 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
30680 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
30690 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
306a0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
306b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
306c0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
306d0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
306e0 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
306f0 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
30700 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
30710 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
30720 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
30730 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69   iSet, pIn3->u.i
30740 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
30750 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30  hTaken(exists!=0
30760 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  ,2);.    if( exi
30770 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
30780 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28  to_p2;.  }.  if(
30790 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20   iSet>=0 ){.    
307a0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
307b0 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ert(pIn1->u.pRow
307c0 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
307d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
307e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
307f0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f  _OMIT_TRIGGER../
30800 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61  * Opcode: Progra
30810 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  m P1 P2 P3 P4 P5
30820 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
30830 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
30840 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20  am passed as P4 
30850 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47  (type P4_SUBPROG
30860 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  RAM). .**.** P1 
30870 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
30880 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f  ress of the memo
30890 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e  ry cell that con
308a0 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20  tains the first 
308b0 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
308c0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76  in an array of v
308d0 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72  alues used as ar
308e0 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73  guments to the s
308f0 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a  ub-program. P2 .
30900 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ** contains the 
30910 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
30920 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72  to if the sub-pr
30930 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20  ogram throws an 
30940 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70  IGNORE .** excep
30950 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52  tion using the R
30960 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e  AISE() function.
30970 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   Register P3 con
30980 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
30990 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72  s .** of a memor
309a0 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28  y cell in this (
309b0 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74  the parent) VM t
309c0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  hat is used to a
309d0 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20  llocate the .** 
309e0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
309f0 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20  by the sub-vdbe 
30a00 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a  at runtime..**.*
30a10 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
30a20 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74  r to the VM cont
30a30 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
30a40 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  er program..**.*
30a50 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
30a60 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ero, then recurs
30a70 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f  ive program invo
30a80 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65  cation is enable
30a90 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  d..*/.case OP_Pr
30aa0 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
30ab0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
30ac0 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
30ad0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
30ae0 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
30af0 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
30b00 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
30b10 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
30b20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
30b30 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
30b40 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
30b50 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
30b60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
30b70 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
30b80 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
30b90 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
30ba0 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
30bb0 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
30bc0 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
30bd0 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
30be0 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
30bf0 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
30c00 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
30c10 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
30c20 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
30c30 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
30c40 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
30c50 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
30c60 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
30c70 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
30c80 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
30c90 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
30ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
30cb0 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
30cc0 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
30cd0 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
30ce0 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
30cf0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
30d00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
30d10 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
30d20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
30d30 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
30d40 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
30d50 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
30d60 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
30d70 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
30d80 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
30d90 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
30da0 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
30db0 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
30dc0 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
30dd0 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
30de0 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
30df0 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
30e00 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
30e10 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
30e20 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
30e30 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
30e40 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
30e50 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
30e60 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
30e70 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
30e80 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
30e90 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
30ea0 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
30eb0 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
30ec0 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
30ed0 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
30ee0 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
30ef0 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
30f00 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
30f10 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
30f20 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
30f30 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
30f40 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
30f50 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
30f60 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
30f70 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
30f80 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
30f90 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
30fa0 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
30fb0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
30fc0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
30fd0 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
30fe0 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
30ff0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
31000 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
31010 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
31020 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
31030 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
31040 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
31050 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
31060 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
31070 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
31080 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
31090 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
310a0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
310b0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
310c0 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  p, "too many lev
310d0 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
310e0 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
310f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
31100 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
31110 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20  /* Register pRt 
31120 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
31130 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
31140 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65  ired to save the
31150 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74   state.  ** of t
31160 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72  he current progr
31170 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f  am, and the memo
31180 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72  ry required at r
31190 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74  untime to execut
311a0 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67  e.  ** the trigg
311b0 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74  er program. If t
311c0 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20  his trigger has 
311d0 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72  been fired befor
311e0 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a  e, then pRt .  *
311f0 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c  * is already all
31200 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73  ocated. Otherwis
31210 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
31220 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20  itialized.  */. 
31230 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73   if( (pRt->flags
31240 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29  &MEM_Frame)==0 )
31250 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67  {.    /* SubProg
31260 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20  ram.nMem is set 
31270 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
31280 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
31290 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a  ed by the .    *
312a0 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64  * program stored
312b0 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61   in SubProgram.a
312c0 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74  Op. As well as t
312d0 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79  hese, one memory
312e0 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20  .    ** cell is 
312f0 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63  required for eac
31300 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  h cursor used by
31310 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65   the program. Se
31320 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76  t local.    ** v
31330 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e  ariable nMem (an
31340 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61  d later, VdbeFra
31350 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f  me.nChildMem) to
31360 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20   this value..   
31370 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70   */.    nMem = p
31380 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20  Program->nMem + 
31390 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
313a0 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d      assert( nMem
313b0 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50  >0 );.    if( pP
313c0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20  rogram->nCsr==0 
313d0 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42  ) nMem++;.    nB
313e0 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a  yte = ROUND8(siz
313f0 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a  eof(VdbeFrame)).
31400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
31410 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65  nMem * sizeof(Me
31420 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m).             
31430 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
31440 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43  r * sizeof(VdbeC
31450 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20  ursor*).        
31460 20 20 20 20 20 20 2b 20 28 70 50 72 6f 67 72 61        + (pProgra
31470 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20  m->nOp + 7)/8;. 
31480 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69     pFrame = sqli
31490 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
314a0 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
314b0 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20  if( !pFrame ){. 
314c0 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
314d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
314e0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
314f0 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d  e(pRt);.    pRt-
31500 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61  >flags = MEM_Fra
31510 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70  me;.    pRt->u.p
31520 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
31530 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d  .    pFrame->v =
31540 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e   p;.    pFrame->
31550 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d  nChildMem = nMem
31560 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
31570 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72  hildCsr = pProgr
31580 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46  am->nCsr;.    pF
31590 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29  rame->pc = (int)
315a0 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
315b0 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20   pFrame->aMem = 
315c0 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->aMem;.    pFr
315d0 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e  ame->nMem = p->n
315e0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
315f0 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73  >apCsr = p->apCs
31600 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  r;.    pFrame->n
31610 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72  Cursor = p->nCur
31620 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  sor;.    pFrame-
31630 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20  >aOp = p->aOp;. 
31640 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d     pFrame->nOp =
31650 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72   p->nOp;.    pFr
31660 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72  ame->token = pPr
31670 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69  ogram->token;.#i
31680 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
31690 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
316a0 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  US.    pFrame->a
316b0 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65  nExec = p->anExe
316c0 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70  c;.#endif..    p
316d0 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
316e0 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
316f0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
31700 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
31710 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
31720 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
31730 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
31740 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
31750 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20  Undefined;.     
31760 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
31770 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
31780 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d     pFrame = pRt-
31790 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61  >u.pFrame;.    a
317a0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
317b0 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
317c0 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
317d0 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20  hildMem .       
317e0 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e   || (pProgram->n
317f0 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72  Csr==0 && pProgr
31800 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61  am->nMem+1==pFra
31810 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29  me->nChildMem) )
31820 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
31830 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
31840 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
31850 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
31860 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d  int)(pOp - aOp)=
31870 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20  =pFrame->pc );. 
31880 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b   }..  p->nFrame+
31890 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61  +;.  pFrame->pPa
318a0 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rent = p->pFrame
318b0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74  ;.  pFrame->last
318c0 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
318d0 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d  Rowid;.  pFrame-
318e0 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43  >nChange = p->nC
318f0 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d  hange;.  pFrame-
31900 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e  >nDbChange = p->
31910 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61  db->nChange;.  a
31920 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70  ssert( pFrame->p
31930 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20  AuxData==0 );.  
31940 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61  pFrame->pAuxData
31950 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a   = p->pAuxData;.
31960 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20    p->pAuxData = 
31970 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  0;.  p->nChange 
31980 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
31990 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
319a0 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64  aMem = aMem = Vd
319b0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
319c0 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20  e);.  p->nMem = 
319d0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
319e0 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20  m;.  p->nCursor 
319f0 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e  = (u16)pFrame->n
31a00 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61  ChildCsr;.  p->a
31a10 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73  pCsr = (VdbeCurs
31a20 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e  or **)&aMem[p->n
31a30 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  Mem];.  pFrame->
31a40 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d  aOnce = (u8*)&p-
31a50 3e 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d  >apCsr[pProgram-
31a60 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74  >nCsr];.  memset
31a70 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20  (pFrame->aOnce, 
31a80 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  0, (pProgram->nO
31a90 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e  p + 7)/8);.  p->
31aa0 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
31ab0 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
31ac0 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
31ad0 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nOp;.#ifdef SQLI
31ae0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
31af0 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61  CANSTATUS.  p->a
31b00 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69  nExec = 0;.#endi
31b10 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d  f.  pOp = &aOp[-
31b20 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  1];..  break;.}.
31b30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61  ./* Opcode: Para
31b40 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
31b50 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
31b60 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65  is only ever pre
31b70 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67  sent in sub-prog
31b80 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20  rams called via 
31b90 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72  the .** OP_Progr
31ba0 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  am instruction. 
31bb0 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72  Copy a value cur
31bc0 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e  rently stored in
31bd0 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65   a memory .** ce
31be0 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  ll of the callin
31bf0 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65  g (parent) frame
31c00 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74   to cell P2 in t
31c10 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
31c20 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70  s .** address sp
31c30 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65  ace. This is use
31c40 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
31c50 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20  grams to access 
31c60 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e  the new.* .** an
31c70 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a  d old.* values..
31c80 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73  **.** The addres
31c90 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e  s of the cell in
31ca0 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
31cb0 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
31cc0 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65  by adding.** the
31cd0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
31ce0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
31cf0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
31d00 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
31d10 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  .** calling OP_P
31d20 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
31d30 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  on..*/.case OP_P
31d40 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  aram: {         
31d50 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
31d60 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
31d70 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
31d80 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
31d90 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
31da0 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
31db0 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
31dc0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
31dd0 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
31de0 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
31df0 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
31e00 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
31e10 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
31e20 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
31e30 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
31e40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31e50 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
31e60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31e70 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
31e80 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
31e90 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
31ea0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
31eb0 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
31ec0 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
31ed0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
31ee0 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
31ef0 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
31f00 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
31f10 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
31f20 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
31f30 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
31f40 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
31f50 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
31f60 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
31f70 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
31f80 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
31f90 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
31fa0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
31fb0 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
31fc0 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
31fd0 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
31fe0 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
31ff0 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
32000 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
32010 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
32020 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
32030 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
32040 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
32050 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
32060 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
32070 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
32080 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
32090 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
320a0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
320b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
320c0 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
320d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
320e0 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
320f0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
32100 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
32110 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
32120 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
32130 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
32140 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
32150 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
32160 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
32170 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
32180 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
32190 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
321a0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
321b0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
321c0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
321d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
321e0 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
321f0 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
32200 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
32210 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
32220 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
32230 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
32240 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
32250 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
32260 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
32270 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
32280 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
32290 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
322a0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
322b0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
322c0 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
322d0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
322e0 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
322f0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
32300 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  en(db->nDeferred
32310 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
32320 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
32330 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
32340 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
32350 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
32360 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
32370 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
32380 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
32390 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
323a0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
323b0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
323c0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
323d0 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e  2);.    if( p->n
323e0 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
323f0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
32400 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
32410 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
32420 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
32430 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
32440 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
32450 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
32460 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
32470 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
32480 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
32490 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
324a0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
324b0 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
324c0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
324d0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
324e0 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
324f0 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
32500 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
32510 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
32520 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
32530 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
32540 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
32550 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
32560 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
32570 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
32580 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
32590 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
325a0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
325b0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
325c0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
325d0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
325e0 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
325f0 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
32600 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
32610 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
32620 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
32630 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
32640 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
32650 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
32660 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
32670 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
32680 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
32690 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
326a0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
326b0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
326c0 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
326d0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
326e0 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
326f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
32700 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
32710 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
32720 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
32730 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
32740 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
32750 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
32760 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
32770 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
32780 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
32790 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
327a0 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
327b0 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
327c0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
327d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
327e0 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
327f0 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
32800 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
32810 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
32820 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50  >0 then r[P1]-=P
32830 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3, goto P2.**.**
32840 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
32850 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
32860 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20  eger..** If the 
32870 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
32880 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
32890 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50  ater, subtract P
328a0 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61  3 from the.** va
328b0 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75  lue in P1 and ju
328c0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
328d0 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76  If the initial v
328e0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
328f0 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
32900 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20   1, then the.** 
32910 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67  value is unchang
32920 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70  ed and control p
32930 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f  asses through to
32940 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
32950 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
32960 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
32970 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
32980 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
32990 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
329a0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
329b0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
329c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70  beBranchTaken( p
329d0 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a  In1->u.i>0, 2);.
329e0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
329f0 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  0 ){.    pIn1->u
32a00 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i -= pOp->p3;. 
32a10 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
32a20 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
32a30 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
32a40 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32  ffsetLimit P1 P2
32a50 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
32a60 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
32a70 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  then r[P2]=r[P1]
32a80 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c  +max(0,r[P3]) el
32a90 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a  se r[P2]=(-1).**
32aa0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
32ab0 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f  performs a commo
32ac0 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61  nly used computa
32ad0 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
32ae0 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e  with.** LIMIT an
32af0 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73  d OFFSET process
32b00 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74  .  r[P1] holds t
32b10 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72  he limit counter
32b20 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64  .  r[P3].** hold
32b30 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75  s the offset cou
32b40 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64  nter.  The opcod
32b50 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63  e computes the c
32b60 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a  ombined value.**
32b70 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e   of the LIMIT an
32b80 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f  d OFFSET and sto
32b90 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20 69  res that value i
32ba0 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b  n r[P2].  The r[
32bb0 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d  P2].** value com
32bc0 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f 74  puted is the tot
32bd0 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  al number of row
32be0 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64  s that will need
32bf0 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65   to be.** visite
32c00 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  d in order to co
32c10 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72 79  mplete the query
32c20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d  ..**.** If r[P3]
32c30 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61   is zero or nega
32c40 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73  tive, that means
32c50 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46   there is no OFF
32c60 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d  SET.** and r[P2]
32c70 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
32c80 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c  e value of the L
32c90 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a  IMIT, r[P1]..**.
32ca0 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a  ** if r[P1] is z
32cb0 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
32cc0 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
32cd0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a  e is no LIMIT.**
32ce0 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65   and r[P2] is se
32cf0 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20  t to -1. .**.** 
32d00 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d  Otherwise, r[P2]
32d10 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 73   is set to the s
32d20 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20  um of r[P1] and 
32d30 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f  r[P3]..*/.case O
32d40 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b  P_OffsetLimit: {
32d50 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32      /* in1, out2
32d60 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78  , in3 */.  i64 x
32d70 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
32d80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
32d90 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
32da0 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  3];.  pOut = out
32db0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
32dc0 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
32dd0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
32de0 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
32df0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
32e00 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d  MEM_Int );.  x =
32e10 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66   pIn1->u.i;.  if
32e20 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65  ( x<=0 || sqlite
32e30 33 41 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49  3AddInt64(&x, pI
32e40 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e  n3->u.i>0?pIn3->
32e50 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a  u.i:0) ){.    /*
32e60 20 49 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73   If the LIMIT is
32e70 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
32e80 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f  ual to zero, loo
32e90 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
32ea0 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d  .    ** is docum
32eb0 65 6e 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f  ented.  But also
32ec0 2c 20 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f  , if the LIMIT+O
32ed0 46 46 53 45 54 20 65 78 63 65 65 64 73 20 32 5e  FFSET exceeds 2^
32ee0 36 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61  63 then.    ** a
32ef0 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72  lso loop forever
32f00 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63  .  This is undoc
32f10 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63  umented.  In fac
32f20 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67  t, one could arg
32f30 75 65 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ue.    ** that t
32f40 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74  he loop should t
32f50 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61  erminate.  But a
32f60 73 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f  ssuming 1 billio
32f70 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20  n iterations.   
32f80 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28   ** per second (
32f90 66 61 72 20 65 78 63 65 65 64 69 6e 67 20 74 68  far exceeding th
32fa0 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f  e capabilities o
32fb0 66 20 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61  f any current ha
32fc0 72 64 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69  rdware).    ** i
32fd0 74 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61  t would take nea
32fe0 72 6c 79 20 33 30 30 20 79 65 61 72 73 20 74 6f  rly 300 years to
32ff0 20 61 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20   actually reach 
33000 74 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20  the limit.  So. 
33010 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f     ** looping fo
33020 72 65 76 65 72 20 69 73 20 61 20 72 65 61 73 6f  rever is a reaso
33030 6e 61 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74  nable approximat
33040 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74  ion. */.    pOut
33050 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65  ->u.i = -1;.  }e
33060 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
33070 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72  .i = x;.  }.  br
33080 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
33090 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20  e: IfNotZero P1 
330a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
330b0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
330c0 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20  0 then r[P1]--, 
330d0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
330e0 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
330f0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
33100 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65  r.  If the conte
33110 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
33120 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c  1 is.** initiall
33130 79 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  y greater than z
33140 65 72 6f 2c 20 74 68 65 6e 20 64 65 63 72 65 6d  ero, then decrem
33150 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
33160 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
33170 20 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65   If it is non-ze
33180 72 6f 20 28 6e 65 67 61 74 69 76 65 20 6f 72 20  ro (negative or 
33190 70 6f 73 69 74 69 76 65 29 20 61 6e 64 20 74 68  positive) and th
331a0 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20  en also jump to 
331b0 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67 69  P2.  .** If regi
331c0 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69  ster P1 is initi
331d0 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65  ally zero, leave
331e0 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   it unchanged an
331f0 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  d fall through..
33200 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
33210 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
33220 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
33230 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
33240 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
33250 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
33260 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
33270 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
33280 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i<0, 2);.  if
33290 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20  ( pIn1->u.i ){. 
332a0 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e      if( pIn1->u.
332b0 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d  i>0 ) pIn1->u.i-
332c0 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  -;.     goto jum
332d0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
332e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
332f0 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f  de: DecrJumpZero
33300 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
33310 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d  Synopsis: if (--
33320 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50  r[P1])==0 goto P
33330 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
33340 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e   P1 must hold an
33350 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65   integer.  Decre
33360 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
33370 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70  n P1.** and jump
33380 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65   to P2 if the ne
33390 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63 74  w value is exact
333a0 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  ly zero..*/.case
333b0 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f   OP_DecrJumpZero
333c0 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  : {      /* jump
333d0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
333e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
333f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
33400 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
33410 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
33420 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  .i>SMALLEST_INT6
33430 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b  4 ) pIn1->u.i--;
33440 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
33450 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c  en(pIn1->u.i==0,
33460 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
33470 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  >u.i==0 ) goto j
33480 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
33490 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
334a0 65 3a 20 41 67 67 53 74 65 70 30 20 2a 20 50 32  e: AggStep0 * P2
334b0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
334c0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
334d0 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
334e0 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
334f0 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
33500 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
33510 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
33520 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
33530 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
33540 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
33550 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63  FuncDef.** struc
33560 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
33570 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
33580 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
33590 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c  s the.** accumul
335a0 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
335b0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
335c0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
335d0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
335e0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
335f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  /./* Opcode: Agg
33600 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
33610 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
33620 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
33630 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
33640 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
33650 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
33660 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
33670 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
33680 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
33690 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
336a0 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
336b0 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63  context.** objec
336c0 74 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  t that is used t
336d0 6f 20 72 75 6e 20 74 68 65 20 66 75 6e 63 74 69  o run the functi
336e0 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
336f0 20 69 73 0a 2a 2a 20 61 73 20 74 68 65 20 61 63   is.** as the ac
33700 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
33710 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
33720 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
33730 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
33740 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
33750 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  rs..**.** This o
33760 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c  pcode is initial
33770 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41  ly coded as OP_A
33780 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72  ggStep0.  On fir
33790 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a  st evaluation,.*
337a0 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  * the FuncDef st
337b0 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f  ored in P4 is co
337c0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
337d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
337e0 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64  and.** the opcod
337f0 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49  e is changed.  I
33800 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20  n this way, the 
33810 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f  initialization o
33820 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  f the.** sqlite3
33830 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61  _context only ha
33840 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74  ppens once, inst
33850 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63  ead of on each c
33860 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74  all to the.** st
33870 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ep function..*/.
33880 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30  case OP_AggStep0
33890 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
338a0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
338b0 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
338c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
338d0 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
338e0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
338f0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
33900 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
33910 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
33920 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
33930 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
33940 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
33950 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
33960 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
33970 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
33980 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
33990 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
339a0 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
339b0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
339c0 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f 66 28 73  N(db, n*sizeof(s
339d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 20 2b  qlite3_value*) +
339e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
339f0 28 73 69 7a 65 6f 66 28 70 43 74 78 5b 30 5d 29  (sizeof(pCtx[0])
33a00 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 20 2d   + sizeof(Mem) -
33a10 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f   sizeof(sqlite3_
33a20 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20 69 66 28  value*)));.  if(
33a30 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20   pCtx==0 ) goto 
33a40 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e  no_mem;.  pCtx->
33a50 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78  pMem = 0;.  pCtx
33a60 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26  ->pOut = (Mem*)&
33a70 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b  (pCtx->argv[n]);
33a80 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
33a90 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70 4f 75 74  mInit(pCtx->pOut
33aa0 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  , db, MEM_Null);
33ab0 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d  .  pCtx->pFunc =
33ac0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
33ad0 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69    pCtx->iOp = (i
33ae0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
33af0 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20    pCtx->pVdbe = 
33b00 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46  p;.  pCtx->skipF
33b10 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  lag = 0;.  pCtx-
33b20 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  >isError = 0;.  
33b30 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a  pCtx->argc = n;.
33b40 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
33b50 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f  P4_FUNCCTX;.  pO
33b60 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74  p->p4.pCtx = pCt
33b70 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  x;.  pOp->opcode
33b80 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20   = OP_AggStep;. 
33b90 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
33ba0 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70   into OP_AggStep
33bb0 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67   */.}.case OP_Ag
33bc0 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69  gStep: {.  int i
33bd0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
33be0 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d  ext *pCtx;.  Mem
33bf0 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72   *pMem;..  asser
33c00 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
33c10 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20  P4_FUNCCTX );.  
33c20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pCtx = pOp->p4.p
33c30 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  Ctx;.  pMem = &a
33c40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20  Mem[pOp->p3];.. 
33c50 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63   /* If this func
33c60 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f  tion is inside o
33c70 66 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65  f a trigger, the
33c80 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20   register array 
33c90 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d  in aMem[].  ** m
33ca0 69 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d  ight change from
33cb0 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   one evaluation 
33cc0 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68  to the next.  Th
33cd0 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
33ce0 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73  code.  ** checks
33cf0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72   to see if the r
33d00 65 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61  egister array ha
33d10 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69  s changed, and i
33d20 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69  f so it.  ** rei
33d30 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72  nitializes the r
33d40 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66  elavant parts of
33d50 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e   the sqlite3_con
33d60 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  text object */. 
33d70 20 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20   if( pCtx->pMem 
33d80 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70  != pMem ){.    p
33d90 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d  Ctx->pMem = pMem
33da0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78  ;.    for(i=pCtx
33db0 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20  ->argc-1; i>=0; 
33dc0 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b  i--) pCtx->argv[
33dd0 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  i] = &aMem[pOp->
33de0 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64  p2+i];.  }..#ifd
33df0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
33e00 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74    for(i=0; i<pCt
33e10 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20  x->argc; i++){. 
33e20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
33e30 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76  Valid(pCtx->argv
33e40 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  [i]) );.    REGI
33e50 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
33e60 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76  p2+i, pCtx->argv
33e70 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  [i]);.  }.#endif
33e80 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20  ..  pMem->n++;. 
33e90 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70   assert( pCtx->p
33ea0 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  Out->flags==MEM_
33eb0 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74  Null );.  assert
33ec0 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d  ( pCtx->isError=
33ed0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
33ee0 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d  pCtx->skipFlag==
33ef0 30 20 29 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46  0 );.  (pCtx->pF
33f00 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74  unc->xSFunc)(pCt
33f10 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
33f20 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
33f30 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
33f40 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 69  */.  if( pCtx->i
33f50 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 69 66  sError ){.    if
33f60 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3e  ( pCtx->isError>
33f70 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
33f80 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
33f90 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
33fa0 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e 70 4f  ue_text(pCtx->pO
33fb0 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ut));.      rc =
33fc0 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a   pCtx->isError;.
33fd0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
33fe0 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a  tx->skipFlag ){.
33ff0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
34000 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
34010 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
34020 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
34030 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20 29 20  ;.      if( i ) 
34040 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
34050 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
34060 20 31 29 3b 0a 20 20 20 20 20 20 70 43 74 78 2d   1);.      pCtx-
34070 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
34080 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
34090 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
340a0 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 20 20  Ctx->pOut);.    
340b0 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67  pCtx->pOut->flag
340c0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
340d0 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20    pCtx->isError 
340e0 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63 20  = 0;.    if( rc 
340f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
34100 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
34110 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70   assert( pCtx->p
34120 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  Out->flags==MEM_
34130 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74  Null );.  assert
34140 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67  ( pCtx->skipFlag
34150 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ==0 );.  break;.
34160 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
34170 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
34180 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
34190 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50   accum=r[P1] N=P
341a0 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  2.**.** Execute 
341b0 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
341c0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
341d0 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
341e0 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
341f0 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
34200 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
34210 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
34220 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
34230 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
34240 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
34250 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
34260 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
34270 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
34280 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
34290 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
342a0 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
342b0 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
342c0 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
342d0 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
342e0 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
342f0 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
34300 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
34310 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
34320 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
34330 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
34340 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
34350 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
34360 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
34370 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
34380 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
34390 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
343a0 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
343b0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
343c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
343d0 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
343e0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
343f0 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  sor) );.  pMem =
34400 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
34410 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
34420 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
34430 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
34440 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
34450 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
34460 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
34470 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
34480 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
34490 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
344a0 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
344b0 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
344c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
344d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
344e0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
344f0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
34500 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
34510 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
34520 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
34530 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
34540 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
34550 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
34560 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
34570 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34580 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
34590 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
345a0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
345b0 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
345c0 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
345d0 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
345e0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
345f0 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
34600 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
34610 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
34620 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
34630 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52   FULL,.** RESTAR
34640 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20  T, or TRUNCATE. 
34650 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
34660 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
34670 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
34680 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
34690 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
346a0 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
346b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
346c0 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
346d0 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
346e0 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
346f0 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
34700 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
34710 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
34720 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
34730 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
34740 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
34750 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
34760 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
34770 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
34780 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
34790 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
347a0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
347b0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
347c0 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
347d0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
347e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
347f0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
34800 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
34810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34820 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
34830 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
34840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34850 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
34860 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
34870 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
34880 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b  ly==0 );.  aRes[
34890 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31  0] = 0;.  aRes[1
348a0 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31  ] = aRes[2] = -1
348b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
348c0 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
348d0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20  KPOINT_PASSIVE. 
348e0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
348f0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
34900 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20  INT_FULL.       
34910 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
34920 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
34930 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20  START.       || 
34940 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
34950 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
34960 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ATE.  );.  rc = 
34970 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
34980 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
34990 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
349a0 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
349b0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28  f( rc ){.    if(
349c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc!=SQLITE_BUSY
349d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
349e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
349f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
34a00 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b      aRes[0] = 1;
34a10 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20  .  }.  for(i=0, 
34a20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
34a30 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c  ->p3]; i<3; i++,
34a40 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71   pMem++){.    sq
34a50 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
34a60 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29  nt64(pMem, (i64)
34a70 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20  aRes[i]);.  }   
34a80 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a   .  break;.};  .
34a90 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
34aa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
34ab0 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f  MA./* Opcode: Jo
34ac0 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20  urnalMode P1 P2 
34ad0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61  P3 * *.**.** Cha
34ae0 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  nge the journal 
34af0 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65  mode of database
34b00 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75   P1 to P3. P3 mu
34b10 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  st be one of the
34b20 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  .** PAGER_JOURNA
34b30 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73  LMODE_XXX values
34b40 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65  . If changing be
34b50 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75  tween the variou
34b60 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f  s rollback.** mo
34b70 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75  des (delete, tru
34b80 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20  ncate, persist, 
34b90 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c  off and memory),
34ba0 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c   this is a simpl
34bb0 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20  e.** operation. 
34bc0 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65  No IO is require
34bd0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e  d..**.** If chan
34be0 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74  ging into or out
34bf0 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65   of WAL mode the
34c00 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f   procedure is mo
34c10 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a  re complicated..
34c20 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74  **.** Write a st
34c30 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
34c40 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61  the final journa
34c50 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74  l-mode to regist
34c60 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
34c70 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b  P_JournalMode: {
34c80 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
34c90 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cb0 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61   /* Btree to cha
34cc0 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  nge journal mode
34cd0 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a   of */.  Pager *
34ce0 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20  pPager;         
34cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
34d00 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
34d10 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65  h pBt */.  int e
34d20 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  New;            
34d30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
34d40 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  w journal mode *
34d50 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20  /.  int eOld;   
34d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d70 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a      /* The old j
34d80 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23  ournal mode */.#
34d90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34da0 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63  IT_WAL.  const c
34db0 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20  har *zFilename; 
34dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
34dd0 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c   of database fil
34de0 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a  e for pPager */.
34df0 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d  #endif..  pOut =
34e00 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
34e10 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20  p, pOp);.  eNew 
34e20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
34e30 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52  ert( eNew==PAGER
34e40 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
34e50 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ETE .       || e
34e60 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
34e70 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20  ALMODE_TRUNCATE 
34e80 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
34e90 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34ea0 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20  DE_PERSIST .    
34eb0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
34ec0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
34ed0 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  F.       || eNew
34ee0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34ef0 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20  ODE_MEMORY.     
34f00 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
34f10 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
34f20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
34f30 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34f40 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20  DE_QUERY.  );.  
34f50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
34f60 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
34f70 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
34f80 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
34f90 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62  0 );..  pBt = db
34fa0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
34fb0 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73  Bt;.  pPager = s
34fc0 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
34fd0 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20  (pBt);.  eOld = 
34fe0 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a  sqlite3PagerGetJ
34ff0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
35000 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d  r);.  if( eNew==
35010 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
35020 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d  E_QUERY ) eNew =
35030 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71   eOld;.  if( !sq
35040 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68  lite3PagerOkToCh
35050 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  angeJournalMode(
35060 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d  pPager) ) eNew =
35070 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20   eOld;..#ifndef 
35080 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
35090 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71    zFilename = sq
350a0 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61  lite3PagerFilena
350b0 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a  me(pPager, 1);..
350c0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f    /* Do not allo
350d0 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74  w a transition t
350e0 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57  o journal_mode=W
350f0 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  AL for a databas
35100 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72  e.  ** in tempor
35110 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69  ary storage or i
35120 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e  f the VFS does n
35130 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65  ot support share
35140 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20  d memory .  */. 
35150 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
35160 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
35170 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53  .   && (sqlite3S
35180 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d  trlen30(zFilenam
35190 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20  e)==0           
351a0 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a  /* Temp file */.
351b0 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74         || !sqlit
351c0 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72  e3PagerWalSuppor
351d0 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f  ted(pPager))   /
351e0 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f  * No shared-memo
351f0 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20  ry support */.  
35200 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f  ){.    eNew = eO
35210 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28  ld;.  }..  if( (
35220 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26  eNew!=eOld).   &
35230 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  & (eOld==PAGER_J
35240 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c  OURNALMODE_WAL |
35250 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
35260 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20  URNALMODE_WAL). 
35270 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d   ){.    if( !db-
35280 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64  >autoCommit || d
35290 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29  b->nVdbeRead>1 )
352a0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
352b0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
352c0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
352d0 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22  r(p,.          "
352e0 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73  cannot change %s
352f0 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77   wal mode from w
35300 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
35310 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ion",.          
35320 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
35330 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22  RNALMODE_WAL ? "
35340 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22  into" : "out of"
35350 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
35360 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35370 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
35380 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28  lse{. .      if(
35390 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
353a0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a  RNALMODE_WAL ){.
353b0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65          /* If le
353c0 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20  aving WAL mode, 
353d0 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69  close the log fi
353e0 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75  le. If successfu
353f0 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20  l, the call.    
35400 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43      ** to PagerC
35410 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70  loseWal() checkp
35420 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65  oints and delete
35430 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  s the write-ahea
35440 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a  d-log .        *
35450 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55  * file. An EXCLU
35460 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74  SIVE lock may st
35470 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74  ill be held on t
35480 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
35490 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74   .        ** aft
354a0 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  er a successful 
354b0 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20  return. .       
354c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d   */.        rc =
354d0 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f   sqlite3PagerClo
354e0 73 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64 62  seWal(pPager, db
354f0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
35500 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
35510 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
35520 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
35530 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
35540 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  w);.        }.  
35550 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f      }else if( eO
35560 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
35570 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a  LMODE_MEMORY ){.
35580 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f          /* Canno
35590 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72  t transition dir
355a0 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52  ectly from MEMOR
355b0 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d  Y to WAL.  Use m
355c0 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20  ode OFF.        
355d0 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
355e0 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20  diate */.       
355f0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
35600 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
35610 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  er, PAGER_JOURNA
35620 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20  LMODE_OFF);.    
35630 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
35640 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  Open a transacti
35650 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
35660 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c  se file. Regardl
35670 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  ess of the journ
35680 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65  al.      ** mode
35690 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  , this transacti
356a0 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61  on always uses a
356b0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
356c0 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
356d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
356e0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
356f0 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  pBt)==0 );.     
35700 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
35710 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
35720 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
35730 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28  etVersion(pBt, (
35740 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
35750 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20  NALMODE_WAL ? 2 
35760 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  : 1));.      }. 
35770 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
35780 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
35790 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
357a0 69 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20  if( rc ) eNew = 
357b0 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73  eOld;.  eNew = s
357c0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
357d0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
357e0 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74  , eNew);..  pOut
357f0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
35800 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
35810 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
35820 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
35830 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
35840 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
35850 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
35860 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
35870 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
35880 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
35890 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
358a0 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
358b0 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20  ding);.  if( rc 
358c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
358d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
358e0 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a  ak;.};.#endif /*
358f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
35900 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  GMA */..#if !def
35910 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
35920 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
35930 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
35940 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
35950 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20  de: Vacuum P1 * 
35960 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
35970 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
35980 74 61 62 61 73 65 20 50 31 2e 20 20 50 31 20 69  tabase P1.  P1 i
35990 73 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20  s 0 for "main", 
359a0 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a  and 2 or more.**
359b0 20 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64   for an attached
359c0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
359d0 22 74 65 6d 70 22 20 64 61 74 61 62 61 73 65 20  "temp" database 
359e0 6d 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75  may not be vacuu
359f0 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  med..*/.case OP_
35a00 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65  Vacuum: {.  asse
35a10 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
35a20 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
35a30 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70  ite3RunVacuum(&p
35a40 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70  ->zErrMsg, db, p
35a50 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72  Op->p1);.  if( r
35a60 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
35a70 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
35a80 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
35a90 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
35aa0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
35ab0 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
35ac0 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
35ad0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
35ae0 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
35af0 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
35b00 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
35b10 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
35b20 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
35b30 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
35b40 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
35b50 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
35b60 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
35b70 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
35b80 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
35b90 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
35ba0 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
35bb0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
35bc0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
35bd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
35be0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
35bf0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
35c00 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
35c10 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
35c20 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
35c30 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
35c40 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
35c50 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
35c60 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
35c70 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
35c80 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72  m(pBt);.  VdbeBr
35c90 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
35ca0 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20  LITE_DONE,2);.  
35cb0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
35cc0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc!=SQLITE_DON
35cd0 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  E ) goto abort_d
35ce0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
35cf0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
35d00 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
35d10 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
35d20 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
35d30 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50  Opcode: Expire P
35d40 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
35d50 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65  Cause precompile
35d60 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  d statements to 
35d70 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e  expire.  When an
35d80 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65   expired stateme
35d90 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65  nt.** is execute
35da0 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
35db0 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65  step() it will e
35dc0 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61  ither automatica
35dd0 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65  lly.** reprepare
35de0 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77   itself (if it w
35df0 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72  as originally cr
35e00 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  eated using sqli
35e10 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
35e20 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20  ).** or it will 
35e30 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45  fail with SQLITE
35e40 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20  _SCHEMA..** .** 
35e50 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e  If P1 is 0, then
35e60 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65   all SQL stateme
35e70 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72  nts become expir
35e80 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  ed. If P1 is non
35e90 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f  -zero,.** then o
35ea0 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c  nly the currentl
35eb0 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
35ec0 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64  ement is expired
35ed0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70  ..*/.case OP_Exp
35ee0 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f  ire: {.  if( !pO
35ef0 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
35f00 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
35f10 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
35f20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
35f30 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
35f40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
35f50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
35f60 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
35f70 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65  /* Opcode: Table
35f80 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34  Lock P1 P2 P3 P4
35f90 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
35fa0 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77  iDb=P1 root=P2 w
35fb0 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62  rite=P3.**.** Ob
35fc0 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61  tain a lock on a
35fd0 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
35fe0 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  e. This instruct
35ff0 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ion is only used
36000 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61   when.** the sha
36010 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72  red-cache featur
36020 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a  e is enabled. .*
36030 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
36040 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
36050 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e  base in sqlite3.
36060 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74  aDb[] of the dat
36070 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63  abase.** on whic
36080 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63  h the lock is ac
36090 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c  quired.  A readl
360a0 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
360b0 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61  if P3==0 or.** a
360c0 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50   write lock if P
360d0 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63  3==1..**.** P2 c
360e0 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74  ontains the root
360f0 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62  -page of the tab
36100 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a  le to lock..**.*
36110 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20  * P4 contains a 
36120 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
36130 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
36140 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54   being locked. T
36150 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75  his is only.** u
36160 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
36170 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
36180 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e   if the lock can
36190 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e  not be obtained.
361a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c  .*/.case OP_Tabl
361b0 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73  eLock: {.  u8 is
361c0 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29  WriteLock = (u8)
361d0 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69  pOp->p3;.  if( i
361e0 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d  sWriteLock || 0=
361f0 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  =(db->flags&SQLI
36200 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 29  TE_ReadUncommit)
36210 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d   ){.    int p1 =
36220 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61   pOp->p1; .    a
36230 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20  ssert( p1>=0 && 
36240 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
36250 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
36260 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
36270 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73  k, p1) );.    as
36280 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63  sert( isWriteLoc
36290 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c  k==0 || isWriteL
362a0 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63  ock==1 );.    rc
362b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
362c0 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
362d0 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
362e0 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
362f0 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
36300 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46       if( (rc&0xF
36310 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  F)==SQLITE_LOCKE
36320 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e  D ){.        con
36330 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70  st char *z = pOp
36340 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20 20  ->p4.z;.        
36350 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
36360 28 70 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  (p, "database ta
36370 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
36380 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d 0a  s", z);.      }.
36390 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
363a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
363b0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
363c0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
363d0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
363e0 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64  _CACHE */..#ifnd
363f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
36400 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
36410 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20  pcode: VBegin * 
36420 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
36430 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74  4 may be a point
36440 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
36450 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
36460 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65   If so, call the
36470 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68   .** xBegin meth
36480 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  od for that tabl
36490 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77  e..**.** Also, w
364a0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34  hether or not P4
364b0 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74   is set, check t
364c0 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20  hat this is not 
364d0 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f  being called fro
364e0 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61  m.** within a ca
364f0 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74  llback to a virt
36500 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28  ual table xSync(
36510 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20  ) method. If it 
36520 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a  is, the error.**
36530 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65   code will be se
36540 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  t to SQLITE_LOCK
36550 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ED..*/.case OP_V
36560 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c  Begin: {.  VTabl
36570 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61  e *pVTab;.  pVTa
36580 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
36590 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  b;.  rc = sqlite
365a0 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70  3VtabBegin(db, p
365b0 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54  VTab);.  if( pVT
365c0 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62  ab ) sqlite3Vtab
365d0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
365e0 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20  pVTab->pVtab);. 
365f0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
36600 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
36610 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
36620 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
36630 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36640 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
36650 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
36660 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
36670 20 56 43 72 65 61 74 65 20 50 31 20 50 32 20 2a   VCreate P1 P2 *
36680 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73   * *.**.** P2 is
36690 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
366a0 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20   holds the name 
366b0 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
366c0 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a  le in database .
366d0 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  ** P1. Call the 
366e0 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66  xCreate method f
366f0 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
36700 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74  /.case OP_VCreat
36710 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e: {.  Mem sMem;
36720 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
36730 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
36740 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
36750 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  d */.  const cha
36760 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d  r *zTab;  /* Nam
36770 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  e of the virtual
36780 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d   table */..  mem
36790 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
367a0 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73  zeof(sMem));.  s
367b0 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f  Mem.db = db;.  /
367c0 2a 20 42 65 63 61 75 73 65 20 50 32 20 69 73 20  * Because P2 is 
367d0 61 6c 77 61 79 73 20 61 20 73 74 61 74 69 63 20  always a static 
367e0 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d  string, it is im
367f0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65  possible for the
36800 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
36810 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61  eMemCopy() to fa
36820 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  il */.  assert( 
36830 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66  (aMem[pOp->p2].f
36840 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21  lags & MEM_Str)!
36850 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
36860 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66  (aMem[pOp->p2].f
36870 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69  lags & MEM_Stati
36880 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  c)!=0 );.  rc = 
36890 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f  sqlite3VdbeMemCo
368a0 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b  py(&sMem, &aMem[
368b0 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73  pOp->p2]);.  ass
368c0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
368d0 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28  OK );.  zTab = (
368e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
368f0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
36900 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28  sMem);.  assert(
36910 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c   zTab || db->mal
36920 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69  locFailed );.  i
36930 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72  f( zTab ){.    r
36940 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
36950 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f  allCreate(db, pO
36960 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d  p->p1, zTab, &p-
36970 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
36980 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
36990 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
369a0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
369b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
369c0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
369d0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
369e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
369f0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
36a00 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
36a10 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
36a20 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a   VDestroy P1 * *
36a30 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
36a40 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
36a50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
36a60 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43   database P1.  C
36a70 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79  all the xDestroy
36a80 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68   method.** of th
36a90 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
36aa0 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b  e OP_VDestroy: {
36ab0 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79  .  db->nVDestroy
36ac0 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ++;.  rc = sqlit
36ad0 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
36ae0 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  y(db, pOp->p1, p
36af0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62 2d  Op->p4.z);.  db-
36b00 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20 20  >nVDestroy--;.  
36b10 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
36b20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
36b30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
36b40 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
36b50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
36b60 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
36b70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
36b80 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
36b90 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20  VOpen P1 * * P4 
36ba0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
36bb0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
36bc0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
36bd0 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
36be0 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
36bf0 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
36c00 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70  number.  This op
36c10 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72  code opens a cur
36c20 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75  sor to the virtu
36c30 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20  al.** table and 
36c40 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73  stores that curs
36c50 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73  or in P1..*/.cas
36c60 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20  e OP_VOpen: {.  
36c70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
36c80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
36c90 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a  _cursor *pVCur;.
36ca0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
36cb0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
36cc0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
36cd0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
36ce0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
36cf0 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20  );.  pCur = 0;. 
36d00 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70 56   pVCur = 0;.  pV
36d10 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
36d20 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66  tab->pVtab;.  if
36d30 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45  ( pVtab==0 || NE
36d40 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75  VER(pVtab->pModu
36d50 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63  le==0) ){.    rc
36d60 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
36d70 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
36d80 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36d90 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70   }.  pModule = p
36da0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
36db0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
36dc0 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 43  Open(pVtab, &pVC
36dd0 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  ur);.  sqlite3Vt
36de0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
36df0 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
36e00 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36e10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
36e20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73   /* Initialize s
36e30 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
36e40 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f  or base class */
36e50 0a 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62 20  .  pVCur->pVtab 
36e60 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20 49  = pVtab;..  /* I
36e70 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63  nitialize vdbe c
36e80 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
36e90 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
36ea0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
36eb0 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54 59  p1, 0, -1, CURTY
36ec0 50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66 28 20  PE_VTAB);.  if( 
36ed0 70 43 75 72 20 29 7b 0a 20 20 20 20 70 43 75 72  pCur ){.    pCur
36ee0 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56 43  ->uc.pVCur = pVC
36ef0 75 72 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 6e  ur;.    pVtab->n
36f00 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Ref++;.  }else{.
36f10 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
36f20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
36f30 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
36f40 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20 20  ose(pVCur);.    
36f50 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
36f60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
36f70 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
36f80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
36f90 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
36fa0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36fb0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
36fc0 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20  Filter P1 P2 P3 
36fd0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
36fe0 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70  : iplan=r[P3] zp
36ff0 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50  lan='P4'.**.** P
37000 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70  1 is a cursor op
37010 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e  ened using VOpen
37020 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72  .  P2 is an addr
37030 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
37040 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65  f.** the filtere
37050 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  d result set is 
37060 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  empty..**.** P4 
37070 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  is either NULL o
37080 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  r a string that 
37090 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  was generated by
370a0 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a   the xBestIndex.
370b0 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  ** method of the
370c0 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e   module.  The in
370d0 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
370e0 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73  the P4 string is
370f0 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20   left.** to the 
37100 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
37110 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
37120 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
37130 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
37140 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75  hod on the virtu
37150 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69  al table specifi
37160 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68  ed.** by P1.  Th
37170 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20  e integer query 
37180 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74  plan parameter t
37190 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f  o xFilter is sto
371a0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
371b0 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20  ** P3. Register 
371c0 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20  P3+1 stores the 
371d0 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74  argc parameter t
371e0 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74  o be passed to t
371f0 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65  he.** xFilter me
37200 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20  thod. Registers 
37210 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20  P3+2..P3+1+argc 
37220 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20  are the argc.** 
37230 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d  additional param
37240 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20  eters which are 
37250 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69  passed to.** xFi
37260 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65  lter as argv. Re
37270 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f  gister P3+2 beco
37280 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e  mes argv[0] when
37290 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74   passed to xFilt
372a0 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70  er..**.** A jump
372b0 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69   is made to P2 i
372c0 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
372d0 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67   after filtering
372e0 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e   would be empty.
372f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c  .*/.case OP_VFil
37300 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ter: {   /* jump
37310 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a   */.  int nArg;.
37320 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20    int iQuery;.  
37330 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
37340 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
37350 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20   Mem *pQuery;.  
37360 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71  Mem *pArgc;.  sq
37370 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
37380 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69  r *pVCur;.  sqli
37390 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
373a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
373b0 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
373c0 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
373d0 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
373e0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
373f0 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70  3];.  pArgc = &p
37400 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72  Query[1];.  pCur
37410 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
37420 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
37430 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72  memIsValid(pQuer
37440 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  y) );.  REGISTER
37450 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
37460 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
37470 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70  t( pCur->eCurTyp
37480 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
37490 29 3b 0a 20 20 70 56 43 75 72 20 3d 20 70 43 75  );.  pVCur = pCu
374a0 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20 70  r->uc.pVCur;.  p
374b0 56 74 61 62 20 3d 20 70 56 43 75 72 2d 3e 70 56  Vtab = pVCur->pV
374c0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
374d0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
374e0 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20  ..  /* Grab the 
374f0 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64  index number and
37500 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73   argc parameters
37510 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
37520 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d  Query->flags&MEM
37530 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67  _Int)!=0 && pArg
37540 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  c->flags==MEM_In
37550 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69  t );.  nArg = (i
37560 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20  nt)pArgc->u.i;. 
37570 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70   iQuery = (int)p
37580 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f  Query->u.i;..  /
37590 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69  * Invoke the xFi
375a0 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  lter method */. 
375b0 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41 72   res = 0;.  apAr
375c0 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
375d0 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72  for(i = 0; i<nAr
375e0 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41  g; i++){.    apA
375f0 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
37600 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  +1];.  }.  rc = 
37610 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72  pModule->xFilter
37620 28 70 56 43 75 72 2c 20 69 51 75 65 72 79 2c 20  (pVCur, iQuery, 
37630 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c  pOp->p4.z, nArg,
37640 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69 74   apArg);.  sqlit
37650 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
37660 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
37670 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
37680 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37690 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c  ;.  res = pModul
376a0 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b 0a  e->xEof(pVCur);.
376b0 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
376c0 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  = 0;.  VdbeBranc
376d0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
376e0 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
376f0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
37700 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
37710 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
37720 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
37730 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
37740 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37750 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
37760 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
37770 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
37780 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32  r[P3]=vcolumn(P2
37790 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  ).**.** Store in
377a0 20 72 65 67 69 73 74 65 72 20 50 33 20 74 68 65   register P3 the
377b0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
377c0 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
377d0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
377e0 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d   of the virtual-
377f0 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
37800 50 31 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P1..**.** If the
37810 20 56 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20   VColumn opcode 
37820 69 73 20 62 65 69 6e 67 20 75 73 65 64 20 74 6f  is being used to
37830 20 66 65 74 63 68 20 74 68 65 20 76 61 6c 75 65   fetch the value
37840 20 6f 66 0a 2a 2a 20 61 6e 20 75 6e 63 68 61 6e   of.** an unchan
37850 67 69 6e 67 20 63 6f 6c 75 6d 6e 20 64 75 72 69  ging column duri
37860 6e 67 20 61 6e 20 55 50 44 41 54 45 20 6f 70 65  ng an UPDATE ope
37870 72 61 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  ration, then the
37880 20 50 35 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20   P5.** value is 
37890 31 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 50  1.  Otherwise, P
378a0 35 20 69 73 20 30 2e 20 20 54 68 65 20 50 35 20  5 is 0.  The P5 
378b0 76 61 6c 75 65 20 69 73 20 72 65 74 75 72 6e 65  value is returne
378c0 64 0a 2a 2a 20 62 79 20 73 71 6c 69 74 65 33 5f  d.** by sqlite3_
378d0 76 74 61 62 5f 6e 6f 63 68 61 6e 67 65 28 29 20  vtab_nochange() 
378e0 72 6f 75 74 69 6e 65 20 63 61 6e 20 63 61 6e 20  routine can can 
378f0 62 65 20 75 73 65 64 0a 2a 2a 20 62 79 20 76 69  be used.** by vi
37900 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
37910 65 6d 65 6e 74 61 74 69 6f 6e 73 20 74 6f 20 72  ementations to r
37920 65 74 75 72 6e 20 73 70 65 63 69 61 6c 20 22 6e  eturn special "n
37930 6f 2d 63 68 61 6e 67 65 22 0a 2a 2a 20 6d 61 72  o-change".** mar
37940 6b 73 20 77 68 69 63 68 20 63 61 6e 20 62 65 20  ks which can be 
37950 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74 2c 20  more efficient, 
37960 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
37970 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
37980 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
37990 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
379a0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
379b0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
379c0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
379d0 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
379e0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
379f0 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
37a00 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
37a10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
37a20 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
37a30 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
37a40 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
37a50 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
37a60 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
37a70 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
37a80 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  or) );.  pDest =
37a90 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
37aa0 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
37ab0 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
37ac0 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
37ad0 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
37ae0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
37af0 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61  pDest);.    brea
37b00 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
37b10 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d   pCur->uc.pVCur-
37b20 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
37b30 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
37b40 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
37b50 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
37b60 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
37b70 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
37b80 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43  sContext));.  sC
37b90 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44  ontext.pOut = pD
37ba0 65 73 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  est;.  if( pOp->
37bb0 70 35 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p5 ){.    sqlite
37bc0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
37bd0 70 44 65 73 74 29 3b 0a 20 20 20 20 70 44 65 73  pDest);.    pDes
37be0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
37bf0 75 6c 6c 7c 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20  ull|MEM_Zero;.  
37c00 20 20 70 44 65 73 74 2d 3e 75 2e 6e 5a 65 72 6f    pDest->u.nZero
37c10 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
37c20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
37c30 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
37c40 6c 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70  l);.  }.  rc = p
37c50 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
37c60 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20  pCur->uc.pVCur, 
37c70 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
37c80 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  p2);.  sqlite3Vt
37c90 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
37ca0 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
37cb0 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
37cc0 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
37cd0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
37ce0 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
37cf0 65 5f 74 65 78 74 28 70 44 65 73 74 29 29 3b 0a  e_text(pDest));.
37d00 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78      rc = sContex
37d10 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  t.isError;.  }. 
37d20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
37d30 67 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74  geEncoding(pDest
37d40 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52  , encoding);.  R
37d50 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
37d60 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
37d70 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
37d80 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20  SIZE(pDest);..  
37d90 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
37da0 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20  emTooBig(pDest) 
37db0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
37dc0 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  big;.  }.  if( r
37dd0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
37de0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
37df0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
37e00 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
37e10 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
37e20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
37e30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
37e40 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74  /* Opcode: VNext
37e50 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
37e60 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75  ** Advance virtu
37e70 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74  al table P1 to t
37e80 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69  he next row in i
37e90 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e  ts result set an
37ea0 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73  d.** jump to ins
37eb0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72  truction P2.  Or
37ec0 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c  , if the virtual
37ed0 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68   table has reach
37ee0 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  ed.** the end of
37ef0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c   its result set,
37f00 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
37f10 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
37f20 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
37f30 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20  ase OP_VNext: { 
37f40 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73    /* jump */.  s
37f50 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
37f60 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
37f70 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
37f80 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ule;.  int res;.
37f90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
37fa0 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ur;..  res = 0;.
37fb0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
37fc0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
37fd0 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72  sert( pCur->eCur
37fe0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54  Type==CURTYPE_VT
37ff0 41 42 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  AB );.  if( pCur
38000 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
38010 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
38020 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70  tab = pCur->uc.p
38030 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  VCur->pVtab;.  p
38040 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
38050 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
38060 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
38070 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
38080 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
38090 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
380a0 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
380b0 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
380c0 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
380d0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
380e0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
380f0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
38100 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
38110 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
38120 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
38130 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
38140 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
38150 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
38160 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
38170 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
38180 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
38190 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
381a0 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
381b0 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
381c0 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
381d0 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
381e0 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  */.  rc = pModul
381f0 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 75  e->xNext(pCur->u
38200 63 2e 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69  c.pVCur);.  sqli
38210 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
38220 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
38230 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
38240 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
38250 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  r;.  res = pModu
38260 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75  le->xEof(pCur->u
38270 63 2e 70 56 43 75 72 29 3b 0a 20 20 56 64 62 65  c.pVCur);.  Vdbe
38280 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73  BranchTaken(!res
38290 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20  ,2);.  if( !res 
382a0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
382b0 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
382c0 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f   to P2 */.    go
382d0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
382e0 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
382f0 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74  rrupt;.  }.  got
38300 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
38310 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20  rru