/ Hex Artifact Content
Login

Artifact a7d0f8312eea5c2084349f0ea13b25fa7ecdb3606d8aab393d4a98ca7ac4c62b:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
32b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f  .    return MEM_
32c0: 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  Int;.  }.  retur
32d0: 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f  n MEM_Real;.}../
32e0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
32f0: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72  numeric type for
3300: 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45   pMem, either ME
3310: 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61  M_Int or MEM_Rea
3320: 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20  l or both or.** 
3330: 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e  none.  .**.** Un
3340: 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69  like applyNumeri
3350: 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69  cAffinity(), thi
3360: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e  s routine does n
3370: 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e  ot modify pMem->
3380: 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74  flags..** But it
3390: 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e   does set pMem->
33a0: 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  u.r and pMem->u.
33b0: 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e  i appropriately.
33c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e  .*/.static u16 n
33d0: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
33e0: 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65  pMem){.  if( pMe
33f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3400: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b  Int|MEM_Real) ){
3410: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d  .    return pMem
3420: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3430: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
3440: 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  }.  if( pMem->fl
3450: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3460: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
3470: 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75  return computeNu
3480: 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b  mericType(pMem);
3490: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
34a0: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
34b0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
34c0: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
34d0: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
34e0: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
34f0: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
3500: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
3510: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
3520: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
3530: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3540: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
3550: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
3560: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
3570: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
3580: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
3590: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
35a0: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
35b0: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
35c0: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
35d0: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
35e0: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
35f0: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
3600: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3610: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
3620: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3630: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3640: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
3650: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3660: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3670: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
3680: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3690: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
36a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
36b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
36c0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
36d0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
36e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
36f0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3700: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3710: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3720: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
3730: 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20      *(zCsr++) = 
3740: 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
3750: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3760: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3770: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3780: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3790: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
37a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
37b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
37c0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
37d0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
37e0: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
37f0: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3800: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3810: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3820: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3830: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3840: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3850: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3860: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3870: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3880: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3890: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
38a0: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
38b0: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
38c0: 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66  +) = ']';.    if
38d0: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
38e0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
38f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3900: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3910: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3920: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3930: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3940: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3950: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3960: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
3970: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
3980: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
3990: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
39a0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
39b0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
39c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
39d0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
39e0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
39f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3a00: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3a10: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3a20: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3a30: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3a40: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3a50: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3a60: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3a70: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3a80: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3a90: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3aa0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3ab0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3ac0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3ad0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3ae0: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3af0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3b00: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3b10: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3b20: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3b30: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3b40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3b50: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3b60: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
3b70: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
3b80: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
3b90: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
3ba0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
3bb0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3bc0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3bd0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3be0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3bf0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3c00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3c10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3c20: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3c30: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3c40: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3c50: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3c60: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3c70: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
3c80: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
3c90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3ca0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
3cb0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
3cc0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3cd0: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3ce0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3cf0: 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a  TracePrint(Mem *
3d00: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61  p){.  if( p->fla
3d10: 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs & MEM_Undefin
3d20: 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ed ){.    printf
3d30: 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a  (" undefined");.
3d40: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3d50: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3d60: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3d70: 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20  NULL");.  }else 
3d80: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
3d90: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3da0: 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  ))==(MEM_Int|MEM
3db0: 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69  _Str) ){.    pri
3dc0: 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ntf(" si:%lld", 
3dd0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
3de0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3df0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
3e00: 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c  rintf(" i:%lld",
3e10: 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65   p->u.i);.#ifnde
3e20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
3e30: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d  OATING_POINT.  }
3e40: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3e50: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
3e60: 20 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25      printf(" r:%
3e70: 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e  g", p->u.r);.#en
3e80: 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  dif.  }else if( 
3e90: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3ea0: 6f 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69  owSet ){.    pri
3eb0: 6e 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29  ntf(" (rowset)")
3ec0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
3ed0: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
3ee0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
3ef0: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
3f00: 7a 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74  zBuf);.    print
3f10: 66 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a  f(" %s", zBuf);.
3f20: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61    }.  if( p->fla
3f30: 67 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65  gs & MEM_Subtype
3f40: 20 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74   ) printf(" subt
3f50: 79 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e  ype=0x%02x", p->
3f60: 65 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61  eSubtype);.}.sta
3f70: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3f80: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
3f90: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
3fa0: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
3fb0: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
3fc0: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
3fd0: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 73 71  intf("\n");.  sq
3fe0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
3ff0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 29 3b 0a  mInvariants(p);.
4000: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
4010: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
4020: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
4030: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
4040: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
4050: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
4060: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
4070: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
4080: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
4090: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
40a0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
40b0: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
40c0: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
40d0: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
40e0: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
40f0: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
4100: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
4110: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
4120: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
4130: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
4140: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
4150: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
4160: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
4170: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
4180: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
4190: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
41a0: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
41b0: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
41c0: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
41d0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
41e0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
41f0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
4200: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4210: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
4220: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
4230: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
4240: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
4250: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
4260: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4270: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4280: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4290: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
42a0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
42b0: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
42c0: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
42d0: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
42e0: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
42f0: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4300: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4310: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
4320: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
4330: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
4340: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
4350: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
4360: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
4370: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4380: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4390: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
43a0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
43b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
43c0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20  TE_NOINLINE Mem 
43d0: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57  *out2PrereleaseW
43e0: 69 74 68 43 6c 65 61 72 28 4d 65 6d 20 2a 70 4f  ithClear(Mem *pO
43f0: 75 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ut){.  sqlite3Vd
4400: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
4410: 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  t);.  pOut->flag
4420: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72  s = MEM_Int;.  r
4430: 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74  eturn pOut;.}.st
4440: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4450: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4460: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
4470: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
4480: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
4490: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
44a0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
44b0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
44c0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
44d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
44e0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
44f0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
4500: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
4510: 28 70 4f 75 74 29 20 29 7b 20 2f 2a 4f 50 54 49  (pOut) ){ /*OPTI
4520: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
4530: 45 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 6f  E*/.    return o
4540: 75 74 32 50 72 65 72 65 6c 65 61 73 65 57 69 74  ut2PrereleaseWit
4550: 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a 20 20  hClear(pOut);.  
4560: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
4570: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4580: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4f 75  ;.    return pOu
4590: 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  t;.  }.}.../*.**
45a0: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
45b0: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
45c0: 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a  am as we can..**
45d0: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72   This is the cor
45e0: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65  e of sqlite3_ste
45f0: 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71  p().  .*/.int sq
4600: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4610: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4630: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4640: 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  Op *aOp = p->aOp
4650: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
4660: 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a  py of p->aOp */.
4670: 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b    Op *pOp = aOp;
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4690: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
46a0: 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  n */.#if defined
46b0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
46c0: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
46d0: 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f  ROFILE).  Op *pO
46e0: 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20 20 20  rigOp;          
46f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
4700: 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f 70 20   pOp at the top 
4710: 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23  of the loop */.#
4720: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4730: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
4740: 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d 20 30  nExtraDelete = 0
4750: 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 69  ;      /* Verifi
4760: 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61 6e 64  es FORDELETE and
4770: 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 73   AUXDELETE flags
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
4790: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
47a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
47b0: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
47c0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
47d0: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
47e0: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
47f0: 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  u8 resetSchemaOn
4800: 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65  Fault = 0; /* Re
4810: 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72  set schema after
4820: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73   an error if pos
4830: 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  itive */.  u8 en
4840: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4850: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4860: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4870: 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  /.  int iCompare
4880: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
4890: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
48a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
48b0: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
48c0: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
48d0: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
48e0: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
48f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4900: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4910: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4920: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4930: 74 3b 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 78  t;   /* Invoke x
4940: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4950: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
4960: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
4970: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
4980: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4990: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
49a0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
49b0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
49c0: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
49d0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
49e0: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
49f0: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a00: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a10: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4a30: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4a40: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4a50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4a60: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4a70: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
4a80: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
4a90: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
4aa0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4ab0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4ac0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4ad0: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4ae0: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4af0: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4b00: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4b10: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4b20: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4b30: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4b40: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4b50: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4b60: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
4b70: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
4b80: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
4b90: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
4ba0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4bb0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
4bc0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4bd0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4be0: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4bf0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4c00: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4c10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4c20: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
4c30: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4c40: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
4c50: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
4c60: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69  nly!=0 );.  p->i
4c70: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
4c80: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4c90: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4ca0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4cb0: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4cc0: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4cd0: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
4ce0: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
4cf0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
4d00: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
4d10: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4d20: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4d30: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4d40: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
4d50: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
4d60: 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72 20  .    u32 iPrior 
4d70: 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  = p->aCounter[SQ
4d80: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4d90: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61 73  VM_STEP];.    as
4da0: 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50  sert( 0 < db->nP
4db0: 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20  rogressOps );.  
4dc0: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
4dd0: 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   = db->nProgress
4de0: 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25 20  Ops - (iPrior % 
4df0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4e00: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
4e10: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
4e20: 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 7d   0xffffffff;.  }
4e30: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
4e40: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
4e50: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4e60: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
4e70: 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28  p->pc==0.   && (
4e80: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28  p->db->flags & (
4e90: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
4ea0: 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ng|SQLITE_VdbeEQ
4eb0: 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  P|SQLITE_VdbeTra
4ec0: 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ce))!=0.  ){.   
4ed0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
4ee0: 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71  once = 1;.    sq
4ef0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
4f00: 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  l(p);.    if( p-
4f10: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4f20: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
4f30: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
4f40: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4f50: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4f60: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4f70: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4f80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4f90: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
4fa0: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20   &aOp[i]);.     
4fb0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4fc0: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4fd0: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29  SQLITE_VdbeEQP )
4fe0: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
4ff0: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
5000: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70  .        if( aOp
5010: 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  [i].opcode==OP_E
5020: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
5030: 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70      if( once ) p
5040: 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72  rintf("VDBE Quer
5050: 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20  y Plan:\n");.   
5060: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
5070: 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e  s\n", aOp[i].p4.
5080: 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e  z);.          on
5090: 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
50a0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
50b0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
50c0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
50d0: 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74  beTrace )  print
50e0: 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e  f("VDBE Trace:\n
50f0: 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ");.  }.  sqlite
5100: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
5110: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72  ();.#endif.  for
5120: 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d  (pOp=&aOp[p->pc]
5130: 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20  ; 1; pOp++){.   
5140: 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20 64   /* Errors are d
5150: 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69 76  etected by indiv
5160: 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77  idual opcodes, w
5170: 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74 65  ith an immediate
5180: 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f  .    ** jumps to
5190: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
51a0: 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ror. */.    asse
51b0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
51c0: 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  K );..    assert
51d0: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
51e0: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
51f0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
5200: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
5210: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
5220: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
5230: 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53  Step++;.#ifdef S
5240: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
5250: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
5260: 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29   if( p->anExec )
5270: 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29   p->anExec[(int)
5280: 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65  (pOp-aOp)]++;.#e
5290: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  ndif..    /* Onl
52a0: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
52b0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
52c0: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
52d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
52e0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
52f0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5300: 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
5310: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5320: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
5330: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
5340: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65  , pOp);.    }.#e
5350: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
5360: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
5370: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
5380: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
5390: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
53a0: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
53b0: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
53c0: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
53d0: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
53e0: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
53f0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
5400: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
5410: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5420: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
5430: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
5440: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5450: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
5460: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5470: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
5480: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5490: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
54a0: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
54b0: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
54c0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
54d0: 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50    {.      u8 opP
54e0: 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65  roperty = sqlite
54f0: 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
5500: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20  pOp->opcode];.  
5510: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5520: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  rty & OPFLG_IN1)
5530: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5540: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5550: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5560: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5570: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5580: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5590: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
55a0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
55b0: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  1]) );.        a
55c0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
55d0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
55e0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
55f0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
5600: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5610: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
5620: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p1]);.      }
5630: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5640: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5650: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
5660: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5670: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2>0 );.        a
5680: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5690: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
56a0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
56b0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
56c0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
56d0: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
56e0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
56f0: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5700: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5710: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5720: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5730: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
5740: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
5750: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5760: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5770: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5780: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5790: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
57a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
57b0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
57c0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
57d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
57e0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
57f0: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
5800: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5810: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5820: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5830: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5840: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5850: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5860: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5870: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5880: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5890: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
58a0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
58b0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
58c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
58d0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
58e0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
58f0: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  );.        memAb
5900: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5910: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5920: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5930: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5940: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5950: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5960: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5970: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5980: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5990: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
59a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
59b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
59c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
59d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
59e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
59f0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
5a00: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
5a10: 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72  PROFILE).    pOr
5a20: 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64  igOp = pOp;.#end
5a30: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
5a40: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
5a50: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
5a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5ab0: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5ac0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5ad0: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5ae0: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5af0: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5b00: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5b10: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5b20: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
5b30: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
5b40: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
5b50: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
5b60: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5b70: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5b80: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5b90: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5ba0: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5bb0: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5bc0: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5bd0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5be0: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5bf0: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5c00: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5c10: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5c20: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5c30: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5c40: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5c50: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5c60: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5c70: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5c80: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5c90: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5ca0: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5cb0: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5cc0: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5cd0: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5ce0: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5cf0: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5d00: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5d10: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5d20: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5d30: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5d40: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5d50: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5d60: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5d70: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5d80: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5d90: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5da0: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5db0: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5dc0: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5dd0: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5de0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5df0: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5e00: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5e10: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5e20: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5e30: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5e40: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5e50: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5e60: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5e70: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5e80: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5e90: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5ea0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5eb0: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5ec0: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5ed0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5ee0: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5ef0: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5f00: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5f10: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5f20: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5f30: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5f40: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5f50: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5f60: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5f70: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5f80: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5f90: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
5fa0: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
5fb0: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
5fc0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
5fd0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
5fe0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
5ff0: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
6000: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
6010: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
6020: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
6030: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
6040: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
6050: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
6060: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
6070: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
6080: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
6090: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
60a0: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
60b0: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
60c0: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
60d0: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
60e0: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
60f0: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
6100: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
6110: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
6120: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
6130: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
6140: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
6150: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
6160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
61b0: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
61c0: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
61d0: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
61e0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
61f0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6200: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
6210: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
6220: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
6230: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
6240: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
6250: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70  ..**.** The P1 p
6260: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
6270: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79  actually used by
6280: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48   this opcode.  H
6290: 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73  owever, it.** is
62a0: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
62b0: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30  o 1 instead of 0
62c0: 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   as a hint to th
62d0: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  e command-line s
62e0: 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69  hell.** that thi
62f0: 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f  s Goto is the bo
6300: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61  ttom of a loop a
6310: 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65  nd that the line
6320: 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a  s from P2 down.*
6330: 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  * to the current
6340: 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20   line should be 
6350: 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50  indented for EXP
6360: 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  LAIN output..*/.
6370: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6390: 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  ump */.jump_to_p
63a0: 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
63b0: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70  interrupt:.  pOp
63c0: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
63d0: 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f  - 1];..  /* Opco
63e0: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
63f0: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
6400: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
6410: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
6420: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f  * OP_VNext, or O
6430: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6440: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6450: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6460: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6470: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6480: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6490: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
64a0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
64b0: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
64c0: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
64d0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
64e0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
64f0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6500: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6510: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6520: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6530: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6540: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6550: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6560: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6570: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6580: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6590: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
65a0: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
65b0: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
65c0: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
65d0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
65e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
65f0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6600: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6610: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6620: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6630: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6640: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6650: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6660: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6670: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6680: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6690: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
66a0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
66b0: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
66c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
66d0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
66e0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
66f0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6700: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6710: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6720: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6730: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6740: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6750: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6760: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6770: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6780: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6790: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
67a0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
67b0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
67c0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
67d0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
67e0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
67f0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6800: 20 20 69 66 28 20 6e 56 6d 53 74 65 70 3e 3d 6e    if( nVmStep>=n
6810: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26 26  ProgressLimit &&
6820: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
6830: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
6840: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6850: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6860: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6870: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6880: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6890: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
68a0: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
68b0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
68c0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
68d0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
68e0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
68f0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6900: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6910: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6920: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6930: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6940: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6950: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6960: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6970: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6980: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6990: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
69a0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
69b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
69c0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
69d0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
69e0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
69f0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6a00: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6a10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6a20: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6a30: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6a40: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6a50: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6a60: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6a70: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6a80: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6a90: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6aa0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6ab0: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6ac0: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6ad0: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6ae0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6af0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6b00: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6b10: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6b20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6b30: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6b40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6b50: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6b60: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6b70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6b80: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6b90: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6ba0: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6bb0: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6bc0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6bd0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6be0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6c00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6c10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c20: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6c30: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6c40: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6c50: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6c60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6c70: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6c80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6c90: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6ca0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6cb0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6cc0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6cd0: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6ce0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6cf0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6d00: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6d10: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6d20: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6d30: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6d40: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6d50: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6d60: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6d70: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6d80: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6d90: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6da0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6db0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6dc0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6dd0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6de0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6df0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6e00: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6e10: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6e20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6e30: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6e40: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6e50: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6e60: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6e70: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6e80: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6e90: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6ea0: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6eb0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6ec0: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6ed0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6ee0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6ef0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
6f00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6f10: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
6f20: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
6f30: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
6f40: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
6f50: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6f60: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
6f70: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
6f80: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
6f90: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
6fa0: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
6fb0: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
6fc0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
6fd0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6fe0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6ff0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
7000: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
7010: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
7020: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
7030: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7040: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7050: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7060: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7070: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7080: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7090: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
70a0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
70b0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
70c0: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
70d0: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
70e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
70f0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
7100: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
7110: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
7120: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
7130: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7140: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7150: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7160: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7170: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7180: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7190: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
71a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
71b0: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
71c0: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
71d0: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
71e0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
71f0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
7200: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
7210: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7220: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
7230: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7240: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7250: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7260: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7270: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7280: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7290: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
72a0: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
72b0: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
72c0: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
72d0: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
72e0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
72f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
7300: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
7310: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7320: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
7330: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7340: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7350: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7360: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7370: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7380: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7390: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
73a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
73b0: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
73c0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
73d0: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
73e0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
73f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7400: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
7410: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
7420: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7430: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7440: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7450: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7460: 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61  if r[P3]=null ha
7470: 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  lt.**.** Check t
7480: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
7490: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20  ster P3.  If it 
74a0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
74b0: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
74c0: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
74d0: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
74e0: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
74f0: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
7500: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
7510: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
7520: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
7530: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
7540: 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  p..** The P5 par
7550: 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65  ameter should be
7560: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48   1..*/.case OP_H
7570: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
7580: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
7590: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
75a0: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  p3];.  if( (pIn3
75b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
75c0: 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ll)==0 ) break;.
75d0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
75e0: 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a  h into OP_Halt *
75f0: 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  /.}../* Opcode: 
7600: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
7610: 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69   P5.**.** Exit i
7620: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c  mmediately.  All
7630: 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65   open cursors, e
7640: 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a  tc are closed.**
7650: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
7660: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
7670: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75  result code retu
7680: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
7690: 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f  exec(), sqlite3_
76a0: 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73  reset(),.** or s
76b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
76c0: 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c  ).  For a normal
76d0: 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75   halt, this shou
76e0: 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20  ld be SQLITE_OK 
76f0: 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f  (0)..** For erro
7700: 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f  rs, it can be so
7710: 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20  me other value. 
7720: 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50   If P1!=0 then P
7730: 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65  2 will determine
7740: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
7750: 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  ot to rollback t
7760: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
7770: 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20  action.  Do not 
7780: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50  rollback.** if P
7790: 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74  2==OE_Fail. Do t
77a0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50  he rollback if P
77b0: 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20  2==OE_Rollback. 
77c0: 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74   If P2==OE_Abort
77d0: 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f  ,.** then back o
77e0: 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ut all changes t
77f0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
7800: 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78  d during this ex
7810: 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ecution of the.*
7820: 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e  * VDBE, but do n
7830: 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  ot rollback the 
7840: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a  transaction. .**
7850: 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
7860: 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73   null then it is
7870: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
7880: 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  e string..**.** 
7890: 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65  P5 is a value be
78a0: 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69  tween 0 and 4, i
78b0: 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d  nclusive, that m
78c0: 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73  odifies the P4 s
78d0: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tring..**.**    
78e0: 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a  0:  (no change).
78f0: 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55  **    1:  NOT NU
7900: 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69  LL contraint fai
7910: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a  led: P4.**    2:
7920: 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61    UNIQUE constra
7930: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7940: 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63  *    3:  CHECK c
7950: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7960: 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46  : P4.**    4:  F
7970: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
7980: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7990: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
79a0: 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20  not zero and P4 
79b0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76  is NULL, then ev
79c0: 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74  erything after t
79d0: 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69  he ":" is.** omi
79e0: 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  tted..**.** Ther
79f0: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20  e is an implied 
7a00: 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73  "Halt 0 0 0" ins
7a10: 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65  truction inserte
7a20: 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e  d at the very en
7a30: 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72  d of.** every pr
7a40: 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d  ogram.  So a jum
7a50: 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  p past the last 
7a60: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7a70: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73  he program.** is
7a80: 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65   the same as exe
7a90: 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a  cuting Halt..*/.
7aa0: 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a  case OP_Halt: {.
7ab0: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
7ac0: 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a  ame;.  int pcx;.
7ad0: 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70  .  pcx = (int)(p
7ae0: 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28  Op - aOp);.  if(
7af0: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
7b00: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
7b10: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
7b20: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
7b30: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
7b40: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
7b50: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61  ame. */.    pFra
7b60: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
7b70: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
7b80: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
7b90: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
7ba0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7bb0: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
7bc0: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
7bd0: 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64   pcx = sqlite3Vd
7be0: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
7bf0: 46 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20  Frame);.    if( 
7c00: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
7c10: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
7c20: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
7c30: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
7c40: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7c50: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
7c60: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
7c70: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
7c80: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
7c90: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
7ca0: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
7cb0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
7cc0: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
7cd0: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
7ce0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
7cf0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
7d00: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
7d10: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
7d20: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
7d30: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7d40: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
7d50: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
7d60: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
7d70: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
7d80: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
7d90: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
7da0: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
7db0: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
7dc0: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
7dd0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
7de0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
7df0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
7e00: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7e10: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73  ->pc = pcx;.  as
7e20: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34  sert( pOp->p5<=4
7e30: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20   );.  if( p->rc 
7e40: 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
7e50: 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  p5 ){.      stat
7e60: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  ic const char * 
7e70: 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d  const azType[] =
7e80: 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22   { "NOT NULL", "
7e90: 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22  UNIQUE", "CHECK"
7ea0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
7ed0: 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a  FOREIGN KEY" };.
7ee0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7ef0: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
7f00: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7f10: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
7f20: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7f30: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
7f40: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7f50: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71  5==4 );.      sq
7f60: 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
7f70: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7f80: 20 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65   failed", azType
7f90: 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20  [pOp->p5-1]);.  
7fa0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
7fb0: 7a 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  z ){.        p->
7fc0: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
7fd0: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a  3MPrintf(db, "%z
7fe0: 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73  : %s", p->zErrMs
7ff0: 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  g, pOp->p4.z);. 
8000: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
8010: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
8020: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
8030: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
8040: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
8050: 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62  log(pOp->p1, "ab
8060: 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73  ort at %d in [%s
8070: 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e  ]: %s", pcx, p->
8080: 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
8090: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
80a0: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
80b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
80c0: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
80d0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
80e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
80f0: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
8100: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
8110: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
8120: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
8130: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8140: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
8150: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
8160: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
8170: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8180: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
8190: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
81a0: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
81b0: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
81c0: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
81d0: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
81e0: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
81f0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
8200: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8210: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
8220: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8230: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
8240: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
8250: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
8260: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
8270: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8280: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
8290: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
82a0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
82b0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
82c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
82d0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
82e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
82f0: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
8300: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8310: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8320: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8330: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
8340: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
8350: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8360: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8370: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
8380: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8390: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
83a0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
83b0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
83c0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
83d0: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
83e0: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
83f0: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
8400: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8410: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
8420: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
8430: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
8440: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8450: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
8460: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
8470: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
8480: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
8490: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
84a0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
84b0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
84c0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
84d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
84e0: 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  LOAT, out2 */.  
84f0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8500: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8510: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8520: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
8530: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
8540: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
8550: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20   );.  pOut->u.r 
8560: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
8570: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
8580: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
8590: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
85a0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
85b0: 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a   r[P2]='P4'.**.*
85c0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
85d0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
85e0: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
85f0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
8600: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
8610: 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64  o a String opcod
8620: 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  e before it is e
8630: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
8640: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
8650: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
8660: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
8670: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
8680: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
8690: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
86a0: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
86b0: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
86c0: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
86d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
86e0: 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20  TRING, out2 */. 
86f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8700: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
8710: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8720: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d  (p, pOp);.  pOp-
8730: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
8740: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
8750: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
8760: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
8770: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8780: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
8790: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
87a0: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
87b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
87c0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
87d0: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
87e0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
87f0: 41 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72  ATIC);.    asser
8800: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8810: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54   || rc==SQLITE_T
8820: 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28  OOBIG );.    if(
8830: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
8840: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
8850: 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
8860: 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ding) ) goto no_
8870: 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
8880: 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e   pOut->szMalloc>
8890: 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  0 && pOut->zMall
88a0: 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20  oc==pOut->z );. 
88b0: 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d     assert( VdbeM
88c0: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d  emDynamic(pOut)=
88d0: 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 );.    pOut->
88e0: 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  szMalloc = 0;.  
88f0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
8900: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
8910: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
8920: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
8930: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
8940: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
8950: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
8960: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
8970: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
8980: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
8990: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
89a0: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65  Out->n;.  }.  te
89b0: 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
89c0: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e  TE_TOOBIG );.#en
89d0: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
89e0: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
89f0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
8a00: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
8a10: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73  o_big;.  }.  ass
8a20: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
8a30: 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  OK );.  /* Fall 
8a40: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
8a50: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
8a60: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
8a70: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
8a80: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
8a90: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8aa0: 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  'P4' (len=P1).**
8ab0: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
8ac0: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
8ad0: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
8ae0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
8af0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
8b00: 50 33 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P3 is not zero a
8b10: 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  nd the content o
8b20: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
8b30: 20 65 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68   equal to P5, th
8b40: 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79  en.** the dataty
8b50: 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74  pe of the regist
8b60: 65 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74  er P2 is convert
8b70: 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65  ed to BLOB.  The
8b80: 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74   content is.** t
8b90: 68 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65  he same sequence
8ba0: 20 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73   of bytes, it is
8bb0: 20 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65   merely interpre
8bc0: 74 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e  ted as a BLOB in
8bd0: 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74  stead.** of a st
8be0: 72 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68  ring, as if it h
8bf0: 61 64 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49  ad been CAST.  I
8c00: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a  n other words:.*
8c10: 2a 0a 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61  *.** if( P3!=0 a
8c20: 6e 64 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29  nd reg[P3]==P5 )
8c30: 20 72 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54   reg[P2] := CAST
8c40: 28 72 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42  (reg[P2] as BLOB
8c50: 29 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ).*/.case OP_Str
8c60: 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ing: {          
8c70: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
8c80: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
8c90: 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  0 );.  pOut = ou
8ca0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
8cb0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
8cc0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
8cd0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
8ce0: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
8cf0: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
8d00: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
8d10: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
8d20: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
8d30: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
8d40: 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
8d50: 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d  TE_LIKE_DOESNT_M
8d60: 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28  ATCH_BLOBS.  if(
8d70: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
8d80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8d90: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
8da0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
8db0: 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
8dc0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
8dd0: 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
8de0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
8df0: 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
8e00: 3d 3d 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74  ==pOp->p5 ) pOut
8e10: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
8e20: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
8e30: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64  M_Term;.  }.#end
8e40: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
8e50: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50  * Opcode: Null P
8e60: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
8e70: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50  ynopsis: r[P2..P
8e80: 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72  3]=NULL.**.** Wr
8e90: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
8ea0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
8eb0: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
8ec0: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
8ed0: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
8ee0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
8ef0: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
8f00: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
8f10: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
8f20: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
8f30: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
8f40: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
8f50: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
8f60: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
8f70: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
8f80: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
8f90: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
8fa0: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
8fb0: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
8fc0: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
8fd0: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
8fe0: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
8ff0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
9000: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
9010: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
9020: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
9030: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9040: 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31  .  int cnt;.  u1
9050: 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f  6 nullFlag;.  pO
9060: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9070: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63  ase(p, pOp);.  c
9080: 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70  nt = pOp->p3-pOp
9090: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
90a0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
90b0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
90c0: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ) );.  pOut->fla
90d0: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
90e0: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
90f0: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
9100: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70   : MEM_Null;.  p
9110: 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 77 68  Out->n = 0;.  wh
9120: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
9130: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
9140: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9150: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9160: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9170: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
9180: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
9190: 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Flag;.    pOut->
91a0: 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74 2d 2d  n = 0;.    cnt--
91b0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
91c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
91d0: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
91e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
91f0: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
9200: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
9210: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
9220: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
9230: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
9240: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
9250: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
9260: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
9270: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
9280: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
9290: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
92a0: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
92b0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
92c0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
92d0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
92e0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
92f0: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
9300: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9310: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
9320: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
9330: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9340: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9350: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
9360: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9370: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9380: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
9390: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
93a0: 6c 61 67 73 26 7e 28 4d 45 4d 5f 55 6e 64 65 66  lags&~(MEM_Undef
93b0: 69 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b  ined|MEM_AffMask
93c0: 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62  ))|MEM_Null;.  b
93d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
93e0: 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a  de: Blob P1 P2 *
93f0: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
9400: 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e  s: r[P2]=P4 (len
9410: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  =P1).**.** P4 po
9420: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
9430: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
9440: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
9450: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
9460: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
9470: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
9480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
9490: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
94a0: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
94b0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
94c0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
94d0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
94e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
94f0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
9500: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
9510: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
9520: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9530: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9540: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9550: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9560: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
9570: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9580: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70  ynopsis: r[P2]=p
9590: 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a  arameter(P1,P4).
95a0: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
95b0: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
95c0: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20  nd parameter P1 
95d0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
95e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
95f0: 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64  rameter is named
9600: 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20  , then its name 
9610: 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a  appears in P4..*
9620: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
9630: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
9640: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
9650: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
9660: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
9670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
9680: 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  t2 */.  Mem *pVa
9690: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
96a0: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
96b0: 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
96c0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
96d0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20  Op->p1<=p->nVar 
96e0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
96f0: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
9700: 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56  ->p4.z==sqlite3V
9710: 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d  ListNumToName(p-
9720: 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29  >pVList,pOp->p1)
9730: 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d   );.  pVar = &p-
9740: 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20  >aVar[pOp->p1 - 
9750: 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  1];.  if( sqlite
9760: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
9770: 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Var) ){.    goto
9780: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9790: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
97a0: 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
97b0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
97c0: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
97d0: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
97e0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
97f0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
9800: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9810: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
9820: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9830: 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d  [P2@P3]=r[P1@P3]
9840: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
9850: 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  P3 values in reg
9860: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
9870: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
9880: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
9890: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
98a0: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65   P1..P1+P3-1 are
98b0: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
98c0: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
98d0: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
98e0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
98f0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
9900: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
9910: 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61  verlap.  It is a
9920: 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50  n error.** for P
9930: 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  3 to be less tha
9940: 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n 1..*/.case OP_
9950: 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Move: {.  int n;
9960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9970: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
9980: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
9990: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
99a0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
99b0: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
99c0: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
99d0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
99e0: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
99f0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
9a00: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
9a10: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
9a20: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
9a30: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
9a40: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
9a50: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
9a60: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9a70: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
9a80: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
9a90: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
9aa0: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
9ab0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9ac0: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
9ad0: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pIn1<=&aMem[(p-
9ae0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9af0: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
9b00: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
9b10: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
9b20: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9b30: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9b40: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
9b50: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
9b60: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9b70: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
9b80: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
9b90: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
9ba0: 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b  copyFrom<pOut ){
9bb0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
9bc0: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e  opyFrom += pOp->
9bd0: 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23  p2 - p1;.    }.#
9be0: 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65  endif.    Deephe
9bf0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
9c00: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9c10: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
9c20: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
9c30: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pOut++;.  }while
9c40: 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b  ( --n );.  break
9c50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9c60: 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20  Copy P1 P2 P3 * 
9c70: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9c80: 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50  [P2@P3+1]=r[P1@P
9c90: 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  3+1].**.** Make 
9ca0: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
9cb0: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e  ers P1..P1+P3 in
9cc0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
9cd0: 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  .P2+P3..**.** Th
9ce0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
9cf0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
9d00: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
9d10: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
9d20: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
9d30: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
9d40: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
9d50: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
9d60: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20  se OP_Copy: {.  
9d70: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
9d80: 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20  p->p3;.  pIn1 = 
9d90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9da0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9db0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
9dc0: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
9dd0: 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20  .  while( 1 ){. 
9de0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9df0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
9e00: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
9e10: 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  em);.    Deephem
9e20: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23  eralize(pOut);.#
9e30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
9e40: 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  UG.    pOut->pSc
9e50: 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e  opyFrom = 0;.#en
9e60: 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52  dif.    REGISTER
9e70: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70  _TRACE(pOp->p2+p
9e80: 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b  Op->p3-n, pOut);
9e90: 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d  .    if( (n--)==
9ea0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
9eb0: 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b  Out++;.    pIn1+
9ec0: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
9ed0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43  }../* Opcode: SC
9ee0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
9ef0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9f00: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d  2]=r[P1].**.** M
9f10: 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  ake a shallow co
9f20: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  py of register P
9f30: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
9f40: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
9f50: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
9f60: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
9f70: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49  of the value.  I
9f80: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
9f90: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
9fa0: 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70  ob, then the cop
9fb0: 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e  y is only a poin
9fc0: 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72  ter to the.** or
9fd0: 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65  iginal and hence
9fe0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
9ff0: 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c   changes so will
a000: 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f   the copy..** Wo
a010: 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67  rse, if the orig
a020: 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61  inal is dealloca
a030: 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65  ted, the copy be
a040: 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a  comes invalid..*
a050: 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72  * Thus the progr
a060: 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65  am must guarante
a070: 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  e that the origi
a080: 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61  nal will not cha
a090: 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68  nge.** during th
a0a0: 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68  e lifetime of th
a0b0: 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f  e copy.  Use OP_
a0c0: 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63  Copy to make a c
a0d0: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e  omplete.** copy.
a0e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70  .*/.case OP_SCop
a0f0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a100: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a110: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a120: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
a130: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
a140: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
a150: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
a160: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
a170: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
a180: 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20  _Ephem);.#ifdef 
a190: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
a1a0: 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  f( pOut->pScopyF
a1b0: 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70  rom==0 ) pOut->p
a1c0: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31  ScopyFrom = pIn1
a1d0: 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  ;.#endif.  break
a1e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a1f0: 49 6e 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20  IntCopy P1 P2 * 
a200: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a210: 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a   r[P2]=r[P1].**.
a220: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
a230: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
a240: 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
a250: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
a260: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
a270: 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76  s an optimized v
a280: 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20  ersion of SCopy 
a290: 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20  that works only 
a2a0: 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76  for integer.** v
a2b0: 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alues..*/.case O
a2c0: 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20  P_IntCopy: {    
a2d0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a2e0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a2f0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
a300: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
a310: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
a320: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
a330: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
a340: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a350: 49 6e 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31  Int64(pOut, pIn1
a360: 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
a370: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
a380: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
a390: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a3a0: 3a 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32  : output=r[P1@P2
a3b0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ].**.** The regi
a3c0: 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68  sters P1 through
a3d0: 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e   P1+P2-1 contain
a3e0: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
a3f0: 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69  .** results. Thi
a400: 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
a410: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  the sqlite3_step
a420: 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69  () call to termi
a430: 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20  nate.** with an 
a440: 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72  SQLITE_ROW retur
a450: 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65  n code and it se
a460: 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65  ts up the sqlite
a470: 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74  3_stmt.** struct
a480: 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61  ure to provide a
a490: 63 63 65 73 73 20 74 6f 20 74 68 65 20 72 28 50  ccess to the r(P
a4a0: 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76  1)..r(P1+P2-1) v
a4b0: 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20  alues as.** the 
a4c0: 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63  result row..*/.c
a4d0: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
a4e0: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
a4f0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
a500: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
a510: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
a520: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
a530: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
a540: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
a550: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
a560: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
a570: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a580: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
a590: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
a5a0: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
a5b0: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
a5c0: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
a5d0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
a5e0: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
a5f0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
a600: 6d 69 74 20 0a 20 20 20 26 26 20 64 62 2d 3e 78  mit .   && db->x
a610: 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72  Progress(db->pPr
a620: 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20  ogressArg)!=0.  
a630: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
a640: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
a650: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
a660: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23  _to_error;.  }.#
a670: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
a680: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
a690: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
a6a0: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
a6b0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
a6c0: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
a6d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a6e0: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
a6f0: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
a700: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
a710: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
a720: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
a730: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
a740: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
a750: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
a760: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
a770: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
a780: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
a790: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
a7a0: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
a7b0: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
a7c0: 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
a7d0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
a7e0: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
a7f0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
a800: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
a810: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
a820: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
a830: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
a840: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
a850: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
a860: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
a870: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
a880: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
a890: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
a8a0: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
a8b0: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
a8c0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a8d0: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
a8e0: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
a8f0: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
a900: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
a910: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
a920: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a930: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
a940: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
a950: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
a960: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
a970: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
a980: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
a990: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a9a0: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
a9b0: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
a9c0: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
a9d0: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
a9e0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
a9f0: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
aa00: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
aa10: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
aa20: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
aa30: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
aa40: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
aa50: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
aa60: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
aa70: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
aa80: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
aa90: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
aaa0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
aab0: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
aac0: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
aad0: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
aae0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
aaf0: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
ab00: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
ab10: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
ab20: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
ab30: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
ab40: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
ab50: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
ab60: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
ab70: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
ab80: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
ab90: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
aba0: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
abb0: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
abc0: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
abd0: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
abe0: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
abf0: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
ac00: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
ac10: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
ac20: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
ac30: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
ac40: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
ac50: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
ac60: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
ac70: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
ac80: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
ac90: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
aca0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
acb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
acc0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
acd0: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
ace0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
acf0: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
ad00: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
ad10: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
ad20: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
ad30: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
ad40: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
ad50: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
ad60: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
ad70: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
ad80: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ad90: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
ada0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
adb0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
adc0: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
add0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
ade0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
adf0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
ae00: 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20   if( db->mTrace 
ae10: 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  & SQLITE_TRACE_R
ae20: 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54  OW ){.    db->xT
ae30: 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43  race(SQLITE_TRAC
ae40: 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63  E_ROW, db->pTrac
ae50: 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d  eArg, p, 0);.  }
ae60: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
ae70: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
ae80: 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
ae90: 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20  p - aOp) + 1;.  
aea0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b  rc = SQLITE_ROW;
aeb0: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
aec0: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
aed0: 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20  e: Concat P1 P2 
aee0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
aef0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b  is: r[P3]=r[P2]+
af00: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P1].**.** Add 
af10: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
af20: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
af30: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
af40: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
af50: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
af60: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
af70: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
af80: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
af90: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
afa0: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
afb0: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
afc0: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
afd0: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
afe0: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
aff0: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
b000: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
b010: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
b020: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
b030: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
b040: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
b050: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
b060: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
b070: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
b080: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b090: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
b0a0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b0b0: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
b0c0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b0d0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
b0e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
b0f0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
b100: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
b110: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
b120: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
b130: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
b140: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
b150: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
b160: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
b170: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
b180: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
b190: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
b1a0: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
b1b0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
b1c0: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
b1d0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
b1e0: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
b1f0: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
b200: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
b210: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
b220: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
b230: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
b240: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
b250: 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  big;.  }.  if( s
b260: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
b270: 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
b280: 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32  te+2, pOut==pIn2
b290: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
b2a0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _mem;.  }.  MemS
b2b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
b2c0: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
b2d0: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
b2e0: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
b2f0: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
b300: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
b310: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
b320: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
b330: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
b340: 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70  >z[nByte]=0;.  p
b350: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20  Out->z[nByte+1] 
b360: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  = 0;.  pOut->fla
b370: 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
b380: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
b390: 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
b3a0: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
b3b0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
b3c0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
b3d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b3e0: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
b3f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b400: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b  : r[P3]=r[P1]+r[
b410: 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P2].**.** Add th
b420: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b430: 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  ter P1 to the va
b440: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b450: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b460: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b470: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b480: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b490: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b4a0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b4b0: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
b4c0: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
b4d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b4e0: 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]*r[P2].**
b4f0: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
b500: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b510: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
b520: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b530: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
b540: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b550: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b560: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b570: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b580: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b590: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
b5a0: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
b5b0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b5c0: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
b5d0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
b5e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b5f0: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
b600: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b610: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b620: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b630: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b640: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b650: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b660: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b670: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
b680: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
b690: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b6a0: 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a  3]=r[P2]/r[P1].*
b6b0: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
b6c0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b6d0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
b6e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b6f0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b700: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b710: 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50  ster P3 (P3=P2/P
b720: 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  1). If the value
b730: 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
b740: 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
b750: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
b760: 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20  NULL. If either 
b770: 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c  input is .** NUL
b780: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b790: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b7a0: 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50  ode: Remainder P
b7b0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b7c0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b7d0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b7e0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b7f0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b800: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b810: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b820: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b830: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b840: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b850: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b860: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b870: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b880: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b890: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b8a0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b8b0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b8c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b8d0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b8e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b8f0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b900: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b910: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b920: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b930: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b940: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b950: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b960: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b970: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b980: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b990: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b9a0: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b9b0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b9c0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b9d0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b9e0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b9f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ba00: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
ba10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
ba20: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
ba30: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
ba40: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
ba50: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
ba60: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
ba70: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
ba80: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
ba90: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
baa0: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
bab0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
bac0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
bad0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
bae0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
baf0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
bb00: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
bb10: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
bb20: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
bb30: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
bb40: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
bb50: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
bb60: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
bb70: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
bb80: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
bb90: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
bba0: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
bbb0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
bbc0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
bbd0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
bbe0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
bbf0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
bc00: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
bc10: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
bc20: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
bc30: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
bc40: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
bc50: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
bc60: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
bc70: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
bc80: 73 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  s;.  if( (type1 
bc90: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
bca0: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
bcb0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
bcc0: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
bcd0: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
bce0: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
bcf0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
bd00: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
bd10: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
bd20: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
bd30: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
bd40: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bd50: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
bd60: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
bd70: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
bd80: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
bd90: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
bda0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
bdb0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
bdc0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
bdd0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
bde0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bdf0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
be00: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
be10: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
be20: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
be30: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
be40: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
be50: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
be60: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
be70: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
be80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
be90: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
bea0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
beb0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bec0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bed0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bee0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bef0: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
bf00: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bf10: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bf20: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
bf30: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
bf40: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bf50: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
bf60: 65 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d  e if( (flags & M
bf70: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
bf80: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
bf90: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
bfa0: 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  l;.  }else{.    
bfb0: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
bfc0: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
bfd0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
bfe0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
bff0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
c000: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
c010: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c020: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
c030: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
c040: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
c050: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c060: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c070: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
c080: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c090: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
c0a0: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
c0b0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c0c0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
c0d0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
c0e0: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
c0f0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
c100: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c110: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
c120: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
c130: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
c140: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c150: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
c160: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
c170: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c180: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
c190: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
c1a0: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
c1b0: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
c1c0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c1d0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c1e0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c1f0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c200: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c210: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
c220: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
c230: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c240: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
c250: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c260: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
c270: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
c280: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c290: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c2a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
c2b0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
c2c0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      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 7d  t_is_null;.    }
c2f0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
c300: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c310: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c320: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
c330: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
c340: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
c350: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
c360: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
c370: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
c380: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
c390: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
c3a0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c3b0: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
c3c0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
c3d0: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
c3e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c3f0: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
c400: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
c410: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
c420: 6c 53 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20  lSeq object. If 
c430: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
c440: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c450: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
c460: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
c470: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
c480: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
c490: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
c4a0: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
c4b0: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
c4c0: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
c4d0: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
c4e0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
c4f0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
c500: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
c510: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
c520: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
c530: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
c540: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
c550: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
c560: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
c570: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
c580: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
c590: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c5a0: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c5b0: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c5c0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c5d0: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c5e0: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c5f0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c600: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c610: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c620: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c630: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c640: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c650: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c660: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c670: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c680: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c690: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c6a0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c6b0: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c6c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c6d0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c6e0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c6f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c700: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c710: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c720: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c730: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
c740: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
c750: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
c760: 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d  [P3]=r[P1]&r[P2]
c770: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
c780: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
c790: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
c7a0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
c7b0: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
c7c0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c7d0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
c7e0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
c7f0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
c800: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
c810: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
c820: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c830: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
c840: 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]|r[P2].**.** T
c850: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c860: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
c870: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
c880: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
c890: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c8a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c8b0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c8c0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c8d0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c8e0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
c8f0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
c900: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c910: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72  : r[P3]=r[P2]<<r
c920: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
c930: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
c940: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c950: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
c960: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
c970: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
c980: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
c990: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
c9a0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
c9b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
c9c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
c9d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
c9e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
c9f0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
ca00: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
ca10: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ca20: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
ca30: 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]>>r[P1].**.** 
ca40: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
ca50: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
ca60: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
ca70: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
ca80: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
ca90: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
caa0: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
cab0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
cac0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
cad0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
cae0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
caf0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
cb00: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
cb10: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb30: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
cb40: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
cb50: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
cb60: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
cb70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cb80: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
cb90: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cba0: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cbc0: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
cbd0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cbe0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
cbf0: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
cc00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cc10: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
cc20: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
cc30: 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a  4 iA;.  u64 uA;.
cc40: 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f    i64 iB;.  u8 o
cc50: 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p;..  pIn1 = &aM
cc60: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
cc70: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
cc80: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
cc90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
cca0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
ccb0: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
ccc0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
ccd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cce0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
ccf0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
cd00: 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iA = sqlite3Vdb
cd10: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
cd20: 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56  .  iB = sqlite3V
cd30: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
cd40: 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f  );.  op = pOp->o
cd50: 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d  pcode;.  if( op=
cd60: 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20  =OP_BitAnd ){.  
cd70: 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65    iA &= iB;.  }e
cd80: 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  lse if( op==OP_B
cd90: 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c  itOr ){.    iA |
cda0: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
cdb0: 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61  ( iB!=0 ){.    a
cdc0: 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68  ssert( op==OP_Sh
cdd0: 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d  iftRight || op==
cde0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a  OP_ShiftLeft );.
cdf0: 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74  .    /* If shift
ce00: 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76  ing by a negativ
ce10: 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20  e amount, shift 
ce20: 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72  in the other dir
ce30: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66  ection */.    if
ce40: 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( iB<0 ){.      
ce50: 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74  assert( OP_Shift
ce60: 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c  Right==OP_ShiftL
ce70: 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f  eft+1 );.      o
ce80: 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65  p = 2*OP_ShiftLe
ce90: 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20  ft + 1 - op;.   
cea0: 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29     iB = iB>(-64)
ceb0: 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20   ? -iB : 64;.   
cec0: 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d   }..    if( iB>=
ced0: 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d  64 ){.      iA =
cee0: 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f   (iA>=0 || op==O
cef0: 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30  P_ShiftLeft) ? 0
cf00: 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65   : -1;.    }else
cf10: 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  {.      memcpy(&
cf20: 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28  uA, &iA, sizeof(
cf30: 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uA));.      if( 
cf40: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
cf50: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c   ){.        uA <
cf60: 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c  <= iB;.      }el
cf70: 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e  se{.        uA >
cf80: 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f  >= iB;.        /
cf90: 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e  * Sign-extend on
cfa0: 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f   a right shift o
cfb0: 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d  f a negative num
cfc0: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ber */.        i
cfd0: 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20  f( iA<0 ) uA |= 
cfe0: 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66  ((((u64)0xffffff
cff0: 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66  ff)<<32)|0xfffff
d000: 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b  fff) << (64-iB);
d010: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d  .      }.      m
d020: 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20  emcpy(&iA, &uA, 
d030: 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20  sizeof(iA));.   
d040: 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
d050: 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65  .i = iA;.  MemSe
d060: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
d070: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d080: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d090: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
d0a0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
d0b0: 3a 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32  : r[P1]=r[P1]+P2
d0c0: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
d0d0: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
d0e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d0f0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
d100: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
d110: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
d120: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
d130: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
d140: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
d150: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
d160: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
d170: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d180: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d190: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d1a0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d1b0: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
d1c0: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
d1d0: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
d1e0: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
d1f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d200: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
d210: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
d220: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
d230: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d240: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
d250: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
d260: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
d270: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
d280: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
d290: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
d2a0: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
d2b0: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
d2c0: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
d2d0: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
d2e0: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
d2f0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
d300: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
d310: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
d320: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d330: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
d340: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d350: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
d360: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d370: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
d380: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
d390: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
d3a0: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
d3b0: 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  g);.    VdbeBran
d3c0: 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66  chTaken((pIn1->f
d3d0: 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30  lags&MEM_Int)==0
d3e0: 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70  , 2);.    if( (p
d3f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d400: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
d410: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
d420: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
d430: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
d440: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
d450: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
d460: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
d470: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
d480: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d  p_to_p2;.      }
d490: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d  .    }.  }.  Mem
d4a0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
d4b0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
d4c0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
d4d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d4e0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
d4f0: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
d500: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
d510: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
d520: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
d530: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
d540: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
d550: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
d560: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
d570: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
d580: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
d590: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
d5a0: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
d5b0: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
d5c0: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
d5d0: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
d5e0: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
d5f0: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
d600: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
d610: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
d620: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
d630: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
d640: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
d650: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
d660: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
d670: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d680: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
d690: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d6a0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
d6b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
d6c0: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
d6d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
d6e0: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
d6f0: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
d700: 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50  pcode: Cast P1 P
d710: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
d720: 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
d730: 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65  P1]).**.** Force
d740: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d750: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
d760: 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64  the type defined
d770: 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c   by P2..** .** <
d780: 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  ul>.** <li> P2==
d790: 27 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a  'A' &rarr; BLOB.
d7a0: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20  ** <li> P2=='B' 
d7b0: 26 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c  &rarr; TEXT.** <
d7c0: 6c 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72  li> P2=='C' &rar
d7d0: 72 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c  r; NUMERIC.** <l
d7e0: 69 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72  i> P2=='D' &rarr
d7f0: 3b 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69  ; INTEGER.** <li
d800: 3e 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b  > P2=='E' &rarr;
d810: 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a   REAL.** </ul>.*
d820: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
d830: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
d840: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
d850: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
d860: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  LL..*/.case OP_C
d870: 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ast: {          
d880: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
d890: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
d8a0: 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2>=SQLITE_AFF_
d8b0: 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c  BLOB && pOp->p2<
d8c0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
d8d0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d8e0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d8f0: 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65  AFF_TEXT );.  te
d900: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d910: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
d920: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d930: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d940: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
d950: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
d960: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  p2==SQLITE_AFF_I
d970: 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74  NTEGER );.  test
d980: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
d990: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
d9a0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
d9b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
d9c0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d9d0: 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45   pIn1);.  rc = E
d9e0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
d9f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
da00: 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d  mCast(pIn1, pOp-
da10: 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  >p2, encoding);.
da20: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
da30: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69  BSIZE(pIn1);.  i
da40: 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
da50: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
da60: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
da70: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
da80: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
da90: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
daa0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
dab0: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72  sis: IF r[P3]==r
dac0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  [P1].**.** Compa
dad0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
dae0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
daf0: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
db00: 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  ==reg(P1) then.*
db10: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
db20: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
db30: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
db40: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
db50: 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65  5, then.** store
db60: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
db70: 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67  omparison in reg
db80: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
db90: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
dba0: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
dbb0: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
dbc0: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
dbd0: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
dbe0: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
dbf0: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
dc00: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
dc10: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
dc20: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
dc30: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
dc40: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
dc50: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
dc60: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
dc70: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
dc80: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
dc90: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
dca0: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
dcb0: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
dcc0: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
dcd0: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
dce0: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
dcf0: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
dd00: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
dd10: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
dd20: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
dd30: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
dd40: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dd50: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
dd60: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
dd70: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
dd80: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
dd90: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
dda0: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
ddb0: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
ddc0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
ddd0: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
dde0: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
ddf0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
de00: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
de10: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
de20: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
de30: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
de40: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
de50: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
de60: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
de70: 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74   is used to do t
de80: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
de90: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
dea0: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
deb0: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
dec0: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
ded0: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
dee0: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
def0: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
df00: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
df10: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
df20: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
df30: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
df40: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
df50: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
df60: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
df70: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
df80: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
df90: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
dfa0: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  obs..**.** If SQ
dfb0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
dfc0: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
dfd0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
dfe0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
dff0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
e000: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
e010: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
e020: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
e030: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
e040: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
e050: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
e060: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
e070: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
e080: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
e090: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
e0a0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e0b0: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
e0c0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
e0d0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
e0e0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e0f0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
e100: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a  ted from P5..**.
e110: 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54  ** If both SQLIT
e120: 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51  E_STOREP2 and SQ
e130: 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c  LITE_KEEPNULL fl
e140: 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e  ags are set then
e150: 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20   the.** content 
e160: 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79  of r[P2] is only
e170: 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20   changed if the 
e180: 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  new value is NUL
e190: 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a  L or 0 (false)..
e1a0: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
e1b0: 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d  s, a prior r[P2]
e1c0: 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20   value will not 
e1d0: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62  be overwritten b
e1e0: 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f  y 1 (true)..*/./
e1f0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
e200: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e210: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
e220: 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]!=r[P1].**.** T
e230: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e240: 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64  ike the Eq opcod
e250: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e260: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e270: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
e280: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
e290: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
e2a0: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
e2b0: 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Eq opcode for.
e2c0: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
e2d0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e2e0: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
e2f0: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
e300: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
e310: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
e320: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
e330: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
e340: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
e350: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
e360: 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20  or 1 (true)..** 
e370: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
e380: 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61  a prior r[P2] va
e390: 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  lue will not be 
e3a0: 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 30  overwritten by 0
e3b0: 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20   (false)..*/./* 
e3c0: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
e3d0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e3e0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
e3f0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
e400: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
e410: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
e420: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
e430: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
e440: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
e450: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
e460: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e470: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
e480: 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72  5 store.** the r
e490: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
e4a0: 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e  son (0 or 1 or N
e4b0: 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74  ULL) into regist
e4c0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
e4d0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
e4e0: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
e4f0: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
e500: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
e510: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
e520: 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68  then the take th
e530: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
e540: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e550: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
e560: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
e570: 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f  ough if either o
e580: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
e590: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
e5a0: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
e5b0: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
e5c0: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
e5d0: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
e5e0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
e5f0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
e600: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
e610: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
e620: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
e630: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
e640: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
e650: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
e660: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
e670: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
e680: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
e690: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
e6a0: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
e6b0: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
e6c0: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
e6d0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
e6e0: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
e6f0: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
e700: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e710: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
e720: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
e730: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
e740: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
e750: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
e760: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
e770: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
e780: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
e790: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
e7a0: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
e7b0: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
e7c0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
e7d0: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
e7e0: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
e7f0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
e800: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
e810: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
e820: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
e830: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
e840: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
e850: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
e860: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
e870: 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20  .** P4 is  used 
e880: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
e890: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
e8a0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
e8b0: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
e8c0: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
e8d0: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
e8e0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
e8f0: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
e900: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
e910: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
e920: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
e930: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
e940: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
e950: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
e960: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e970: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
e980: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
e990: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e9a0: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f  than blobs..*/./
e9b0: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
e9c0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e9d0: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
e9e0: 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]<=r[P1].**.** T
e9f0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
ea00: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ea10: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ea20: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ea30: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
ea40: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
ea50: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
ea60: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
ea70: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
ea80: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
ea90: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
eaa0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
eab0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
eac0: 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50  code: Gt P1 P2 P
ead0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
eae0: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b  sis: IF r[P3]>r[
eaf0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P1].**.** This w
eb00: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
eb10: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
eb20: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
eb30: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eb40: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
eb50: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
eb60: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
eb70: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
eb80: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
eb90: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
eba0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ebb0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
ebc0: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
ebd0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
ebe0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e  opsis: IF r[P3]>
ebf0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
ec00: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
ec10: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ec20: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
ec30: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
ec40: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
ec50: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
ec60: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
ec70: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
ec80: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
ec90: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
eca0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ecb0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ecc0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
ecd0: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
ece0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ecf0: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
ed00: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
ed10: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
ed20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ed30: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
ed40: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
ed50: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
ed60: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ed70: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
ed80: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
ed90: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
eda0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
edb0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
edc0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ede0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
edf0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
ee00: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ee20: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
ee30: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ee40: 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b    int res, res2;
ee50: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
ee60: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
ee70: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
ee80: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
ee90: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
eea0: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
eeb0: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
eec0: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
eed0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
eee0: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
eef0: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
ef00: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
ef10: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
ef20: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
ef30: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
ef40: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
ef50: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
ef60: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
ef70: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
ef80: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
ef90: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
efa0: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
efb0: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
efc0: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
efd0: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
efe0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
eff0: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
f000: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
f010: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
f020: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
f030: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
f040: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
f050: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
f060: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
f070: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
f080: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
f090: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
f0a0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
f0b0: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
f0c0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
f0d0: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
f0e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
f0f0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
f100: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
f110: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
f120: 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
f130: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
f140: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
f150: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
f160: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d  TE_JUMPIFNULL)==
f170: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
f180: 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45  flags1&flags3&ME
f190: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f1a0: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f1b0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
f1c0: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
f1d0: 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 0;  /* Opera
f1e0: 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  nds are equal */
f1f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f200: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
f210: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
f220: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
f230: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
f240: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
f250: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
f260: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
f270: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f280: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
f290: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
f2a0: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
f2b0: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
f2c0: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
f2d0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
f2e0: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
f2f0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
f300: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
f310: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
f320: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
f330: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
f340: 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20   iCompare = 1;  
f350: 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
f360: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
f370: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
f380: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
f390: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
f3a0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f3b0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
f3c0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
f3d0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
f3e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f3f0: 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
f400: 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20  Taken(2,3);.    
f410: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f420: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
f430: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ULL ){.         
f440: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
f450: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
f460: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
f470: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
f480: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
f490: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
f4a0: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
f4b0: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
f4c0: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
f4d0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
f4e0: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e     if( affinity>
f4f0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
f500: 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28  RIC ){.      if(
f510: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
f520: 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  3)&MEM_Str ){.  
f530: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f540: 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
f550: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
f560: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
f570: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
f580: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
f590: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 74 65  0);.          te
f5a0: 73 74 63 61 73 65 28 20 66 6c 61 67 73 33 21 3d  stcase( flags3!=
f5b0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 20 2f  pIn3->flags ); /
f5c0: 2a 20 50 6f 73 73 69 62 6c 65 20 69 66 20 70 49  * Possible if pI
f5d0: 6e 31 3d 3d 70 49 6e 33 20 2a 2f 0a 20 20 20 20  n1==pIn3 */.    
f5e0: 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70        flags3 = p
f5f0: 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
f600: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
f610: 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  ( (flags3 & (MEM
f620: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
f630: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
f640: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
f650: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
f660: 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20  ty(pIn3,0);.    
f670: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
f680: 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68      /* Handle th
f690: 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
f6a0: 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69   integer compari
f6b0: 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a  son here, as an.
f6c0: 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a        ** optimiz
f6d0: 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20  ation, to avoid 
f6e0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
f6f0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f  3MemCompare() */
f700: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
f710: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e  ->flags & pIn3->
f720: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
f730: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  !=0 ){.        i
f740: 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70  f( pIn3->u.i > p
f750: 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
f760: 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = +1; goto compa
f770: 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
f780: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c   if( pIn3->u.i <
f790: 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
f7a0: 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = -1; goto com
f7b0: 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
f7c0: 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
f7d0: 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65      goto compare
f7e0: 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _op;.      }.   
f7f0: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
f800: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
f810: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
f820: 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
f830: 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
f840: 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
f850: 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
f860: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
f870: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f880: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
f890: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f8a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
f8b0: 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
f8c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
f8d0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
f8e0: 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
f8f0: 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
f900: 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
f910: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
f920: 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
f930: 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
f940: 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
f950: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
f960: 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
f970: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
f980: 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b  t( pIn1!=pIn3 );
f990: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
f9a0: 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
f9b0: 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
f9c0: 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
f9d0: 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
f9e0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
f9f0: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
fa00: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
fa10: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
fa20: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
fa30: 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
fa40: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
fa50: 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
fa60: 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
fa70: 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
fa80: 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
fa90: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
faa0: 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
fab0: 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
fac0: 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
fad0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
fae0: 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
faf0: 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
fb00: 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
fb10: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
fb20: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
fb30: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
fb40: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
fb50: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
fb60: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
fb70: 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65  ll);.  }.compare
fb80: 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69  _op:.  /* At thi
fb90: 73 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20  s point, res is 
fba0: 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20  negative, zero, 
fbb0: 6f 72 20 70 6f 73 69 74 69 76 65 20 69 66 20 72  or positive if r
fbc0: 65 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c  eg[P1] is.  ** l
fbd0: 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20  ess than, equal 
fbe0: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
fbf0: 68 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73  han reg[P3], res
fc00: 70 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70  pectively.  Comp
fc10: 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73  ute.  ** the ans
fc20: 77 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72  wer to this oper
fc30: 61 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65  ator in res2, de
fc40: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20  pending on what 
fc50: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20  the comparison. 
fc60: 20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74   ** operator act
fc70: 75 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e  ually is.  The n
fc80: 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
fc90: 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  e depends on the
fca0: 20 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20   fact.  ** that 
fcb0: 74 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e  the 6 comparison
fcc0: 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 63   operators are c
fcd0: 6f 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65 67  onsecutive integ
fce0: 65 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a  ers in this.  **
fcf0: 20 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c   order:  NE, EQ,
fd00: 20 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20   GT, LE, LT, GE 
fd10: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  */.  assert( OP_
fd20: 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61  Eq==OP_Ne+1 ); a
fd30: 73 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50  ssert( OP_Gt==OP
fd40: 5f 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28  _Ne+2 ); assert(
fd50: 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20   OP_Le==OP_Ne+3 
fd60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
fd70: 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61  Lt==OP_Ne+4 ); a
fd80: 73 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50  ssert( OP_Ge==OP
fd90: 5f 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72  _Ne+5 );.  if( r
fda0: 65 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20  es<0 ){         
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fdc0: 2a 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65  * ne, eq, gt, le
fdd0: 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20  , lt, ge */.    
fde0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
fdf0: 69 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b  igned char aLTb[
fe00: 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c  ] = { 1,  0,  0,
fe10: 20 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20    1,  1,  0 };. 
fe20: 20 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70     res2 = aLTb[p
fe30: 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
fe40: 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  Ne];.  }else if(
fe50: 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
fe60: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
fe70: 67 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d  gned char aEQb[]
fe80: 20 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20   = { 0,  1,  0, 
fe90: 20 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20   1,  0,  1 };.  
fea0: 20 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f    res2 = aEQb[pO
feb0: 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
fec0: 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e];.  }else{.   
fed0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
fee0: 73 69 67 6e 65 64 20 63 68 61 72 20 61 47 54 62  signed char aGTb
fef0: 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31  [] = { 1,  0,  1
ff00: 2c 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a  ,  0,  0,  1 };.
ff10: 20 20 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b      res2 = aGTb[
ff20: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50  pOp->opcode - OP
ff30: 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _Ne];.  }..  /* 
ff40: 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
ff50: 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
ff60: 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
ff70: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
ff80: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
ff90: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ffa0: 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
ffb0: 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
ffc0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
ffd0: 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
ffe0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
fff0: 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
10000 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
10010 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
10020 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10030 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10040 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
10050 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10060 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d  p->p2];.    iCom
10070 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20  pare = res;.    
10080 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  if( (pOp->p5 & S
10090 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21  QLITE_KEEPNULL)!
100a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  =0 ){.      /* T
100b0 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  he KEEPNULL flag
100c0 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20   prevents OP_Eq 
100d0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
100e0 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20   a NULL with 1. 
100f0 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76       ** and prev
10100 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20  ents OP_Ne from 
10110 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c  overwriting NULL
10120 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66   with 0.  This f
10130 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  lag.      ** is 
10140 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e  only used in con
10150 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68  texts where eith
10160 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28  er:.      **   (
10170 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20  1) op==OP_Eq && 
10180 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20  (r[P2]==NULL || 
10190 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20  r[P2]==0).      
101a0 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f  **   (2) op==OP_
101b0 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Ne && (r[P2]==NU
101c0 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a  LL || r[P2]==1).
101d0 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f        ** Therefo
101e0 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63  re it is not nec
101f0 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20  essary to check 
10200 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
10210 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a  [P2] for.      *
10220 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20  * NULL. */.     
10230 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
10240 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70  code==OP_Ne || p
10250 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10260 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  q );.      asser
10270 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65  t( res2==0 || re
10280 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  s2==1 );.      t
10290 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30  estcase( res2==0
102a0 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
102b0 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
102c0 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
102d0 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  1 && pOp->opcode
102e0 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
102f0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10300 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 && pOp->opcod
10310 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
10320 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
10330 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==1 && pOp->opco
10340 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
10350 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63     if( (pOp->opc
10360 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73  ode==OP_Eq)==res
10370 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d  2 ) break;.    }
10380 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
10390 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
103a0 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
103b0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
103c0 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
103d0 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47   = res2;.    REG
103e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
103f0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
10400 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
10410 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
10420 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
10430 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
10440 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b  .    if( res2 ){
10450 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
10460 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
10470 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10480 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74   Opcode: ElseNot
10490 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  Eq * P2 * * *.**
104a0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
104b0 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  must immediately
104c0 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74   follow an OP_Lt
104d0 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72   or OP_Gt compar
104e0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a  ison operator..*
104f0 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61  * If result of a
10500 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
10510 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  on on the same t
10520 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  wo operands.** w
10530 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c  ould have be NUL
10540 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20  L or false (0), 
10550 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74  then then jump t
10560 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
10570 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50   result of an OP
10580 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  _Eq comparison o
10590 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f  n the two previo
105a0 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  us operands.** w
105b0 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74  ould have been t
105c0 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61  rue (1), then fa
105d0 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
105e0 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71  ase OP_ElseNotEq
105f0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  : {       /* sam
10600 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20  e as TK_ESCAPE, 
10610 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10620 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61  ( pOp>aOp );.  a
10630 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
10640 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20  pcode==OP_Lt || 
10650 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
10660 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72  OP_Gt );.  asser
10670 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20  t( pOp[-1].p5 & 
10680 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
10690 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
106a0 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c  ken(iCompare!=0,
106b0 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70   2);.  if( iComp
106c0 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75  are!=0 ) goto ju
106d0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
106e0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
106f0 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
10700 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
10710 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
10720 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
10730 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
10740 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a  or in the next.*
10750 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
10760 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
10770 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
10780 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a   P4 operand..**.
10790 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
107a0 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
107b0 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
107c0 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
107d0 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
107e0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
107f0 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
10800 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
10810 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
10820 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
10830 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
10840 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
10850 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
10860 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
10870 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
10880 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
10890 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
108a0 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
108b0 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
108c0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
108d0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
108e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
108f0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
10900 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
10910 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
10920 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
10930 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61  opcode==OP_Compa
10940 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  re );.  assert( 
10950 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c  pOp[1].p5 & OPFL
10960 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20  AG_PERMUTE );.  
10970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10980 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
10990 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
109a0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
109b0 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
109c0 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
109d0 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
109e0 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
109f0 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
10a00 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
10a10 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
10a20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
10a30 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
10a40 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
10a50 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
10a60 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
10a70 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
10a80 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
10a90 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
10aa0 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
10ab0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
10ac0 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
10ad0 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
10ae0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
10af0 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
10b00 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
10b10 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
10b20 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
10b30 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
10b40 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
10b50 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
10b60 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
10b70 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
10b80 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
10b90 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
10ba0 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
10bb0 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
10bc0 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
10bd0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
10be0 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
10bf0 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
10c00 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
10c10 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
10c20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
10c30 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
10c40 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
10c50 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
10c60 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
10c70 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
10c80 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
10c90 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
10ca0 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
10cb0 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
10cc0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
10cd0 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
10ce0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
10cf0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
10d00 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
10d10 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
10d20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
10d30 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
10d40 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
10d50 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10d60 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
10d70 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
10d80 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
10d90 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
10da0 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
10db0 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
10dc0 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65  e;     /* The pe
10dd0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20  rmutation */..  
10de0 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
10df0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d  PFLAG_PERMUTE)==
10e00 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74  0 ){.    aPermut
10e10 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e = 0;.  }else{.
10e20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
10e30 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
10e40 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
10e50 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  e==OP_Permutatio
10e60 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  n );.    assert(
10e70 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
10e80 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
10e90 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70      aPermute = p
10ea0 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31  Op[-1].p4.ai + 1
10eb0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50  ;.    assert( aP
10ec0 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d  ermute!=0 );.  }
10ed0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
10ee0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
10ef0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
10f00 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
10f10 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
10f20 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
10f30 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
10f40 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20  pOp->p2;.#ifdef 
10f50 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
10f60 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
10f70 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
10f80 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
10f90 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
10fa0 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
10fb0 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
10fc0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
10fd0 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
10fe0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
10ff0 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
11000 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
11010 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  mx<=(p->nMem+1 -
11020 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
11030 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
11040 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
11050 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  1+n<=(p->nMem+1 
11060 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11070 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
11080 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d  2>0 && p2+n<=(p-
11090 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
110a0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
110b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
110c0 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
110d0 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
110e0 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
110f0 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
11100 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
11110 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
11120 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
11130 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
11140 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
11150 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
11160 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
11170 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
11180 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
11190 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
111a0 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
111b0 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
111c0 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29  nfo->nKeyField )
111d0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
111e0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
111f0 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
11200 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
11210 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
11220 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
11230 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
11240 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
11250 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
11260 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
11270 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
11280 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
11290 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
112a0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
112b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
112c0 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
112d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
112e0 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
112f0 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
11300 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
11310 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
11320 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
11330 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
11340 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
11350 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
11360 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
11370 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
11380 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
11390 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
113a0 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
113b0 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
113c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
113d0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
113e0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
113f0 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70  nchTaken(0,3); p
11400 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11410 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
11420 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
11430 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
11440 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70  hTaken(1,3); pOp
11450 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
11460 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
11470 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
11480 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(2,3); pOp = &
11490 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
114a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
114b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
114c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
114d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
114e0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
114f0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11500 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
11510 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
11520 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
11530 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
11540 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
11550 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11560 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11570 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
11580 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
11590 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
115a0 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
115b0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
115c0 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
115d0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
115e0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
115f0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
11600 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11610 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11620 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
11630 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11640 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
11650 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
11660 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
11670 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
11680 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
11690 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
116a0 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
116b0 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
116c0 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
116d0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
116e0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
116f0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
11700 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
11710 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
11720 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
11730 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
11740 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
11750 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11760 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
11770 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
11780 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
11790 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
117a0 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
117b0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
117c0 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
117d0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
117e0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
117f0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
11800 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
11810 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
11820 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
11830 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
11840 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
11850 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11860 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
11870 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11880 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
11890 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
118a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
118b0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
118c0 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
118d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
118e0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
118f0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
11900 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
11910 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
11920 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11930 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
11940 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
11950 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
11960 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
11970 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
11980 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
11990 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
119a0 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
119b0 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
119c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
119d0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
119e0 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
119f0 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
11a00 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
11a10 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
11a20 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
11a30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
11a40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
11a50 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
11a60 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
11a70 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
11a80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
11a90 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
11aa0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
11ab0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
11ac0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11ad0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11ae0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11af0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
11b00 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
11b10 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
11b20 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11b30 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
11b40 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
11b50 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
11b60 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
11b70 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
11b80 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11b90 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
11ba0 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
11bb0 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
11bc0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11be0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
11bf0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
11c00 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11c10 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
11c20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
11c30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11c40 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
11c50 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
11c60 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11c70 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
11c80 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
11c90 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21     pOut->u.i = !
11ca0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
11cb0 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
11cc0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11cd0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
11ce0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11cf0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
11d00 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
11d10 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
11d20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
11d30 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
11d40 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
11d50 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
11d60 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
11d70 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11d80 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
11d90 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
11da0 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
11db0 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
11dc0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
11dd0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
11de0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
11df0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
11e00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
11e10 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11e20 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
11e30 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
11e40 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11e50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11e60 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
11e70 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
11e80 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
11e90 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
11ea0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
11eb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11ec0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
11ed0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
11ee0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
11ef0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
11f00 63 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20  ction the first 
11f10 74 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65  time this opcode
11f20 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72   is.** encounter
11f30 65 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63  ed on each invoc
11f40 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74  ation of the byt
11f50 65 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20  e-code program. 
11f60 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f   Jump to P2.** o
11f70 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64  n the second and
11f80 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
11f90 65 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e  encounters durin
11fa0 67 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63  g the same invoc
11fb0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70  ation..**.** Top
11fc0 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20  -level programs 
11fd0 64 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20  determine first 
11fe0 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f  invocation by co
11ff0 6d 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a  mparing the P1.*
12000 2a 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73  * operand agains
12010 74 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64  t the P1 operand
12020 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20   on the OP_Init 
12030 6f 70 63 6f 64 65 20 61 74 20 74 68 65 20 62 65  opcode at the be
12040 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68  ginning.** of th
12050 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74  e program.  If t
12060 68 65 20 50 31 20 76 61 6c 75 65 73 20 64 69 66  he P1 values dif
12070 66 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  fer, then fall t
12080 68 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a  hrough and make.
12090 2a 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68 69  ** the P1 of thi
120a0 73 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74  s opcode equal t
120b0 6f 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49  o the P1 of OP_I
120c0 6e 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75  nit.  If P1 valu
120d0 65 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61  es are.** the sa
120e0 6d 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  me then take the
120f0 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72   jump..**.** For
12100 20 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68   subprograms, th
12110 65 72 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b  ere is a bitmask
12120 20 69 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d   in the VdbeFram
12130 65 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65  e that determine
12140 73 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  s.** whether or 
12150 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f  not the jump sho
12160 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54  uld be taken.  T
12170 68 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65  he bitmask is ne
12180 63 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75  cessary.** becau
12190 73 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65  se the self-alte
121a0 72 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20  ring code trick 
121b0 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  does not work fo
121c0 72 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74  r recursive.** t
121d0 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65  riggers..*/.case
121e0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
121f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
12200 2a 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20  */.  u32 iAddr; 
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12220 2a 20 41 64 64 72 65 73 73 20 6f 66 20 74 68 69  * Address of thi
12230 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  s instruction */
12240 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f  .  assert( p->aO
12250 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[0].opcode==OP_
12260 49 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d  Init );.  if( p-
12270 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69  >pFrame ){.    i
12280 41 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70  Addr = (int)(pOp
12290 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20   - p->aOp);.    
122a0 69 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e  if( (p->pFrame->
122b0 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26  aOnce[iAddr/8] &
122c0 20 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29   (1<<(iAddr & 7)
122d0 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56  ))!=0 ){.      V
122e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
122f0 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  , 2);.      goto
12300 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
12310 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65   }.    p->pFrame
12320 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d  ->aOnce[iAddr/8]
12330 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20   |= 1<<(iAddr & 
12340 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  7);.  }else{.   
12350 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70   if( p->aOp[0].p
12360 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  1==pOp->p1 ){.  
12370 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12380 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
12390 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
123a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64  ;.    }.  }.  Vd
123b0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
123c0 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d   2);.  pOp->p1 =
123d0 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20   p->aOp[0].p1;. 
123e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
123f0 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
12400 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12410 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12420 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12430 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
12440 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12450 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
12460 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
12470 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
12480 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
12490 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
124a0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
124b0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
124c0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
124d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
124e0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
124f0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12500 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12510 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
12520 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
12530 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
12540 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
12550 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
12560 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
12570 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
12580 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
12590 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
125a0 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
125b0 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
125c0 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
125d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
125e0 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
125f0 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
12600 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
12610 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
12620 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12630 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
12640 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12650 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
12660 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
12670 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
12680 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
12690 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
126a0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
126b0 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
126c0 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
126d0 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
126e0 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
126f0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
12700 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
12710 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64  c = !c;.  }.  Vd
12720 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
12730 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
12740 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
12750 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
12760 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12770 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
12780 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
12790 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c  s: if r[P1]==NUL
127a0 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
127b0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
127c0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
127d0 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
127e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
127f0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
12800 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
12810 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
12820 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
12830 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
12840 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
12850 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
12860 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a  M_Null)!=0, 2);.
12870 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
12880 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
12890 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
128a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
128b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
128c0 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
128d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
128e0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
128f0 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
12900 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
12910 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
12920 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
12930 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
12940 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
12950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12960 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
12970 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12980 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12990 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
129a0 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
129b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
129c0 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)==0, 2);.  if(
129d0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
129e0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
129f0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12a00 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
12a10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
12a20 49 66 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20  IfNullRow P1 P2 
12a30 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
12a40 69 73 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f  is: if P1.nullRo
12a50 77 20 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c  w then r[P3]=NUL
12a60 4c 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  L, goto P2.**.**
12a70 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f   Check the curso
12a80 72 20 50 31 20 74 6f 20 73 65 65 20 69 66 20 69  r P1 to see if i
12a90 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  t is currently p
12aa0 6f 69 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c  ointing at a NUL
12ab0 4c 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20  L row..** If it 
12ac0 69 73 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67  is, then set reg
12ad0 69 73 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c  ister P3 to NULL
12ae0 20 61 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69   and jump immedi
12af0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
12b00 49 66 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20  If P1 is not on 
12b10 61 20 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e  a NULL row, then
12b20 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69   fall through wi
12b30 74 68 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79  thout making any
12b40 0a 2a 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a  .** changes..*/.
12b50 63 61 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f  case OP_IfNullRo
12b60 77 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  w: {         /* 
12b70 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
12b80 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
12b90 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
12ba0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
12bb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
12bc0 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d  ]!=0 );.  if( p-
12bd0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
12be0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
12bf0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12c00 74 4e 75 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70  tNull(aMem + pOp
12c10 2d 3e 70 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ->p3);.    goto 
12c20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
12c30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64    break;.}..#ifd
12c40 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
12c50 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43  _OFFSET_SQL_FUNC
12c60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73  ./* Opcode: Offs
12c70 65 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  et P1 P2 P3 * *.
12c80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
12c90 33 5d 20 3d 20 73 71 6c 69 74 65 5f 6f 66 66 73  3] = sqlite_offs
12ca0 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  et(P1).**.** Sto
12cb0 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 72  re in register r
12cc0 5b 50 33 5d 20 74 68 65 20 62 79 74 65 20 6f 66  [P3] the byte of
12cd0 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61  fset into the da
12ce0 74 61 62 61 73 65 20 66 69 6c 65 20 74 68 61 74  tabase file that
12cf0 20 69 73 20 74 68 65 0a 2a 2a 20 73 74 61 72 74   is the.** start
12d00 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20   of the payload 
12d10 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 61  for the record a
12d20 74 20 77 68 69 63 68 20 74 68 61 74 20 63 75 72  t which that cur
12d30 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e  sor P1 is curren
12d40 74 6c 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e  tly.** pointing.
12d50 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
12d60 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
12d70 6f 72 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  or the argument 
12d80 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6f 66  to the sqlite_of
12d90 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e  fset() function.
12da0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
12db0 64 6f 65 73 20 6e 6f 74 20 75 73 65 20 50 32 20  does not use P2 
12dc0 69 74 73 65 6c 66 2c 20 62 75 74 20 74 68 65 20  itself, but the 
12dd0 50 32 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  P2 value is used
12de0 20 62 79 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20   by the.** code 
12df0 67 65 6e 65 72 61 74 6f 72 2e 20 20 54 68 65 20  generator.  The 
12e00 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 33 20 6f  P1, P2, and P3 o
12e10 70 65 72 61 6e 64 73 20 74 6f 20 74 68 69 73 20  perands to this 
12e20 6f 70 63 6f 64 65 20 61 72 65 20 74 68 65 0a 2a  opcode are the.*
12e30 2a 20 61 73 20 61 73 20 66 6f 72 20 4f 50 5f 43  * as as for OP_C
12e40 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  olumn..**.** Thi
12e50 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
12e60 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51   available if SQ
12e70 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
12e80 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53   with the.** -DS
12e90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
12ea0 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74  SET_SQL_FUNC opt
12eb0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
12ec0 4f 66 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20  Offset: {       
12ed0 20 20 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20     /* out3 */.  
12ee0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
12ef0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
12f00 75 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72  ursor */.  asser
12f10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
12f20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
12f30 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
12f40 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
12f50 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
12f60 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
12f70 66 28 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20  f( NEVER(pC==0) 
12f80 7c 7c 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  || pC->eCurType!
12f90 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
12fa0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
12fb0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
12fc0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
12fd0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12fe0 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c  tInt64(pOut, sql
12ff0 69 74 65 33 42 74 72 65 65 4f 66 66 73 65 74 28  ite3BtreeOffset(
13000 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29  pC->uc.pCursor))
13010 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
13020 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
13030 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
13040 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20  SQL_FUNC */../* 
13050 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
13060 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
13070 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
13080 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
13090 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
130a0 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
130b0 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
130c0 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
130d0 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
130e0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
130f0 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
13100 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
13110 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
13120 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
13130 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
13140 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
13150 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
13160 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
13170 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
13180 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
13190 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
131a0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
131b0 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
131c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
131d0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
131e0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
131f0 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
13200 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
13210 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
13220 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
13230 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
13240 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
13250 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
13260 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
13270 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
13280 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
13290 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
132a0 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
132b0 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
132c0 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
132d0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
132e0 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
132f0 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
13300 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
13310 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
13320 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
13330 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
13340 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
13350 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
13360 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
13370 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
13380 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
13390 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
133a0 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
133b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
133c0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
133d0 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
133e0 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
133f0 6f 6e 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68  on P5 then.** th
13400 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
13410 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
13420 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
13430 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
13440 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
13450 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
13460 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
13470 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
13480 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
13490 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
134a0 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
134b0 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
134c0 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
134d0 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
134e0 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
134f0 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
13500 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
13510 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
13520 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
13530 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
13540 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
13550 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
13560 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
13570 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
13580 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
13590 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
135a0 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
135b0 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
135c0 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
135d0 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
135e0 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
135f0 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
13600 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
13610 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
13620 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
13630 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
13640 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
13650 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
13660 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
13670 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
13680 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
13690 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
136a0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
136b0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
136c0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74    const u8 *zDat
136d0 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  a;   /* Part of 
136e0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
136f0 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
13700 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  nst u8 *zHdr;   
13710 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65   /* Next unparse
13720 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
13730 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
13740 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20  u8 *zEndHdr; /* 
13750 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
13760 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
13770 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20  header */.  u64 
13780 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f  offset64;      /
13790 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20  * 64-bit offset 
137a0 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
137b0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
137c0 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
137d0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
137e0 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
137f0 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
13800 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
13810 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70  ter */..  pC = p
13820 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
13830 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
13840 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63  ;..  /* If the c
13850 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73  ursor cache is s
13860 74 61 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74  tale (meaning it
13870 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
13880 79 20 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20  y point at.  ** 
13890 74 68 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29  the correct row)
138a0 20 74 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75   then bring it u
138b0 70 2d 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69  p-to-date by doi
138c0 6e 67 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  ng the necessary
138d0 20 0a 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65   .  ** B-Tree se
138e0 65 6b 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ek. */.  rc = sq
138f0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
13900 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b  oveto(&pC, &p2);
13910 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
13920 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
13930 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ror;..  assert( 
13940 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
13950 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
13960 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
13970 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
13980 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
13990 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
139a0 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
139b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
139c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
139d0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
139e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
139f0 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65  ert( p2<pC->nFie
13a00 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20  ld );.  aOffset 
13a10 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
13a20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
13a30 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56  rType!=CURTYPE_V
13a40 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28  TAB );.  assert(
13a50 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13a60 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c  URTYPE_PSEUDO ||
13a70 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
13a80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
13a90 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
13aa0 53 4f 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28  SORTER );..  if(
13ab0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
13ac0 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  !=p->cacheCtr ){
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
13af0 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66  F-FALSE*/.    if
13b00 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
13b10 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65  .      if( pC->e
13b20 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
13b30 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20  _PSEUDO ){.     
13b40 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70     /* For the sp
13b50 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73  ecial case of as
13b60 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20   pseudo-cursor, 
13b70 74 68 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66  the seekResult f
13b80 69 65 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  ield.        ** 
13b90 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72  identifies the r
13ba0 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c  egister that hol
13bb0 64 73 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  ds the record */
13bc0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13bd0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e   pC->seekResult>
13be0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65  0 );.        pRe
13bf0 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65  g = &aMem[pC->se
13c00 65 6b 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20  ekResult];.     
13c10 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
13c20 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
13c30 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
13c40 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
13c50 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
13c60 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13c70 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70   = pC->szRow = p
13c80 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
13c90 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
13ca0 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
13cb0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
13cc0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
13cd0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
13ce0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13cf0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
13d00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13d10 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
13d20 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61  pCursor;.      a
13d30 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13d40 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
13d50 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
13d60 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
13d70 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
13d80 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
13d90 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
13da0 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
13db0 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74  Size = sqlite3Bt
13dc0 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
13dd0 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d  Crsr);.      pC-
13de0 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
13df0 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68  treePayloadFetch
13e00 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52  (pCrsr, &pC->szR
13e10 6f 77 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ow);.      asser
13e20 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43  t( pC->szRow<=pC
13e30 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b  ->payloadSize );
13e40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
13e50 43 2d 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20  C->szRow<=65536 
13e60 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70  );  /* Maximum p
13e70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69  age size is 64Ki
13e80 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  B */.      if( p
13e90 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
13ea0 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
13eb0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
13ec0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
13ed0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
13ee0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
13ef0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
13f00 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
13f10 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
13f20 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  et = getVarint32
13f30 28 70 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73  (pC->aRow, aOffs
13f40 65 74 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e  et[0]);.    pC->
13f50 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
13f60 0a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a  ..    if( pC->sz
13f70 52 6f 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  Row<aOffset[0] )
13f80 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
13f90 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
13fa0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
13fb0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
13fc0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
13fd0 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
13fe0 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
13ff0 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
14000 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
14010 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
14020 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
14030 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
14040 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
14050 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
14060 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
14070 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
14080 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
14090 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
140a0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
140b0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
140c0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
140d0 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
140e0 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
140f0 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
14100 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
14110 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
14120 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
14130 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
14140 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
14150 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
14160 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
14170 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
14180 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
14190 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
141a0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
141b0 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
141c0 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
141d0 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
141e0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
141f0 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
14200 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
14210 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
14220 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
14230 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
14240 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
14250 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
14260 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
14270 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
14280 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
14290 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
142a0 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
142b0 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
142c0 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
142d0 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
142e0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66  */.      if( aOf
142f0 66 73 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20  fset[0] > 98307 
14300 7c 7c 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20  || aOffset[0] > 
14310 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
14320 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
14330 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
14340 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
14350 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54  else{.      /* T
14360 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
14370 7a 61 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70  zation.  By skip
14380 70 69 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69  ping over the fi
14390 72 73 74 20 66 65 77 20 74 65 73 74 73 0a 20 20  rst few tests.  
143a0 20 20 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e      ** (ex: pC->
143b0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20  nHdrParsed<=p2) 
143c0 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 63 74  in the next sect
143d0 69 6f 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20  ion, we achieve 
143e0 61 0a 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75  a.      ** measu
143f0 72 61 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63  rable performanc
14400 65 20 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a  e gain..      **
14410 0a 20 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62  .      ** This b
14420 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65  ranch is taken e
14430 76 65 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30  ven if aOffset[0
14440 5d 3d 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65  ]==0.  Such a re
14450 63 6f 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20  cord is never.  
14460 20 20 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64      ** generated
14470 20 62 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20   by SQLite, and 
14480 63 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65  could be conside
14490 72 65 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20  red corruption, 
144a0 62 75 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20  but we.      ** 
144b0 61 63 63 65 70 74 20 69 74 20 66 6f 72 20 68 69  accept it for hi
144c0 73 74 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73  storical reasons
144d0 2e 20 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b  .  When aOffset[
144e0 30 5d 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20  0]==0, the code 
144f0 74 68 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72  this.      ** br
14500 61 6e 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65  anch jumps to re
14510 61 64 73 20 70 61 73 74 20 74 68 65 20 65 6e 64  ads past the end
14520 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20   of the record, 
14530 62 75 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20  but never more. 
14540 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66       ** than a f
14550 65 77 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20  ew bytes.  Even 
14560 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63  if the record oc
14570 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
14580 6f 66 20 74 68 65 20 70 61 67 65 0a 20 20 20 20  of the page.    
14590 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65    ** content are
145a0 61 2c 20 74 68 65 20 22 70 61 67 65 20 68 65 61  a, the "page hea
145b0 64 65 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72  der" comes after
145c0 20 74 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e   the page conten
145d0 74 20 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a  t and so.      *
145e0 2a 20 74 68 69 73 20 6f 76 65 72 72 65 61 64 20  * this overread 
145f0 69 73 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69  is harmless.  Si
14600 6d 69 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20  milar overreads 
14610 63 61 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20  can occur for a 
14620 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a  corrupt.      **
14630 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
14640 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
14650 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
14660 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14670 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
14680 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
14690 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
146a0 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73  ped */.      tes
146b0 74 63 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30  tcase( aOffset[0
146c0 5d 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  ]==0 );.      go
146d0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61  to op_column_rea
146e0 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a  d_header;.    }.
146f0 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
14700 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65  ure at least the
14710 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72   first p2+1 entr
14720 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  ies of the heade
14730 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a  r have been.  **
14740 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69   parsed and vali
14750 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  d information is
14760 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e   in aOffset[] an
14770 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20  d pC->aType[].. 
14780 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
14790 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
147a0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
147b0 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
147c0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
147d0 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
147e0 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
147f0 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
14800 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
14810 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
14820 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
14830 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64  .    if( pC->iHd
14840 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b  rOffset<aOffset[
14850 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d  0] ){.      /* M
14860 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70  ake sure zData p
14870 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20  oints to enough 
14880 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
14890 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
148a0 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
148b0 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
148c0 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
148d0 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
148e0 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72  Mem));.        r
148f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
14900 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e  emFromBtree(pC->
14910 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61  uc.pCursor, 0, a
14920 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d  Offset[0], &sMem
14930 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
14940 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
14950 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
14960 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
14970 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
14980 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
14990 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
149a0 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
149b0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
149c0 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70  Fill in pC->aTyp
149d0 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  e[i] and aOffset
149e0 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75  [i] values throu
149f0 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65  gh the p2-th fie
14a00 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f  ld. */.    op_co
14a10 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
14a20 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e  :.      i = pC->
14a30 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20  nHdrParsed;.    
14a40 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66    offset64 = aOf
14a50 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a  fset[i];.      z
14a60 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43  Hdr = zData + pC
14a70 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20  ->iHdrOffset;.  
14a80 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44      zEndHdr = zD
14a90 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d  ata + aOffset[0]
14aa0 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
14ab0 28 20 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20  ( zHdr>=zEndHdr 
14ac0 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  );.      do{.   
14ad0 20 20 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48       if( (t = zH
14ae0 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20  dr[0])<0x80 ){. 
14af0 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
14b00 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
14b10 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
14b20 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54  beOneByteSerialT
14b30 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
14b40 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14b50 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69      zHdr += sqli
14b60 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a  te3GetVarint32(z
14b70 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20  Hdr, &t);.      
14b80 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
14b90 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14ba0 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
14bb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
14bc0 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20  C->aType[i++] = 
14bd0 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  t;.        aOffs
14be0 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66  et[i] = (u32)(of
14bf0 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66 66  fset64 & 0xfffff
14c00 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69  fff);.      }whi
14c10 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64  le( i<=p2 && zHd
14c20 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20  r<zEndHdr );..  
14c30 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
14c40 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20  d is corrupt if 
14c50 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
14c60 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20  wing are true:. 
14c70 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20       ** (1) the 
14c80 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61  bytes of the hea
14c90 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20  der extend past 
14ca0 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61  the declared hea
14cb0 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a  der size.      *
14cc0 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65  * (2) the entire
14cd0 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64   header was used
14ce0 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74   but not all dat
14cf0 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20  a was used.     
14d00 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20   ** (3) the end 
14d10 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65  of the data exte
14d20 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65  nds beyond the e
14d30 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14d40 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14d50 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64   if( (zHdr>=zEnd
14d60 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e  Hdr && (zHdr>zEn
14d70 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34  dHdr || offset64
14d80 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
14d90 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  e)).       || (o
14da0 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61  ffset64 > pC->pa
14db0 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
14dc0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
14dd0 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 7b  aOffset[0]==0 ){
14de0 0a 20 20 20 20 20 20 20 20 20 20 69 20 3d 20 30  .          i = 0
14df0 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  ;.          zHdr
14e00 20 3d 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20 20   = zEndHdr;.    
14e10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14e20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
14e30 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64  w==0 ) sqlite3Vd
14e40 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
14e50 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67  em);.          g
14e60 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f  oto op_column_co
14e70 72 72 75 70 74 3b 0a 20 20 20 20 20 20 20 20 7d  rrupt;.        }
14e80 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
14e90 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
14ea0 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48   i;.      pC->iH
14eb0 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29  drOffset = (u32)
14ec0 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a  (zHdr - zData);.
14ed0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
14ee0 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56  ow==0 ) sqlite3V
14ef0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
14f00 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Mem);.    }else{
14f10 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20  .      t = 0;.  
14f20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61    }..    /* If a
14f30 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65  fter trying to e
14f40 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69  xtract new entri
14f50 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64  es from the head
14f60 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69  er, nHdrParsed i
14f70 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e  s.    ** still n
14f80 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61  ot up to p2, tha
14f90 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
14fa0 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77 65   record has fewe
14fb0 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a  r than p2.    **
14fc0 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68   columns.  So th
14fd0 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65  e result will be
14fe0 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66 61   either the defa
14ff0 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e  ult value or a N
15000 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ULL..    */.    
15010 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
15020 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20  ed<=p2 ){.      
15030 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
15040 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  =P4_MEM ){.     
15050 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
15060 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
15070 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
15080 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
15090 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
150a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
150b0 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
150c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
150d0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
150e0 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ut;.    }.  }els
150f0 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61  e{.    t = pC->a
15100 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20  Type[p2];.  }.. 
15110 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
15120 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20  content for the 
15130 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20  p2+1-th column. 
15140 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c   Control can onl
15150 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69  y.  ** reach thi
15160 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73  s point if aOffs
15170 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b  et[p2], aOffset[
15180 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61  p2+1], and pC->a
15190 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a  Type[p2] are.  *
151a0 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a  * all valid..  *
151b0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70  /.  assert( p2<p
151c0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b  C->nHdrParsed );
151d0 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
151e0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73  QLITE_OK );.  as
151f0 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
15200 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
15210 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20  nts(pDest) );.  
15220 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  if( VdbeMemDynam
15230 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ic(pDest) ){.   
15240 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
15250 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
15260 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d   }.  assert( t==
15270 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b  pC->aType[p2] );
15280 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77  .  if( pC->szRow
15290 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20  >=aOffset[p2+1] 
152a0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69  ){.    /* This i
152b0 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  s the common cas
152c0 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73 69  e where the desi
152d0 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73  red content fits
152e0 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   on the original
152f0 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77  .    ** page - w
15300 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  here the content
15310 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76   is not on an ov
15320 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20  erflow page */. 
15330 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
15340 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32  Row + aOffset[p2
15350 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20  ];.    if( t<12 
15360 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
15370 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44  VdbeSerialGet(zD
15380 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ata, t, pDest);.
15390 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
153a0 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d   /* If the colum
153b0 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  n value is a str
153c0 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70  ing, we need a p
153d0 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c  ersistent value,
153e0 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20   not.      ** a 
153f0 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e  MEM_Ephem value.
15400 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73    This branch is
15410 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75   a fast short-cu
15420 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76 61  t that is equiva
15430 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f  lent.      ** to
15440 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
15450 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29 20  VdbeSerialGet() 
15460 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 44  and sqlite3VdbeD
15470 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e  eephemeralize().
15480 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
15490 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36  static const u16
154a0 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d   aFlag[] = { MEM
154b0 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d  _Blob, MEM_Str|M
154c0 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20  EM_Term };.     
154d0 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20   pDest->n = len 
154e0 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20  = (t-12)/2;.    
154f0 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
15500 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69  ncoding;.      i
15510 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c  f( pDest->szMall
15520 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20  oc < len+2 ){.  
15530 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
15540 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
15550 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
15560 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44  e3VdbeMemGrow(pD
15570 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29  est, len+2, 0) )
15580 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
15590 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
155a0 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44     pDest->z = pD
155b0 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  est->zMalloc;.  
155c0 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
155d0 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61  py(pDest->z, zDa
155e0 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20  ta, len);.      
155f0 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20  pDest->z[len] = 
15600 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  0;.      pDest->
15610 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20  z[len+1] = 0;.  
15620 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
15630 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20   = aFlag[t&1];. 
15640 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
15650 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
15660 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20  ncoding;.    /* 
15670 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
15680 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
15690 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
156a0 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
156b0 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20    if( ((pOp->p5 
156c0 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  & (OPFLAG_LENGTH
156d0 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ARG|OPFLAG_TYPEO
156e0 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20  FARG))!=0.      
156f0 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26      && ((t>=12 &
15700 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28  & (t&1)==0) || (
15710 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
15720 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29  _TYPEOFARG)!=0))
15730 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20  .     || (len = 
15740 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15750 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a  lTypeLen(t))==0.
15760 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
15770 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c  Content is irrel
15780 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20  evant for.      
15790 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79 70  **    1. the typ
157a0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a  eof() function,.
157b0 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74        **    2. t
157c0 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
157d0 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20  ction if X is a 
157e0 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20  blob, and.      
157f0 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65 20  **    3. if the 
15800 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69  content length i
15810 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a  s zero..      **
15820 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
15830 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63  well use bogus c
15840 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68  ontent rather th
15850 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20  an reading.     
15860 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d   ** content from
15870 20 64 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a 2a   disk. .      **
15880 0a 20 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f 75  .      ** Althou
15890 67 68 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  gh sqlite3VdbeSe
158a0 72 69 61 6c 47 65 74 28 29 20 6d 61 79 20 72 65  rialGet() may re
158b0 61 64 20 61 74 20 6d 6f 73 74 20 38 20 62 79 74  ad at most 8 byt
158c0 65 73 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20  es from the.    
158d0 20 20 2a 2a 20 62 75 66 66 65 72 20 70 61 73 73    ** buffer pass
158e0 65 64 20 74 6f 20 69 74 2c 20 64 65 62 75 67 67  ed to it, debugg
158f0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 56 64 62  ing function Vdb
15900 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
15910 29 20 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20 72  ) may.      ** r
15920 65 61 64 20 75 70 20 74 6f 20 31 36 2e 20 53 6f  ead up to 16. So
15930 20 31 36 20 62 79 74 65 73 20 6f 66 20 62 6f 67   16 bytes of bog
15940 75 73 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 75  us content is su
15950 70 70 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a 2f  pplied..      */
15960 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75 38  .      static u8
15970 20 61 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20   aZero[16];  /* 
15980 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67 75  This is the bogu
15990 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20  s content */.   
159a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
159b0 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74  rialGet(aZero, t
159c0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
159d0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
159e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
159f0 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70  omBtree(pC->uc.p
15a00 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b  Cursor, aOffset[
15a10 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29  p2], len, pDest)
15a20 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
15a30 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
15a40 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
15a50 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ror;.      sqlit
15a60 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
15a70 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
15a80 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ->z, t, pDest);.
15a90 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
15aa0 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d  gs &= ~MEM_Ephem
15ab0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f  ;.    }.  }..op_
15ac0 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50  column_out:.  UP
15ad0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
15ae0 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49  E(pDest);.  REGI
15af0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
15b00 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72  p3, pDest);.  br
15b10 65 61 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  eak;..op_column_
15b20 63 6f 72 72 75 70 74 3a 0a 20 20 69 66 28 20 61  corrupt:.  if( a
15b30 4f 70 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20 20  Op[0].p3>0 ){.  
15b40 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f 70    pOp = &aOp[aOp
15b50 5b 30 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20 62  [0].p3-1];.    b
15b60 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  reak;.  }else{. 
15b70 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
15b80 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
15b90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15ba0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a  to_error;.  }.}.
15bb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
15bc0 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
15bd0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
15be0 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d  ffinity(r[P1@P2]
15bf0 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  ).**.** Apply af
15c00 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
15c10 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
15c20 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
15c30 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
15c40 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
15c50 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
15c60 20 6c 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20   long. The N-th 
15c70 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
15c80 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
15c90 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
15ca0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
15cb0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
15cc0 20 74 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d   the N-th.** mem
15cd0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
15ce0 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
15cf0 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
15d00 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
15d10 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
15d20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
15d30 70 70 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66  pplied */..  zAf
15d40 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
15d50 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
15d60 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
15d70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
15d80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  0 );.  assert( z
15d90 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32  Affinity[pOp->p2
15da0 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  ]==0 );.  pIn1 =
15db0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
15dc0 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
15dd0 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
15de0 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
15df0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
15e00 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
15e10 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
15e20 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
15e30 74 79 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69  ty(pIn1, *(zAffi
15e40 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e  nity++), encodin
15e50 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  g);.    pIn1++;.
15e60 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
15e70 69 74 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61  ity[0] );.  brea
15e80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15e90 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
15ea0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
15eb0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
15ec0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
15ed0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
15ee0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
15ef0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
15f00 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
15f10 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
15f20 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
15f30 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
15f40 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
15f50 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
15f60 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
15f70 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
15f80 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
15f90 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
15fa0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
15fb0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
15fc0 67 2e 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61  g.  The N-th cha
15fd0 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
15fe0 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
15ff0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
16000 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
16010 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
16020 65 20 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20  e N-th.** field 
16030 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
16040 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70  ..**.** The mapp
16050 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74  ing from charact
16060 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69  er to affinity i
16070 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53  s given by the S
16080 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61  QLITE_AFF_.** ma
16090 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20  cros defined in 
160a0 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a  sqliteInt.h..**.
160b0 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c  ** If P4 is NULL
160c0 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20   then all index 
160d0 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20  fields have the 
160e0 61 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a  affinity BLOB..*
160f0 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65  /.case OP_MakeRe
16100 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e  cord: {.  u8 *zN
16110 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20  ewRecord;       
16120 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20   /* A buffer to 
16130 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f  hold the data fo
16140 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
16150 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b   */.  Mem *pRec;
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16170 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  The new record *
16180 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20  /.  u64 nData;  
16190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
161a0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
161b0 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
161c0 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20   int nHdr;      
161d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
161e0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
161f0 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
16200 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20  i64 nByte;      
16210 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73         /* Data s
16220 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
16230 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f  r this record */
16240 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20  .  i64 nZero;   
16250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16260 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
16270 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
16280 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16290 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20  int nVarint;    
162a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
162b0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76   of bytes in a v
162c0 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73  arint */.  u32 s
162d0 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20  erial_type;     
162e0 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20    /* Type field 
162f0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
16300 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
16310 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65  irst field to be
16320 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74   combined into t
16330 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  he record */.  M
16340 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20  em *pLast;      
16350 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69        /* Last fi
16360 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  eld of the recor
16370 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d */.  int nFiel
16380 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
16390 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
163a0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
163b0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69  */.  char *zAffi
163c0 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  nity;       /* T
163d0 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69  he affinity stri
163e0 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ng for the recor
163f0 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f  d */.  int file_
16400 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a  format;       /*
16410 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20   File format to 
16420 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67  use for encoding
16430 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16450 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
16460 65 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65  ewRecord[] heade
16470 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20  r */.  int j;   
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16490 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a   Space used in z
164a0 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74  NewRecord[] cont
164b0 65 6e 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e  ent */.  u32 len
164c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
164d0 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66  /* Length of a f
164e0 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73  ield */..  /* As
164f0 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72  suming the recor
16500 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65  d contains N fie
16510 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lds, the record 
16520 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a  format looks.  *
16530 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a  * like this:.  *
16540 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  ** ---------
16550 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16560 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16570 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16580 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
16590 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20    ** | hdr-size 
165a0 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20  | type 0 | type 
165b0 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e  1 | ... | type N
165c0 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e  -1 | data0 | ...
165d0 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20   | data N-1 | . 
165e0 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
165f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16600 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
16630 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69  *.  ** Data(0) i
16640 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
16650 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28  ister P1.  Data(
16660 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65  1) comes from re
16670 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a  gister P1+1.  **
16680 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20   and so forth.. 
16690 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79   **.  ** Each ty
166a0 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61  pe field is a va
166b0 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e  rint representin
166c0 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70  g the serial typ
166d0 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63  e of the .  ** c
166e0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74  orresponding dat
166f0 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73  a element (see s
16700 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
16710 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a  Type()). The.  *
16720 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64  * hdr-size field
16730 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e   is also a varin
16740 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f  t which is the o
16750 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
16760 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66  eginning.  ** of
16770 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64   the record to d
16780 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61  ata0..  */.  nDa
16790 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ta = 0;         
167a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
167b0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
167c0 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20   */.  nHdr = 0; 
167d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
167e0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
167f0 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
16800 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20   nZero = 0;     
16810 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16820 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
16830 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16840 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  cord */.  nField
16850 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41   = pOp->p1;.  zA
16860 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
16870 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  4.z;.  assert( n
16880 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e  Field>0 && pOp->
16890 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
168a0 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d  nField<=(p->nMem
168b0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
168c0 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d  +1 );.  pData0 =
168d0 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a   &aMem[nField];.
168e0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
168f0 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  p2;.  pLast = &p
16900 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b  Data0[nField-1];
16910 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  .  file_format =
16920 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
16930 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64  Format;..  /* Id
16940 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75  entify the outpu
16950 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20  t register */.  
16960 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
16970 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e  pOp->p1 || pOp->
16980 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  p3>=pOp->p1+pOp-
16990 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  >p2 );.  pOut = 
169a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
169b0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
169c0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
169d0 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71  /* Apply the req
169e0 75 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20  uested affinity 
169f0 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  to all inputs.  
16a00 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  */.  assert( pDa
16a10 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
16a20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
16a30 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74  .    pRec = pDat
16a40 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20  a0;.    do{.    
16a50 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
16a60 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e  pRec++, *(zAffin
16a70 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67  ity++), encoding
16a80 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
16a90 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30   zAffinity[0]==0
16aa0 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20   || pRec<=pLast 
16ab0 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a  );.    }while( z
16ac0 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20  Affinity[0] );. 
16ad0 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
16ae0 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52  E_ENABLE_NULL_TR
16af0 49 4d 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61  IM.  /* NULLs ca
16b00 6e 20 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d  n be safely trim
16b10 6d 65 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  med from the end
16b20 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20   of the record, 
16b30 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20  as long as.  ** 
16b40 61 73 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f  as the schema fo
16b50 72 6d 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72  rmat is 2 or mor
16b60 65 20 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68  e and none of th
16b70 65 20 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e  e omitted column
16b80 73 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f  s.  ** have a no
16b90 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76  n-NULL default v
16ba0 61 6c 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65  alue.  Also, the
16bb0 20 72 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20   record must be 
16bc0 6c 65 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61  left with.  ** a
16bd0 74 20 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c  t least one fiel
16be0 64 2e 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e  d.  If P5>0 then
16bf0 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20   it will be one 
16c00 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20  more than the.  
16c10 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  ** index of the 
16c20 72 69 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d  right-most colum
16c30 6e 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c  n with a non-NUL
16c40 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  L default value 
16c50 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
16c60 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   ){.    while( (
16c70 70 4c 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d  pLast->flags & M
16c80 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e  EM_Null)!=0 && n
16c90 46 69 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b  Field>pOp->p5 ){
16ca0 0a 20 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a  .      pLast--;.
16cb0 20 20 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a        nField--;.
16cc0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
16cd0 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
16ce0 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
16cf0 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
16d00 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
16d10 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
16d20 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
16d30 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
16d40 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
16d50 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
16d60 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
16d70 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16d80 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70  d(pRec) );.    p
16d90 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72  Rec->uTemp = ser
16da0 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
16db0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
16dc0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
16dd0 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69  at, &len);.    i
16de0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
16df0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
16e00 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a     if( nData ){.
16e10 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16e20 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
16e30 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74  Blob(pRec) ) got
16e40 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
16e50 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e  }else{.        n
16e60 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e  Zero += pRec->u.
16e70 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c  nZero;.        l
16e80 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  en -= pRec->u.nZ
16e90 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ero;.      }.   
16ea0 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20   }.    nData += 
16eb0 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73  len;.    testcas
16ec0 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16ed0 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63  127 );.    testc
16ee0 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
16ef0 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64  ==128 );.    nHd
16f00 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65  r += serial_type
16f10 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69  <=127 ? 1 : sqli
16f20 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72  te3VarintLen(ser
16f30 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
16f40 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20  f( pRec==pData0 
16f50 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65  ) break;.    pRe
16f60 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29  c--;.  }while(1)
16f70 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
16f80 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
16f90 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
16fa0 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
16fb0 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
16fc0 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
16fd0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
16fe0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
16ff0 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
17000 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
17010 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
17020 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
17030 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
17040 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
17050 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
17060 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
17070 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
17080 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
17090 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
170a0 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
170b0 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
170c0 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
170d0 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
170e0 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
170f0 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
17100 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
17110 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
17120 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
17130 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
17140 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
17150 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
17160 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
17170 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
17180 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74  Data;.  if( nByt
17190 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d  e+nZero>db->aLim
171a0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
171b0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
171c0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
171d0 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
171e0 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
171f0 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
17200 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
17210 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
17220 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
17230 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
17240 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
17250 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
17260 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
17270 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
17280 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
17290 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
172a0 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
172b0 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
172c0 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  e() could clobbe
172d0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
172e0 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
172f0 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
17300 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
17310 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69  dResize(pOut, (i
17320 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20  nt)nByte) ){.   
17330 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
17340 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
17350 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
17360 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
17370 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
17380 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
17390 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
173a0 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73   j = nHdr;.  ass
173b0 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
173c0 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70  st );.  pRec = p
173d0 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  Data0;.  do{.   
173e0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70   serial_type = p
173f0 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20  Rec->uTemp;.    
17400 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
17410 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f  R-06529-47362 Fo
17420 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65  llowing the size
17430 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20   varint are one 
17440 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61  or more.    ** a
17450 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
17460 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
17470 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70  n. */.    i += p
17480 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
17490 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
174a0 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
174b0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
174c0 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49  pe */.    /* EVI
174d0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33  DENCE-OF: R-6453
174e0 36 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75  6-51728 The valu
174f0 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
17500 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
17510 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
17520 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68  ely follow the h
17530 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20  eader. */.    j 
17540 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
17550 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
17560 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65  ord[j], pRec, se
17570 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63  rial_type); /* c
17580 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69  ontent */.  }whi
17590 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c  le( (++pRec)<=pL
175a0 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ast );.  assert(
175b0 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73   i==nHdr );.  as
175c0 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29  sert( j==nByte )
175d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
175e0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
175f0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
17600 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
17610 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
17620 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
17630 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
17640 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
17650 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
17660 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
17670 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
17680 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45  M_Zero;.  }.  RE
17690 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
176a0 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
176b0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
176c0 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
176d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
176e0 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
176f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
17700 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a  r[P2]=count().**
17710 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75  .** Store the nu
17720 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
17730 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  (an integer valu
17740 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  e) in the table 
17750 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65  or index .** ope
17760 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
17770 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
17780 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
17790 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
177a0 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a  T.case OP_Count:
177b0 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
177c0 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  t2 */.  i64 nEnt
177d0 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
177e0 70 43 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74  pCrsr;..  assert
177f0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
17800 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  p1]->eCurType==C
17810 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
17820 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
17830 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e  sr[pOp->p1]->uc.
17840 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
17850 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45  t( pCrsr );.  nE
17860 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  ntry = 0;  /* No
17870 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
17880 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
17890 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
178a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
178b0 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
178c0 45 6e 74 72 79 29 3b 0a 20 20 69 66 28 20 72 63  Entry);.  if( rc
178d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
178e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f  e_to_error;.  pO
178f0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
17900 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
17910 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
17920 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
17930 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
17940 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
17950 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
17960 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
17970 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
17980 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
17990 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
179a0 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
179b0 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
179c0 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
179d0 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
179e0 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
179f0 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
17a00 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
17a10 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
17a20 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
17a30 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
17a40 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
17a50 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
17a80 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
17a90 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
17ac0 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
17ad0 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
17ae0 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
17af0 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
17b00 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
17b10 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
17b20 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
17b30 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
17b40 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
17b50 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
17b60 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
17b70 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
17b80 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
17b90 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
17ba0 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
17bb0 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
17bc0 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
17bd0 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
17be0 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
17bf0 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
17c00 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
17c10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
17c20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
17c30 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
17c40 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
17c50 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17c60 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
17c70 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
17c80 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
17c90 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
17ca0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
17cb0 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
17cc0 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (db) );.  assert
17cd0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
17ce0 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
17cf0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
17d00 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
17d10 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
17d20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
17d30 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
17d40 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
17d50 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
17d60 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
17d70 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
17d80 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
17d90 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
17da0 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
17db0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
17dc0 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
17dd0 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
17de0 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
17df0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
17e00 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
17e10 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
17e20 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
17e30 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
17e40 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64  0(zName);..#ifnd
17e50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
17e60 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20  IRTUALTABLE.    
17e70 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69    /* This call i
17e80 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69  s Ok even if thi
17e90 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  s savepoint is a
17ea0 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61  ctually a transa
17eb0 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73  ction.      ** s
17ec0 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68  avepoint (and th
17ed0 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e  erefore should n
17ee0 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70  ot prompt xSavep
17ef0 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b  oint()) callback
17f00 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74  s..      ** If t
17f10 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
17f20 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62  tion savepoint b
17f30 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20  eing opened, it 
17f40 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20  is guaranteed.  
17f50 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
17f60 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72  db->aVTrans[] ar
17f70 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a  ray is empty.  *
17f80 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
17f90 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
17fa0 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73  0 || db->nVTrans
17fb0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20  ==0 );.      rc 
17fc0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
17fd0 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
17fe0 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20  OINT_BEGIN,.    
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
18010 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e  nStatement+db->n
18020 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
18030 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18040 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
18050 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
18060 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20  endif..      /* 
18070 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
18080 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
18090 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
180a0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
180b0 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
180c0 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
180d0 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
180e0 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
180f0 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
18100 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
18110 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
18120 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
18130 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
18140 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
18150 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
18160 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
18170 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
18180 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
18190 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
181a0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
181b0 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
181c0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
181d0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
181e0 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
181f0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
18200 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
18210 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
18220 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
18230 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
18240 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  +;.        }..  
18250 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
18260 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
18270 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
18280 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
18290 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
182a0 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
182b0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
182c0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
182d0 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
182e0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
182f0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
18300 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
18310 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
18320 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  dImmCons = db->n
18330 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
18340 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
18350 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76   }else{.    iSav
18360 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  epoint = 0;..   
18370 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d   /* Find the nam
18380 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  ed savepoint. If
18390 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
183a0 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65  h savepoint, the
183b0 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65  n an.    ** an e
183c0 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
183d0 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a   to the user.  *
183e0 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20  /.    for(.     
183f0 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   pSavepoint = db
18400 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20  ->pSavepoint; . 
18410 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
18420 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  && sqlite3StrICm
18430 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e  p(pSavepoint->zN
18440 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  ame, zName);.   
18450 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
18460 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
18470 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69  t.    ){.      i
18480 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
18490 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76   }.    if( !pSav
184a0 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
184b0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
184c0 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  (p, "no such sav
184d0 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
184e0 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
184f0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
18500 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
18510 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20  nVdbeWrite>0 && 
18520 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
18530 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f  LEASE ){.      /
18540 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  * It is not poss
18550 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20  ible to release 
18560 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70  (commit) a savep
18570 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72  oint if there ar
18580 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69  e .      ** acti
18590 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65  ve write stateme
185a0 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nts..      */.  
185b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
185c0 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
185d0 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e  release savepoin
185e0 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  t - ".          
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
18610 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
18620 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
18630 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
18640 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65  {..      /* Dete
18650 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
18660 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74   not this is a t
18670 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
18680 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20  oint. If so,.   
18690 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69     ** and this i
186a0 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  s a RELEASE comm
186b0 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  and, then the cu
186c0 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
186d0 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63  n .      ** is c
186e0 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20  ommitted. .     
186f0 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73   */.      int is
18700 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53  Transaction = pS
18710 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d  avepoint->pNext=
18720 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e  =0 && db->isTran
18730 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
18740 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72  ;.      if( isTr
18750 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d  ansaction && p1=
18760 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
18770 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  SE ){.        if
18780 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
18790 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
187a0 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
187b0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
187c0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
187d0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
187e0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
187f0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
18800 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
18810 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
18820 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63  .          p->pc
18830 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
18840 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  Op);.          d
18850 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
18860 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
18870 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
18880 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
18890 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
188a0 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
188b0 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
188c0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
188d0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
188e0 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
188f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
18900 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  t isSchemaChange
18910 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  ;.        iSavep
18920 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
18930 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
18940 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
18950 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
18960 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
18970 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
18980 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44  Change = (db->mD
18990 62 46 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f  bFlags & DBFLAG_
189a0 53 63 68 65 6d 61 43 68 61 6e 67 65 29 21 3d 30  SchemaChange)!=0
189b0 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
189c0 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
189d0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
189e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
189f0 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72  3BtreeTripAllCur
18a00 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d  sors(db->aDb[ii]
18a10 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20  .pBt,.          
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
18a40 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
18a50 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  CK,.            
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68             isSch
18a80 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20  emaChange==0);. 
18a90 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72             if( r
18aa0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
18ab0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18ac0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
18ad0 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
18ae0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53  e{.          isS
18af0 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b  chemaChange = 0;
18b00 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18b10 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
18b20 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
18b30 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
18b40 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
18b50 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
18b60 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
18b70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
18b80 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18b90 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
18ba0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18bb0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
18bc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
18bd0 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73 53  .        if( isS
18be0 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20  chemaChange ){. 
18bf0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
18c00 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
18c10 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
18c20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
18c30 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
18c40 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
18c50 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44            db->mD
18c60 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47  bFlags |= DBFLAG
18c70 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  _SchemaChange;. 
18c80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
18c90 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
18ca0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
18cb0 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
18cc0 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
18cd0 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
18ce0 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
18cf0 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
18d00 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
18d10 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
18d20 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
18d30 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
18d40 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
18d50 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
18d60 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
18d70 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
18d80 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
18d90 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
18da0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
18db0 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
18dc0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
18dd0 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
18de0 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
18df0 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
18e00 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
18e10 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
18e20 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
18e30 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
18e40 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
18e50 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
18e60 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
18e70 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
18e80 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
18e90 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
18ea0 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
18eb0 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
18ec0 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
18ed0 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
18ee0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
18ef0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
18f00 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
18f10 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
18f20 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
18f30 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
18f40 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
18f50 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
18f60 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
18f70 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
18f80 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
18f90 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
18fa0 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
18fb0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
18fc0 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
18fd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
18fe0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
18ff0 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
19000 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
19010 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
19020 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
19030 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
19040 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
19050 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
19060 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
19070 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   || p1==SAVEPOIN
19080 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
19090 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
190a0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
190b0 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
190c0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
190d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
190e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
190f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
19100 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  }.    }.  }.  if
19110 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
19120 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19130 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19140 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
19150 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
19160 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
19170 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
19180 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
19190 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
191a0 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
191b0 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
191c0 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
191d0 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
191e0 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
191f0 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
19200 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
19210 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
19220 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
19230 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
19240 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
19250 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
19260 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
19270 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
19280 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
19290 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
192a0 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
192b0 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
192c0 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
192d0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
192e0 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
192f0 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
19300 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
19310 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
19320 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
19330 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
19340 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
19350 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
19360 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
19370 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
19380 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
19390 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
193a0 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
193b0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
193c0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
193d0 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
193e0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
193f0 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72   );..  if( desir
19400 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
19410 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
19420 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
19430 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
19440 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
19450 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
19460 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
19470 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
19480 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
19490 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
194a0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
194b0 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
194c0 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d  utoCommit && db-
194d0 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
194e0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69  .      /* If thi
194f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
19500 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
19510 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
19520 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
19530 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
19540 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
19550 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
19560 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
19570 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a   first. .      *
19580 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
19590 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
195a0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
195b0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
195e0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
195f0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
19600 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
19610 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
19620 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
19630 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
19640 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
19650 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
19660 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
19670 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
19680 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
19690 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
196a0 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
196b0 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
196c0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
196d0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
196e0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
196f0 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
19700 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64   - aOp);.      d
19710 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
19720 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
19730 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
19740 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
19750 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
19760 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
19770 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  n;.    }.    ass
19780 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
19790 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
197a0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
197b0 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
197c0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
197d0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
197e0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
197f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
19800 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
19810 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
19820 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19830 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
19840 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
19850 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
19860 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
19870 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
19880 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
19890 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
198a0 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
198b0 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
198c0 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
198d0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
198e0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
198f0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
19900 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
19910 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
19920 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
19930 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
19940 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  OR;.    goto abo
19950 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19960 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
19970 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
19980 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
19990 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
199a0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
199b0 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
199c0 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
199d0 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
199e0 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
199f0 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
19a00 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
19a10 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
19a20 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
19a30 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
19a40 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
19a50 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
19a60 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
19a70 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
19a80 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
19a90 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
19aa0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
19ab0 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
19ac0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
19ad0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
19ae0 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
19af0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
19b00 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
19b10 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
19b20 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
19b30 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
19b40 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
19b50 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
19b60 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
19b70 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
19b80 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
19b90 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
19ba0 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
19bb0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
19bc0 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
19bd0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
19be0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
19bf0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
19c00 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
19c10 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
19c20 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
19c30 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
19c40 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
19c50 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19c60 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
19c70 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
19c80 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
19c90 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
19ca0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
19cb0 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
19cc0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
19cd0 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
19ce0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
19cf0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
19d00 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
19d10 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
19d20 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
19d30 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
19d40 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
19d50 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
19d60 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
19d70 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
19d80 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
19d90 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
19da0 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
19db0 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
19dc0 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
19dd0 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
19de0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19df0 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
19e00 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
19e10 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
19e20 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
19e30 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
19e40 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
19e50 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
19e60 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
19e70 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
19e80 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
19e90 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
19ea0 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
19eb0 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
19ec0 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
19ed0 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
19ee0 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
19ef0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
19f00 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
19f10 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
19f20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
19f30 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
19f40 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
19f50 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
19f60 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
19f70 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
19f80 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
19f90 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
19fa0 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
19fb0 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
19fc0 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
19fd0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
19fe0 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
19ff0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
1a000 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
1a010 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
1a020 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
1a030 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
1a040 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
1a050 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
1a060 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
1a070 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
1a080 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
1a090 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
1a0a0 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
1a0b0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
1a0c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
1a0d0 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
1a0e0 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
1a0f0 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
1a100 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
1a110 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1a120 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1a130 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  y==0 || pOp->p2=
1a140 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a150 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a160 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1a170 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1a180 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1a190 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1a1a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
1a1b0 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
1a1c0 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
1a1d0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
1a1e0 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
1a1f0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1a200 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
1a210 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
1a220 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
1a230 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
1a240 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a250 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
1a260 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
1a270 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
1a280 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
1a290 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  OT );.    testca
1a2a0 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
1a2b0 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a  USY_RECOVERY );.
1a2c0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1a2d0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69  TE_OK ){.      i
1a2e0 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
1a2f0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
1a300 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
1a310 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
1a320 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
1a330 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  c;.        goto 
1a340 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
1a350 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
1a360 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1a370 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
1a380 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
1a390 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
1a3a0 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
1a3b0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
1a3c0 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29  db->nVdbeRead>1)
1a3d0 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61   .    ){.      a
1a3e0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1a3f0 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
1a400 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ) );.      if( p
1a410 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
1a420 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1a430 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
1a440 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76  t>=0 && db->nSav
1a450 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20  epoint>=0 );.   
1a460 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
1a470 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20  ent++; .        
1a480 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20  p->iStatement = 
1a490 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
1a4a0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b   db->nStatement;
1a4b0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1a4c0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
1a4d0 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
1a4e0 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70  VEPOINT_BEGIN, p
1a4f0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b  ->iStatement-1);
1a500 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1a510 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1a520 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1a530 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
1a540 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
1a550 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  t);.      }..   
1a560 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
1a570 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
1a580 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
1a590 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
1a5a0 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
1a5b0 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
1a5c0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
1a5d0 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
1a5e0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
1a5f0 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
1a600 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
1a610 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
1a620 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
1a630 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
1a640 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
1a650 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
1a660 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49      p->nStmtDefI
1a670 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
1a680 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
1a690 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74     }..    /* Gat
1a6a0 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20 76  her the schema v
1a6b0 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
1a6c0 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20  r checking:.    
1a6d0 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
1a6e0 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35 31  N-OF: R-03189-51
1a6f0 31 33 35 20 41 73 20 65 61 63 68 20 53 51 4c 20  135 As each SQL 
1a700 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20  statement runs, 
1a710 74 68 65 20 73 63 68 65 6d 61 0a 20 20 20 20 2a  the schema.    *
1a720 2a 20 76 65 72 73 69 6f 6e 20 69 73 20 63 68 65  * version is che
1a730 63 6b 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  cked to ensure t
1a740 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20 68  hat the schema h
1a750 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 73  as not changed s
1a760 69 6e 63 65 20 74 68 65 0a 20 20 20 20 2a 2a 20  ince the.    ** 
1a770 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 61  SQL statement wa
1a780 73 20 70 72 65 70 61 72 65 64 2e 0a 20 20 20 20  s prepared..    
1a790 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  */.    sqlite3Bt
1a7a0 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
1a7b0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
1a7c0 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
1a7d0 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
1a7e0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1a7f0 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
1a800 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
1a810 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
1a820 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73  a = 0;.  }.  ass
1a830 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1a840 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
1a850 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
1a860 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d  ( pOp->p5 && (iM
1a870 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20  eta!=pOp->p3 || 
1a880 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29  iGen!=pOp->p4.i)
1a890 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
1a8a0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
1a8b0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
1a8c0 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
1a8d0 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
1a8e0 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1a8f0 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
1a900 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
1a910 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
1a920 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
1a930 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
1a940 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
1a950 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
1a960 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
1a970 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
1a980 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
1a990 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
1a9a0 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
1a9b0 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
1a9c0 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
1a9d0 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
1a9e0 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
1a9f0 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
1aa00 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
1aa10 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
1aa20 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
1aa30 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
1aa40 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
1aa50 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
1aa60 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
1aa70 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
1aa80 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
1aa90 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
1aaa0 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
1aab0 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
1aac0 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
1aad0 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
1aae0 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
1aaf0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1ab00 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
1ab10 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
1ab20 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
1ab30 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
1ab40 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
1ab50 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1ab60 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
1ab70 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
1ab80 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
1ab90 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
1aba0 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
1abb0 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
1abc0 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
1abd0 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
1abe0 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
1abf0 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
1ac00 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
1ac10 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1ac20 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
1ac30 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
1ac40 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72    }.    p->expir
1ac50 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  ed = 1;.    rc =
1ac60 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
1ac70 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1ac80 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ac90 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1aca0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
1acb0 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
1acc0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
1acd0 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
1ace0 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
1acf0 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
1ad00 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1ad10 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
1ad20 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1ad30 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
1ad40 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1ad50 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
1ad60 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1ad70 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
1ad80 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1ad90 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
1ada0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1adb0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
1adc0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1add0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
1ade0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1adf0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
1ae00 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
1ae10 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
1ae20 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
1ae30 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
1ae40 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
1ae50 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
1ae60 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
1ae70 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
1ae80 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1ae90 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
1aea0 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
1aeb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1aec0 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  t2 */.  int iMet
1aed0 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
1aee0 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
1aef0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1af00 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
1af10 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
1af20 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
1af30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1af40 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
1af50 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
1af60 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1af70 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1af80 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
1af90 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
1afa0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1afb0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1afc0 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  b) );..  sqlite3
1afd0 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
1afe0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
1aff0 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
1b000 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d  iMeta);.  pOut =
1b010 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
1b020 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
1b030 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
1b040 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b050 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
1b060 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1b070 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e 74 65  * Write the inte
1b080 67 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74  ger value P3 int
1b090 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
1b0a0 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
1b0b0 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74  1..** P2==1 is t
1b0c0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1b0d0 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65  n.  P2==2 is the
1b0e0 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1b0f0 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68  ..** P2==3 is th
1b100 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1b110 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
1b120 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1b130 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
1b140 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1b150 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1b160 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
1b170 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
1b180 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
1b190 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
1b1a0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
1b1b0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
1b1c0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1b1d0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1b1e0 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a  OP_SetCookie: {.
1b1f0 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
1b200 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1b210 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1b220 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b230 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1b240 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1b250 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1b260 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1b270 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1b280 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1b290 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1b2a0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1b2b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1b2c0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1b2d0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1b2e0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1b2f0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1b300 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
1b310 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1b320 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1b330 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1b340 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1b350 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1b360 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70   pOp->p2, pOp->p
1b370 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  3);.  if( pOp->p
1b380 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
1b390 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
1b3a0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
1b3b0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
1b3c0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
1b3d0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
1b3e0 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
1b3f0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1b400 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
1b410 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67  .    db->mDbFlag
1b420 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65  s |= DBFLAG_Sche
1b430 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73  maChange;.  }els
1b440 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
1b450 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
1b460 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
1b470 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
1b480 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
1b490 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1b4a0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1b4b0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69  pOp->p3;.  }.  i
1b4c0 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
1b4d0 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
1b4e0 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
1b4f0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
1b500 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
1b510 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
1b520 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
1b530 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
1b540 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
1b550 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
1b560 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
1b570 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
1b580 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1b590 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1b5a0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1b5b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1b5c0 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
1b5d0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1b5e0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1b5f0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1b600 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
1b610 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
1b620 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
1b630 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
1b640 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
1b650 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
1b660 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
1b670 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
1b680 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
1b690 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
1b6a0 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
1b6b0 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
1b6c0 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1b6d0 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
1b6e0 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
1b6f0 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
1b700 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
1b710 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
1b720 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
1b730 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
1b740 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
1b750 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
1b760 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
1b770 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
1b780 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
1b790 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
1b7a0 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
1b7b0 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
1b7c0 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73  If P5!=0 then us
1b7d0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1b7e0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20   register P2 as 
1b7f0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e  the root page, n
1b800 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ot.** the value 
1b810 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
1b820 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62  .** There will b
1b830 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e  e a read lock on
1b840 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68   the database wh
1b850 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20  enever there is 
1b860 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f  an.** open curso
1b870 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62  r.  If the datab
1b880 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64  ase was unlocked
1b890 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69   prior to this i
1b8a0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68  nstruction.** th
1b8b0 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69  en a read lock i
1b8c0 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61  s acquired as pa
1b8d0 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  rt of this instr
1b8e0 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a  uction.  A read.
1b8f0 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f  ** lock allows o
1b900 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74  ther processes t
1b910 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
1b920 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74  ase but prohibit
1b930 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70  s.** any other p
1b940 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69  rocess from modi
1b950 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  fying the databa
1b960 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f  se.  The read lo
1b970 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65  ck is.** release
1b980 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f  d when all curso
1b990 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20  rs are closed.  
1b9a0 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
1b9b0 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20  ion attempts.** 
1b9c0 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f  to get a read lo
1b9d0 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68  ck but fails, th
1b9e0 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61  e script termina
1b9f0 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53  tes with an.** S
1ba00 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
1ba10 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   code..**.** The
1ba20 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1ba30 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1ba40 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1ba50 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1ba60 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1ba70 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1ba80 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1ba90 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1baa0 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1bab0 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1bac0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1bad0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1bae0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1baf0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1bb00 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1bb10 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1bb20 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1bb30 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1bb40 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1bb50 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1bb60 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  the table..**.**
1bb70 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57   See also: OpenW
1bb80 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a  rite, ReopenIdx.
1bb90 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
1bba0 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33  openIdx P1 P2 P3
1bbb0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1bbc0 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1bbd0 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  P3.**.** The Reo
1bbe0 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f  penIdx opcode wo
1bbf0 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
1bc00 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74   ReadOpen except
1bc10 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a   that it first.*
1bc20 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
1bc30 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e  if the cursor on
1bc40 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f   P1 is already o
1bc50 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20  pen with a root 
1bc60 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  page.** number o
1bc70 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20 69  f P2 and if it i
1bc80 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65  s this opcode be
1bc90 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  comes a no-op.  
1bca0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a  In other words,.
1bcb0 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
1bcc0 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1bcd0 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20  , do not reopen 
1bce0 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  it..**.** The Re
1bcf0 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d  openIdx opcode m
1bd00 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
1bd10 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77  with P5==0 and w
1bd20 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20  ith P4 being.** 
1bd30 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a  a P4_KEYINFO obj
1bd40 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ect.  Furthermor
1bd50 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  e, the P3 value 
1bd60 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
1bd70 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68   as.** every oth
1bd80 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20  er ReopenIdx or 
1bd90 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65  OpenRead for the
1bda0 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d   same cursor num
1bdb0 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74  ber..**.** See t
1bdc0 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f  he OpenRead opco
1bdd0 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  de documentation
1bde0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
1bdf0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1be00 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
1be10 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
1be20 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1be30 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1be40 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
1be50 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
1be60 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
1be70 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
1be80 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
1be90 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
1bea0 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
1beb0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1bec0 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
1bed0 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
1bee0 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1bef0 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1bf00 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1bf10 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1bf20 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1bf30 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1bf40 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1bf50 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1bf60 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
1bf70 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
1bf80 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
1bf90 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1bfa0 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1bfb0 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1bfc0 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
1bfd0 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
1bfe0 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1bff0 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1c000 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
1c010 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1c020 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
1c030 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  , or to the.** l
1c040 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20  argest index of 
1c050 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  any column of th
1c060 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
1c070 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a  actually used..*
1c080 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1c090 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74  ction works just
1c0a0 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65   like OpenRead e
1c0b0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1c0c0 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a  ens the cursor.*
1c0d0 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20  * in read/write 
1c0e0 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76  mode.  For a giv
1c0f0 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  en table, there 
1c100 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f  can be one or mo
1c110 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20  re read-only.** 
1c120 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e  cursors or a sin
1c130 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63  gle read/write c
1c140 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f  ursor but not bo
1c150 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  th..**.** See al
1c160 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a  so OpenRead..*/.
1c170 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64  case OP_ReopenId
1c180 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  x: {.  int nFiel
1c190 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  d;.  KeyInfo *pK
1c1a0 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32  eyInfo;.  int p2
1c1b0 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
1c1c0 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72  nt wrFlag;.  Btr
1c1d0 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75  ee *pX;.  VdbeCu
1c1e0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62  rsor *pCur;.  Db
1c1f0 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74   *pDb;..  assert
1c200 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
1c210 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
1c220 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65  SEEKEQ );.  asse
1c230 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1c240 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1c250 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
1c260 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
1c270 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70   pCur && pCur->p
1c280 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f  gnoRoot==(u32)pO
1c290 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73  p->p2 ){.    ass
1c2a0 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d  ert( pCur->iDb==
1c2b0 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20  pOp->p3 );      
1c2c0 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62 79  /* Guaranteed by
1c2d0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1c2e0 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  tor */.    goto 
1c2f0 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1c300 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20  hints;.  }.  /* 
1c310 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1c320 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f   not currently o
1c330 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f  pen or is open o
1c340 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20  n a different.  
1c350 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66  ** index, then f
1c360 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1c370 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20   OP_OpenRead to 
1c380 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a  force a reopen *
1c390 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
1c3a0 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
1c3b0 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74  Write:..  assert
1c3c0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1c3d0 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70  P_OpenWrite || p
1c3e0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1c3f0 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1c400 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1c410 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1c420 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c430 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
1c440 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ead || pOp->opco
1c450 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78  de==OP_ReopenIdx
1c460 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d  .          || p-
1c470 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1c480 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
1c490 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
1c4a0 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1c4b0 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ACK;.    goto ab
1c4c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c4d0 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1c4e0 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1c4f0 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1c500 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1c510 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1c520 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1c530 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1c540 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1c550 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1c560 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1c570 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
1c580 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
1c590 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
1c5a0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1c5b0 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1c5c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50  {.    assert( OP
1c5d0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d  FLAG_FORDELETE==
1c5e0 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
1c5f0 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  );.    wrFlag = 
1c600 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70  BTREE_WRCSR | (p
1c610 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1c620 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  FORDELETE);.    
1c630 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1c640 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1c650 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1c660 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1c670 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1c680 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1c690 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1c6a0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1c6b0 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1c6c0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1c6d0 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1c6e0 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1c6f0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1c700 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1c710 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1c720 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1c730 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1c740 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
1c750 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
1c760 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
1c770 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1c780 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
1c790 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
1c7a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1c7b0 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
1c7c0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1c7d0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
1c7e0 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
1c7f0 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
1c800 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
1c810 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
1c820 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72  ior OP_CreateBtr
1c830 65 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  ee opcode and.  
1c840 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
1c850 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
1c860 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
1c870 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
1c880 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
1c890 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
1c8a0 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
1c8b0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1c8c0 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
1c8d0 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
1c8e0 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
1c8f0 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
1c900 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20    assert( p2>=2 
1c910 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
1c920 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1c930 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79  INFO ){.    pKey
1c940 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1c950 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73  KeyInfo;.    ass
1c960 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1c970 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1c980 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1c990 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1c9a0 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
1c9b0 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b  Info->nAllField;
1c9c0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1c9d0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1c9e0 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1c9f0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1ca00 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1ca10 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1ca20 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1ca30 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1ca40 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1ca50 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1ca60 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1ca70 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1ca80 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1ca90 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1caa0 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1cab0 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1cac0 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1cad0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1cae0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1caf0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1cb00 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75  dered = 1;.  pCu
1cb10 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32  r->pgnoRoot = p2
1cb20 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1cb30 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72  DEBUG.  pCur->wr
1cb40 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23  Flag = wrFlag;.#
1cb50 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c  endif.  rc = sql
1cb60 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1cb70 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
1cb80 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
1cb90 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  uc.pCursor);.  p
1cba0 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1cbb0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53  pKeyInfo;.  /* S
1cbc0 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  et the VdbeCurso
1cbd0 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62  r.isTable variab
1cbe0 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  le. Previous ver
1cbf0 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
1cc00 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
1cc10 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
1cc20 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
1cc30 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
1cc40 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
1cc50 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
1cc60 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
1cc70 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
1cc80 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
1cc90 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
1cca0 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
1ccb0 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
1ccc0 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
1ccd0 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
1cce0 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  O;..open_cursor_
1ccf0 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73  set_hints:.  ass
1cd00 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  ert( OPFLAG_BULK
1cd10 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c  CSR==BTREE_BULKL
1cd20 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28  OAD );.  assert(
1cd30 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d   OPFLAG_SEEKEQ==
1cd40 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b  BTREE_SEEK_EQ );
1cd50 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
1cd60 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55  ->p5 & OPFLAG_BU
1cd70 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20  LKCSR );.#ifdef 
1cd80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
1cd90 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73  RSOR_HINTS.  tes
1cda0 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26  tcase( pOp->p2 &
1cdb0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29   OPFLAG_SEEKEQ )
1cdc0 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
1cdd0 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1cde0 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e  tFlags(pCur->uc.
1cdf0 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20  pCursor,.       
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
1ce20 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43   & (OPFLAG_BULKC
1ce30 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
1ce40 29 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  )));.  if( rc ) 
1ce50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ce60 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1ce70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1ce80 4f 70 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20  OpenDup P1 P2 * 
1ce90 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  * *.**.** Open a
1cea0 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1ceb0 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  hat points to th
1cec0 65 20 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c  e same ephemeral
1ced0 20 74 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72   table as.** cur
1cee0 73 6f 72 20 50 32 2e 20 20 54 68 65 20 50 32 20  sor P2.  The P2 
1cef0 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
1cf00 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20   been opened by 
1cf10 61 20 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45  a prior OP_OpenE
1cf20 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f  phemeral.** opco
1cf30 64 65 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65  de.  Only epheme
1cf40 72 61 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20  ral cursors may 
1cf50 62 65 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a  be duplicated..*
1cf60 2a 0a 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65  *.** Duplicate e
1cf70 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73  phemeral cursors
1cf80 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 73 65   are used for se
1cf90 6c 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65  lf-joins of mate
1cfa0 72 69 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a  rialized views..
1cfb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44  */.case OP_OpenD
1cfc0 75 70 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  up: {.  VdbeCurs
1cfd0 6f 72 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a  or *pOrig;    /*
1cfe0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75   The original cu
1cff0 72 73 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69  rsor to be dupli
1d000 63 61 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43  cated */.  VdbeC
1d010 75 72 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20  ursor *pCx;     
1d020 20 2f 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73   /* The new curs
1d030 6f 72 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d  or */..  pOrig =
1d040 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d050 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
1d060 72 69 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20  rig->pBtx!=0 ); 
1d070 20 2f 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72   /* Only ephemer
1d080 61 6c 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62  al cursors can b
1d090 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a  e duplicated */.
1d0a0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1d0b0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1d0c0 70 31 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c  p1, pOrig->nFiel
1d0d0 64 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42  d, -1, CURTYPE_B
1d0e0 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78  TREE);.  if( pCx
1d0f0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1d100 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1d110 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  w = 1;.  pCx->is
1d120 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20  Ephemeral = 1;. 
1d130 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1d140 20 70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f   pOrig->pKeyInfo
1d150 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
1d160 20 3d 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c   = pOrig->isTabl
1d170 65 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  e;.  rc = sqlite
1d180 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72  3BtreeCursor(pOr
1d190 69 67 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52  ig->pBtx, MASTER
1d1a0 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43  _ROOT, BTREE_WRC
1d1b0 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  SR,.            
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
1d1d0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78  x->pKeyInfo, pCx
1d1e0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1d1f0 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42   /* The sqlite3B
1d200 74 72 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75  treeCursor() rou
1d210 74 69 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61  tine can only fa
1d220 69 6c 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  il for the first
1d230 20 63 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65   cursor.  ** ope
1d240 6e 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  ned for a databa
1d250 73 65 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65  se.  Since there
1d260 20 69 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f   is already an o
1d270 70 65 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20  pen cursor when 
1d280 74 68 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65  this.  ** opcode
1d290 20 69 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c   is run, the sql
1d2a0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1d2b0 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
1d2c0 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
1d2d0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72  QLITE_OK );.  br
1d2e0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
1d2f0 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
1d300 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  l P1 P2 * P4 P5.
1d310 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f  ** Synopsis: nCo
1d320 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70  lumn=P2.**.** Op
1d330 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1d340 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e  P1 to a transien
1d350 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  t table..** The 
1d360 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73  cursor is always
1d370 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69   opened read/wri
1d380 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74  te even if .** t
1d390 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1d3a0 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20   is read-only.  
1d3b0 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a  The ephemeral.**
1d3c0 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65   table is delete
1d3d0 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
1d3e0 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  when the cursor 
1d3f0 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a  is closed..**.**
1d400 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
1d410 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1d420 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61  the ephemeral ta
1d430 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1d440 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
1d450 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
1d460 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
1d470 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
1d480 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
1d490 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
1d4a0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
1d4b0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1d4c0 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
1d4d0 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
1d4e0 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
1d4f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70  ..**.** The P5 p
1d500 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20  arameter can be 
1d510 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54  a mask of the BT
1d520 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69  REE_* flags defi
1d530 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e  ned.** in btree.
1d540 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20  h.  These flags 
1d550 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20  control aspects 
1d560 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  of the operation
1d570 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65   of.** the btree
1d580 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49  .  The BTREE_OMI
1d590 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54  T_JOURNAL and BT
1d5a0 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73  REE_SINGLE flags
1d5b0 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75   are.** added au
1d5c0 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a  tomatically..*/.
1d5d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41  /* Opcode: OpenA
1d5e0 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a  utoindex P1 P2 *
1d5f0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1d600 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a  s: nColumn=P2.**
1d610 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1d620 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
1d630 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1d640 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a  al.  It has a.**
1d650 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
1d660 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69  to distinguish i
1d670 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20  ts use.  Tables 
1d680 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
1d690 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
1d6a0 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72  will be used for
1d6b0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1d6c0 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74  reated transient
1d6d0 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a  .** indices in j
1d6e0 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oins..*/.case OP
1d6f0 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20  _OpenAutoindex: 
1d700 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68  .case OP_OpenEph
1d710 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65  emeral: {.  Vdbe
1d720 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b  Cursor *pCx;.  K
1d730 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1d740 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
1d750 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d  t int vfsFlags =
1d760 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f   .      SQLITE_O
1d770 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a  PEN_READWRITE |.
1d780 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1d790 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20  N_CREATE |.     
1d7a0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43   SQLITE_OPEN_EXC
1d7b0 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53  LUSIVE |.      S
1d7c0 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54  QLITE_OPEN_DELET
1d7d0 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20  EONCLOSE |.     
1d7e0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41   SQLITE_OPEN_TRA
1d7f0 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73  NSIENT_DB;.  ass
1d800 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1d820 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p2>=0 );.  pCx
1d830 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1d840 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1d850 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59  p->p2, -1, CURTY
1d860 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28  PE_BTREE);.  if(
1d870 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1d880 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1d890 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1d8a0 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20  ->isEphemeral = 
1d8b0 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
1d8c0 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70  3BtreeOpen(db->p
1d8d0 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78  Vfs, 0, db, &pCx
1d8e0 2d 3e 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20  ->pBtx, .       
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d900 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1d910 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47  NAL | BTREE_SING
1d920 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66  LE | pOp->p5, vf
1d930 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72  sFlags);.  if( r
1d940 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1d950 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d960 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
1d970 70 43 78 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20  pCx->pBtx, 1);. 
1d980 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
1d990 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a  ITE_OK ){.    /*
1d9a0 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1d9b0 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
1d9c0 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
1d9d0 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73  calling.    ** s
1d9e0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1d9f0 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68  eTable() with th
1da00 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  e BTREE_BLOBKEY 
1da10 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20  flag before.    
1da20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49  ** opening it. I
1da30 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  f a transient ta
1da40 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c  ble is required,
1da50 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20   just use the.  
1da60 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c    ** automatical
1da70 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  ly created table
1da80 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20   with root-page 
1da90 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45  1 (an BLOB_INTKE
1daa0 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
1dab0 0a 20 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70  .    if( (pCx->p
1dac0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1dad0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1dae0 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20  yInfo)!=0 ){.   
1daf0 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
1db00 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1db10 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1db20 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
1db30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1db40 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
1db50 74 78 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  tx, &pgno, BTREE
1db60 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e  _BLOBKEY | pOp->
1db70 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  p5); .      if( 
1db80 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1db90 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1dba0 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
1dbb0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1dbc0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1dbd0 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1dbe0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1dbf0 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1dc00 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  b) );.        rc
1dc10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1dc20 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c  ursor(pCx->pBtx,
1dc30 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43   pgno, BTREE_WRC
1dc40 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  SR,.            
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43      pKeyInfo, pC
1dc70 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
1dc80 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1dc90 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
1dca0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1dcb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1dcc0 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1dcd0 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  tx, MASTER_ROOT,
1dce0 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20   BTREE_WRCSR,.  
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70              0, p
1dd10 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1dd20 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1dd30 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
1dd40 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1dd50 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1dd60 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73  error;.  pCx->is
1dd70 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1dd80 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1dd90 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  RED);.  break;.}
1dda0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
1ddb0 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33  terOpen P1 P2 P3
1ddc0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1ddd0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1dde0 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1ddf0 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1de00 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1de10 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1de20 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1de30 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1de40 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1de50 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1de60 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1de70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a   algorithm..**.*
1de80 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33  * If argument P3
1de90 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1dea0 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20  en it indicates 
1deb0 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
1dec0 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68  may.** assume th
1ded0 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74  at a stable sort
1dee0 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65   considering the
1def0 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73   first P3 fields
1df00 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20   of each.** key 
1df10 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f  is sufficient to
1df20 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71   produce the req
1df30 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a  uired results..*
1df40 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1df50 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1df60 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1df70 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1df80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1df90 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1dfa0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1dfb0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1dfc0 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54  Op->p2, -1, CURT
1dfd0 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69  YPE_SORTER);.  i
1dfe0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1dff0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1e000 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1e010 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
1e020 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1e030 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1e040 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1e050 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1e060 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20  C(db) );.  rc = 
1e070 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
1e080 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70  rInit(db, pOp->p
1e090 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72  3, pCx);.  if( r
1e0a0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1e0b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
1e0c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1e0d0 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74  de: SequenceTest
1e0e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1e0f0 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75  Synopsis: if( cu
1e100 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29  rsor[P1].ctr++ )
1e110 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50   pc = P2.**.** P
1e120 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
1e130 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71  rsor. If the seq
1e140 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73  uence counter is
1e150 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c   currently zero,
1e160 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
1e170 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
1e180 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1e190 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
1e1a0 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  increment the.**
1e1b0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61   the sequence va
1e1c0 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
1e1d0 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a  SequenceTest: {.
1e1e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e1f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e200 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1e210 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1e220 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1e230 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1e240 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
1e250 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73   );.  if( (pC->s
1e260 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b  eqCount++)==0 ){
1e270 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
1e280 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
1e290 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e2a0 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
1e2b0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1e2c0 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73  psis: P3 columns
1e2d0 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20   in r[P2].**.** 
1e2e0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1e2f0 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  r that points to
1e300 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68   a fake table th
1e310 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  at contains a si
1e320 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64  ngle.** row of d
1e330 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  ata.  The conten
1e340 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f  t of that one ro
1e350 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  w is the content
1e360 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65   of memory.** re
1e370 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f  gister P2.  In o
1e380 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73  ther words, curs
1e390 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e  or P1 becomes an
1e3a0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a   alias for the .
1e3b0 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74  ** MEM_Blob cont
1e3c0 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ent contained in
1e3d0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1e3e0 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62  .** A pseudo-tab
1e3f0 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
1e400 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
1e410 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67  d to hold a sing
1e420 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
1e430 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
1e440 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
1e450 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
1e460 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
1e470 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
1e480 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
1e490 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f  n opcode.  The O
1e4a0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a  P_Column opcode.
1e4b0 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  ** is the only c
1e4c0 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61  ursor opcode tha
1e4d0 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70  t works with a p
1e4e0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
1e4f0 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d  ** P3 is the num
1e500 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1e510 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61   the records tha
1e520 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  t will be stored
1e530 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64   by.** the pseud
1e540 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
1e550 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20   OP_OpenPseudo: 
1e560 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1e570 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1e580 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1e590 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1e5a0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1e5b0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1e5c0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
1e5d0 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53  , -1, CURTYPE_PS
1e5e0 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78  EUDO);.  if( pCx
1e5f0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1e600 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1e610 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73 65  w = 1;.  pCx->se
1e620 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e  ekResult = pOp->
1e630 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
1e640 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69 76  le = 1;.  /* Giv
1e650 65 20 74 68 69 73 20 70 73 65 75 64 6f 2d 63 75  e this pseudo-cu
1e660 72 73 6f 72 20 61 20 66 61 6b 65 20 42 74 43 75  rsor a fake BtCu
1e670 72 73 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f 20  rsor pointer so 
1e680 74 68 61 74 20 70 43 78 0a 20 20 2a 2a 20 63 61  that pCx.  ** ca
1e690 6e 20 62 65 20 73 61 66 65 6c 79 20 70 61 73 73  n be safely pass
1e6a0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  ed to sqlite3Vdb
1e6b0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
1e6c0 20 20 54 68 69 73 20 61 76 6f 69 64 73 20 61 20    This avoids a 
1e6d0 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70 43  test.  ** for pC
1e6e0 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  x->eCurType==CUR
1e6f0 54 59 50 45 5f 42 54 52 45 45 20 69 6e 73 69 64  TYPE_BTREE insid
1e700 65 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65  e of sqlite3Vdbe
1e710 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a 20  CursorMoveto(). 
1e720 20 2a 2a 20 77 68 69 63 68 20 69 73 20 61 20 70   ** which is a p
1e730 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69 6d  erformance optim
1e740 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43 78  ization */.  pCx
1e750 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 73  ->uc.pCursor = s
1e760 71 6c 69 74 65 33 42 74 72 65 65 46 61 6b 65 56  qlite3BtreeFakeV
1e770 61 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a 20 20  alidCursor();.  
1e780 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1e790 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  =0 );.  break;.}
1e7a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1e7b0 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1e7c0 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1e7d0 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1e7e0 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1e7f0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1e800 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1e810 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1e820 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1e830 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1e840 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1e850 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1e860 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1e870 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1e880 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1e890 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1e8a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1e8b0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1e8c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1e8d0 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
1e8e0 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _MASK./* Opcode:
1e8f0 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20   ColumnsUsed P1 
1e900 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  * * P4 *.**.** T
1e910 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63  his opcode (whic
1e920 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66  h only exists if
1e930 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70   SQLite was comp
1e940 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c  iled with.** SQL
1e950 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
1e960 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65  N_USED_MASK) ide
1e970 6e 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f  ntifies which co
1e980 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20  lumns of the.** 
1e990 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
1e9a0 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65  or cursor P1 are
1e9b0 20 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20   used.  P4 is a 
1e9c0 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a  64-bit integer.*
1e9d0 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20  * (P4_INT64) in 
1e9e0 77 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20  which the first 
1e9f0 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20  63 bits are one 
1ea00 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a  for each of the.
1ea10 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75  ** first 63 colu
1ea20 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
1ea30 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61   or index that a
1ea40 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  re actually used
1ea50 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f  .** by the curso
1ea60 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64  r.  The high-ord
1ea70 65 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66  er bit is set if
1ea80 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65   any column afte
1ea90 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73  r.** the 64th is
1eaa0 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f   used..*/.case O
1eab0 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b  P_ColumnsUsed: {
1eac0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ead0 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  C;.  pC = p->apC
1eae0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1eaf0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
1eb00 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
1eb10 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b  EE );.  pC->mask
1eb20 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f  Used = *(u64*)pO
1eb30 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
1eb40 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
1eb50 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45  * Opcode: SeekGE
1eb60 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1eb70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1eb80 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1eb90 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1eba0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1ebb0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1ebc0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1ebd0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1ebe0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1ebf0 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1ec00 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1ec10 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1ec20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1ec30 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ec40 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1ec50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1ec60 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1ec70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1ec80 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1ec90 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1eca0 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1ecb0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1ecc0 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1ecd0 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1ece0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1ecf0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1ed00 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ed10 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1ed20 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1ed30 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1ed40 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1ed50 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1ed60 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
1ed70 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70  cursor P1 was op
1ed80 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1ed90 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61  PFLAG_SEEKEQ fla
1eda0 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  g, then this.** 
1edb0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1edc0 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63  ys land on a rec
1edd0 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79  ord that equally
1ede0 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c   equals the key,
1edf0 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70   or.** else jump
1ee00 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1ee10 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75  P2.  When the cu
1ee20 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53  rsor is OPFLAG_S
1ee30 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f  EEKEQ, this.** o
1ee40 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f  pcode must be fo
1ee50 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78  llowed by an Idx
1ee60 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  LE opcode with t
1ee70 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74  he same argument
1ee80 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20  s..** The IdxLE 
1ee90 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  opcode will be s
1eea0 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f  kipped if this o
1eeb0 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20  pcode succeeds, 
1eec0 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45  but the.** IdxLE
1eed0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1eee0 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  used on subseque
1eef0 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f  nt loop iteratio
1ef00 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ns..**.** This o
1ef10 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1ef20 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1ef30 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1ef40 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1ef50 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1ef60 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1ef70 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1ef80 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1ef90 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1efa0 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1efb0 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1efc0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1efd0 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1efe0 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
1eff0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1f000 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kGT P1 P2 P3 P4 
1f010 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1f020 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1f030 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1f040 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1f050 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1f060 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1f070 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1f080 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1f090 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1f0a0 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1f0b0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1f0c0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1f0d0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1f0e0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1f0f0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1f100 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1f110 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1f120 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1f130 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1f140 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1f150 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1f160 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1f170 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1f180 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1f190 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1f1a0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1f1b0 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1f1c0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1f1d0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1f1e0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1f1f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1f200 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1f210 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1f220 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1f230 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1f240 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1f250 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1f260 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1f270 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1f280 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1f290 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1f2a0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1f2b0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1f2c0 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
1f2d0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1f2e0 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32  de: SeekLT P1 P2
1f2f0 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e   P3 P4 * .** Syn
1f300 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1f310 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1f320 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1f330 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1f340 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1f350 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1f360 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1f370 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1f380 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1f390 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1f3a0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1f3b0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1f3c0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1f3d0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1f3e0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1f3f0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1f400 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1f410 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1f420 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1f430 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1f440 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1f450 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1f460 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
1f470 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1f480 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1f490 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
1f4a0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1f4b0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1f4c0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1f4d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1f4e0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1f4f0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1f500 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1f510 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1f520 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1f530 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1f540 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1f550 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1f560 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1f570 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1f580 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1f590 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1f5a0 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1f5b0 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1f5c0 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50  ode: SeekLE P1 P
1f5d0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1f5e0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1f5f0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1f600 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1f610 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1f620 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1f630 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1f640 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1f650 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1f660 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1f670 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1f680 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1f690 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1f6a0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1f6b0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1f6c0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1f6d0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1f6e0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1f6f0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1f700 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1f710 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1f720 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1f730 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1f740 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1f750 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1f760 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1f770 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1f780 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1f790 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1f7a0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1f7b0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1f7c0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1f7d0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1f7e0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1f7f0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1f800 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1f810 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1f820 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1f830 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1f840 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1f850 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1f860 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1f870 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  Next..**.** If t
1f880 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73  he cursor P1 was
1f890 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
1f8a0 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
1f8b0 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a  flag, then this.
1f8c0 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  ** opcode will a
1f8d0 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20  lways land on a 
1f8e0 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61  record that equa
1f8f0 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b  lly equals the k
1f900 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a  ey, or.** else j
1f910 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
1f920 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65  to P2.  When the
1f930 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41   cursor is OPFLA
1f940 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a  G_SEEKEQ, this.*
1f950 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  * opcode must be
1f960 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
1f970 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74  IdxGE opcode wit
1f980 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d  h the same argum
1f990 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78  ents..** The Idx
1f9a0 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
1f9b0 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69  e skipped if thi
1f9c0 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64  s opcode succeed
1f9d0 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64  s, but the.** Id
1f9e0 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xGE opcode will 
1f9f0 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65  be used on subse
1fa00 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61  quent loop itera
1fa10 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  tions..**.** See
1fa20 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1fa30 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
1fa40 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1fa50 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54  /.case OP_SeekLT
1fa60 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1fa70 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1fa80 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
1fa90 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1faa0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45  /.case OP_SeekGE
1fab0 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1fac0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1fad0 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20  P_SeekGT: {     
1fae0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1faf0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
1fb00 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72         /* Compar
1fb10 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20  ison result */. 
1fb20 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20   int oc;        
1fb30 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f      /* Opcode */
1fb40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1fb50 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72  C;    /* The cur
1fb60 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20  sor to seek */. 
1fb70 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1fb80 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74  r;  /* The key t
1fb90 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20  o seek for */.  
1fba0 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
1fbb0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1fbc0 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64  columns or field
1fbd0 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a  s in the key */.
1fbe0 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
1fbf0 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
1fc00 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
1fc10 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f   to */.  int eqO
1fc20 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  nly;        /* O
1fc30 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69  nly interested i
1fc40 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a  n == results */.
1fc50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fc60 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1fc70 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1fc80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1fc90 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
1fca0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1fcb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1fcc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1fcd0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
1fce0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
1fcf0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
1fd00 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20   == OP_SeekLT+1 
1fd10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1fd20 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekGE == OP_See
1fd30 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72  kLT+2 );.  asser
1fd40 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20  t( OP_SeekGT == 
1fd50 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20  OP_SeekLT+3 );. 
1fd60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
1fd70 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
1fd80 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
1fd90 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1fda0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65  pOp->opcode;.  e
1fdb0 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d  qOnly = 0;.  pC-
1fdc0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69  >nullRow = 0;.#i
1fdd0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1fde0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
1fdf0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
1fe00 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ndif..  if( pC->
1fe10 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  isTable ){.    /
1fe20 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b  * The BTREE_SEEK
1fe30 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79  _EQ flag is only
1fe40 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75   set on index cu
1fe50 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73  rsors */.    ass
1fe60 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
1fe70 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70  eCursorHasHint(p
1fe80 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42  C->uc.pCursor, B
1fe90 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30  TREE_SEEK_EQ)==0
1fea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  .              |
1feb0 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
1fec0 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75  .    /* The inpu
1fed0 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1fee0 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1fef0 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1ff00 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a  l, string,.    *
1ff10 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
1ff20 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
1ff30 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
1ff40 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
1ff50 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b  .    ** the seek
1ff60 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e  , so convert it.
1ff70 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   */.    pIn3 = &
1ff80 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1ff90 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1ffa0 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
1ffb0 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
1ffc0 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
1ffd0 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
1ffe0 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30  Affinity(pIn3, 0
1fff0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65  );.    }.    iKe
20000 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
20010 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a  ntValue(pIn3);..
20020 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
20030 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
20040 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
20050 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
20060 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73  thout.    ** los
20070 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
20080 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
20090 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
200a0 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
200b0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
200c0 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
200d0 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
200e0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
200f0 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
20100 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
20110 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
20120 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
20130 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
20140 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ber,.        ** 
20150 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
20160 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
20170 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
20180 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e          VdbeBran
20190 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f  chTaken(1,2); go
201a0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
201b0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
201c0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
201d0 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
201e0 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72  tion iKey is lar
201f0 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ger than the act
20200 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
20210 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
20220 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72  ubstitute >= for
20230 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e   > and < for <=.
20240 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61   e.g. if the sea
20250 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a  rch term.      *
20260 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65  * is 4.9 and the
20270 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69   integer approxi
20280 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20  mation 5:.      
20290 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  **.      **     
202a0 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20     (x >  4.9)   
202b0 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29   ->     (x >= 5)
202c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
202d0 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d   (x <= 4.9)    -
202e0 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20  >     (x <  5). 
202f0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
20300 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75  ( pIn3->u.r<(dou
20310 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
20320 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
20330 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGE==(OP_SeekG
20340 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T-1) );.        
20350 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
20360 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29  T==(OP_SeekLE-1)
20370 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
20380 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26  rt( (OP_SeekLE &
20390 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
203a0 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
203b0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
203c0 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
203d0 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
203e0 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20  ) ) oc--;.      
203f0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
20400 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
20410 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72   iKey is smaller
20420 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
20430 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
20440 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
20450 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20  titute <= for < 
20460 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a  and > for >=.  *
20470 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28  /.      else if(
20480 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62   pIn3->u.r>(doub
20490 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
204a0 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
204b0 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  ekLE==(OP_SeekLT
204c0 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
204d0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54  ssert( OP_SeekGT
204e0 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20  ==(OP_SeekGE+1) 
204f0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
20500 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20  t( (OP_SeekLT & 
20510 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
20520 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGE & 0x0001) );
20530 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
20540 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
20550 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
20560 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d   ) oc++;.      }
20570 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d  .    } .    rc =
20580 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
20590 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
205a0 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  uc.pCursor, 0, (
205b0 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
205c0 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65  s);.    pC->move
205d0 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
205e0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
205f0 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66  Delete */.    if
20600 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
20610 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
20620 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20630 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
20640 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75  .    /* For a cu
20650 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54  rsor with the BT
20660 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74  REE_SEEK_EQ hint
20670 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65  , only the OP_Se
20680 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20  ekGE and.    ** 
20690 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65  OP_SeekLE opcode
206a0 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61  s are allowed, a
206b0 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62 65  nd these must be
206c0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
206d0 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20  lowed.    ** by 
206e0 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f  an OP_IdxGT or O
206f0 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20  P_IdxLT opcode, 
20700 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69  respectively, wi
20710 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e  th the same key.
20720 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
20730 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
20740 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63  orHasHint(pC->uc
20750 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  .pCursor, BTREE_
20760 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20  SEEK_EQ) ){.    
20770 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20    eqOnly = 1;.  
20780 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20790 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
207a0 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
207b0 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  e==OP_SeekLE );.
207c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
207d0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
207e0 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e  IdxLT || pOp[1].
207f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
20800 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
20810 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70  ( pOp[1].p1==pOp
20820 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20  [0].p1 );.      
20830 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
20840 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a  2==pOp[0].p2 );.
20850 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20860 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p3==pOp[0].
20870 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p3 );.      asse
20880 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d  rt( pOp[1].p4.i=
20890 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a  =pOp[0].p4.i );.
208a0 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c      }..    nFiel
208b0 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
208c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
208d0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
208e0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
208f0 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
20900 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
20910 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
20920 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
20930 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54  Field;..    /* T
20940 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20  he next line of 
20950 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73  code computes as
20960 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66   follows, only f
20970 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20  aster:.    **   
20980 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
20990 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
209a0 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20  LE ){.    **    
209b0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
209c0 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c  -1;.    **   }el
209d0 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72  se{.    **     r
209e0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31  .default_rc = +1
209f0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20  ;.    **   }.   
20a00 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   */.    r.defaul
20a10 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63  t_rc = ((1 & (oc
20a20 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f   - OP_SeekLT)) ?
20a30 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61   -1 : +1);.    a
20a40 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
20a50 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGT || r.defaul
20a60 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
20a70 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
20a80 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekLE || r.defau
20a90 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
20aa0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
20ab0 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61  SeekGE || r.defa
20ac0 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20  ult_rc==+1 );.  
20ad0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
20ae0 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66  _SeekLT || r.def
20af0 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a  ault_rc==+1 );..
20b00 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d      r.aMem = &aM
20b10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
20b20 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
20b30 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  .    { int i; fo
20b40 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
20b50 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
20b60 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
20b70 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
20b80 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20  if.    r.eqSeen 
20b90 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  = 0;.    rc = sq
20ba0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
20bb0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
20bc0 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
20bd0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
20be0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
20bf0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
20c00 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20c10 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
20c20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65  eqOnly && r.eqSe
20c30 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  en==0 ){.      a
20c40 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b  ssert( res!=0 );
20c50 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b  .      goto seek
20c60 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20  _not_found;.    
20c70 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65  }.  }.  pC->defe
20c80 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
20c90 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
20ca0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
20cb0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
20cc0 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  EST.  sqlite3_se
20cd0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
20ce0 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f  ndif.  if( oc>=O
20cf0 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73  P_SeekGE ){  ass
20d00 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
20d10 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GE || oc==OP_See
20d20 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kGT );.    if( r
20d30 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
20d40 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  && oc==OP_SeekGT
20d50 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
20d60 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
20d70 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
20d80 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
20d90 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
20da0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
20db0 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
20dc0 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20  QLITE_DONE ){.  
20dd0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
20de0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20  ITE_OK;.        
20df0 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20    res = 1;.     
20e00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20e10 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20e20 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20e30 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
20e40 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20e50 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  res = 0;.    }. 
20e60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
20e70 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
20e80 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
20e90 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  LE );.    if( re
20ea0 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
20eb0 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29  & oc==OP_SeekLT)
20ec0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
20ed0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
20ee0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
20ef0 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  us(pC->uc.pCurso
20f00 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  r, 0);.      if(
20f10 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
20f20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  {.        if( rc
20f30 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
20f40 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
20f50 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
20f60 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20       res = 1;.  
20f70 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20f80 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
20f90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20fa0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20fb0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
20fc0 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
20fd0 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
20fe0 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
20ff0 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
21000 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69  o.      ** see i
21010 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
21020 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
21030 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
21040 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e  BtreeEof(pC->uc.
21050 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
21060 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75    }.seek_not_fou
21070 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nd:.  assert( pO
21080 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62  p->p2>0 );.  Vdb
21090 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
210a0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
210b0 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  s ){.    goto ju
210c0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
210d0 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a  e if( eqOnly ){.
210e0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
210f0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
21100 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
21110 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
21120 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20  ;.    pOp++; /* 
21130 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c  Skip the OP_IdxL
21140 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68  t or OP_IdxGT th
21150 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20  at follows */.  
21160 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21170 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50   Opcode: Found P
21180 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
21190 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
211a0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
211b0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
211c0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
211d0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
211e0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
211f0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
21200 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
21210 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
21220 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
21230 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
21240 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20  * record..**.** 
21250 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
21260 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
21270 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
21280 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
21290 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70  and P4.** is a p
212a0 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
212b0 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
212c0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
212d0 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  P2 and.** P1 is 
212e0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
212f0 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e   the matching en
21300 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
21310 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
21320 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
21330 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
21340 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  can be.** advanc
21350 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72  ed in the forwar
21360 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68  d direction.  Th
21370 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e Next instructi
21380 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a  on will work,.**
21390 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65   but not the Pre
213a0 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  v instruction..*
213b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
213c0 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
213d0 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20  ict, NotExists. 
213e0 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekGe.*/./* Opc
213f0 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
21400 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
21410 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
21420 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
21430 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
21440 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
21450 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
21460 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
21470 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
21480 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
21490 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
214a0 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
214b0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
214c0 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
214d0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
214e0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
214f0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
21500 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
21510 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
21520 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
21530 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
21540 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
21550 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
21560 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
21570 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
21580 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
21590 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
215a0 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
215b0 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
215c0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
215d0 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
215e0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
215f0 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
21600 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
21610 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
21620 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
21630 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
21640 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
21650 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
21660 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
21670 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
21680 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
21690 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
216a0 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
216b0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
216c0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
216d0 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c  ound, NotExists,
216e0 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f   NoConflict.*/./
216f0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66  * Opcode: NoConf
21700 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34  lict P1 P2 P3 P4
21710 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
21720 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
21730 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
21740 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
21750 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
21760 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
21770 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
21780 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
21790 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
217a0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
217b0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
217c0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
217d0 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
217e0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
217f0 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
21800 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
21810 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
21820 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55   contains any NU
21830 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69  LL value, jump i
21840 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
21850 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20  .  If all terms 
21860 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
21870 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68   are not-NULL th
21880 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f  en a check is do
21890 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ne to determine 
218a0 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  if any row in th
218b0 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74  e.** P1 index bt
218c0 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69  ree has a matchi
218d0 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20  ng key prefix.  
218e0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
218f0 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a  matches, jump.**
21900 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
21910 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  P2.  If there is
21920 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74   a match, fall t
21930 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65  hrough and leave
21940 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f   the P1.** curso
21950 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
21960 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a  e matching row..
21970 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
21980 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  e is similar to 
21990 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68  OP_NotFound with
219a0 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20   the exceptions 
219b0 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e  that the.** bran
219c0 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b  ch is always tak
219d0 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f  en if any part o
219e0 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79  f the search key
219f0 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a   input is NULL..
21a00 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
21a10 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
21a20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
21a30 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
21a40 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
21a50 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
21a60 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
21a70 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
21a80 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
21a90 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
21aa0 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
21ab0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
21ac0 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
21ad0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
21ae0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  .*/.case OP_NoCo
21af0 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
21b00 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
21b10 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
21b20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
21b30 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
21b40 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
21b50 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
21b60 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
21b70 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b  .  int takeJump;
21b80 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
21b90 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
21ba0 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
21bb0 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b  edRecord *pFree;
21bc0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
21bd0 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
21be0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
21bf0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
21c00 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
21c10 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
21c20 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
21c30 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
21c40 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
21c50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21c60 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21c70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
21c80 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
21c90 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
21ca0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21cb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
21cc0 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
21cd0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
21ce0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
21cf0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e  de;.#endif.  pIn
21d00 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
21d10 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  3];.  assert( pC
21d20 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
21d30 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
21d40 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
21d50 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
21d60 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
21d70 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  e==0 );.  if( pO
21d80 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
21d90 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
21da0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
21db0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
21dc0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
21dd0 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69  .aMem = pIn3;.#i
21de0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
21df0 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  G.    for(ii=0; 
21e00 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
21e10 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
21e20 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
21e30 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
21e40 20 20 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d     assert( (r.aM
21e50 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
21e60 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72  EM_Zero)==0 || r
21e70 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29  .aMem[ii].n==0 )
21e80 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  ;.      if( ii )
21e90 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
21ea0 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
21eb0 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a  Mem[ii]);.    }.
21ec0 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b  #endif.    pIdxK
21ed0 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72  ey = &r;.    pFr
21ee0 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ee = 0;.  }else{
21ef0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
21f00 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
21f10 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  lob );.    rc = 
21f20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
21f30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
21f40 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
21f50 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
21f60 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
21f70 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
21f80 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79   pFree = pIdxKey
21f90 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
21fa0 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
21fb0 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b  d(pC->pKeyInfo);
21fc0 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
21fd0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
21fe0 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  m;.    sqlite3Vd
21ff0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
22000 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
22010 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
22020 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
22030 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
22040 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75  rc = 0;.  takeJu
22050 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  mp = 0;.  if( pO
22060 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
22070 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
22080 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
22090 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
220a0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
220b0 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
220c0 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
220d0 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
220e0 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
220f0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
22100 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
22110 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
22120 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c  i<pIdxKey->nFiel
22130 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
22140 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65  if( pIdxKey->aMe
22150 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
22160 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
22170 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a    takeJump = 1;.
22180 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
22190 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
221a0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
221b0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
221c0 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
221d0 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
221e0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70  , &res);.  if( p
221f0 46 72 65 65 20 29 20 73 71 6c 69 74 65 33 44 62  Free ) sqlite3Db
22200 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65  FreeNN(db, pFree
22210 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
22220 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f  ITE_OK ){.    go
22230 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22240 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d  error;.  }.  pC-
22250 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
22260 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  s;.  alreadyExis
22270 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
22280 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
22290 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a  -alreadyExists;.
222a0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
222b0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
222c0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
222d0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
222e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
222f0 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64  _Found ){.    Vd
22300 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c  beBranchTaken(al
22310 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32  readyExists!=0,2
22320 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  );.    if( alrea
22330 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
22340 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
22350 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
22360 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d  nchTaken(takeJum
22370 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73  p||alreadyExists
22380 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
22390 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72  takeJump || !alr
223a0 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
223b0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
223c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
223d0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77   Opcode: SeekRow
223e0 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
223f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
22400 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20  key=r[P3].**.** 
22410 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
22420 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  of a cursor open
22430 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   on an SQL table
22440 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74   btree (with int
22450 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20  eger.** keys).  
22460 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20 64  If register P3 d
22470 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
22480 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66  an integer or if
22490 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   P1 does not.** 
224a0 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
224b0 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
224c0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
224d0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  tely to P2.  .**
224e0 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
224f0 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
22500 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
22510 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
22520 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77  in.** a record w
22530 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
22540 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
22550 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
22560 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
22570 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
22580 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
22590 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
225a0 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73  * The OP_NotExis
225b0 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  ts opcode perfor
225c0 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
225d0 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ation, but with 
225e0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20  OP_NotExists.** 
225f0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
22600 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74 65  must be guarante
22610 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
22620 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
22630 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70   With this.** op
22640 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20 50  code, register P
22650 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74  3 might not cont
22660 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
22670 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
22680 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
22690 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
226a0 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
226b0 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
226c0 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
226d0 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
226e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
226f0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
22700 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
22710 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
22720 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
22730 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
22740 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
22750 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
22760 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
22770 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
22780 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
22790 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
227a0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
227b0 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
227c0 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f  , SeekRowid.*/./
227d0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
227e0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
227f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
22800 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
22810 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
22820 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
22830 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
22840 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
22850 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
22860 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
22870 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
22880 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
22890 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
228a0 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
228b0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
228c0 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20   to P2.  Or, if 
228d0 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
228e0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52  n.** SQLITE_CORR
228f0 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
22900 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
22910 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
22920 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
22930 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
22940 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
22950 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
22960 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
22970 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
22980 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
22990 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64  _SeekRowid opcod
229a0 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
229b0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  ame operation bu
229c0 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68  t also allows th
229d0 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72  e.** P3 register
229e0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f   to contain a no
229f0 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n-integer value,
22a00 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
22a10 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c  he jump is.** al
22a20 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69  ways taken.  Thi
22a30 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65  s opcode require
22a40 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79 73  s that P3 always
22a50 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
22a60 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
22a70 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
22a80 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
22a90 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
22aa0 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
22ab0 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
22ac0 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
22ad0 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
22ae0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
22af0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
22b00 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
22b10 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
22b20 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
22b30 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
22b40 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
22b50 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
22b60 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
22b70 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
22b80 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
22b90 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
22ba0 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
22bb0 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
22bc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
22bd0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
22be0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
22bf0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
22c00 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
22c10 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
22c20 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
22c30 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
22c40 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
22c50 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
22c60 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  nt)==0 ){.    ap
22c70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33  plyAffinity(pIn3
22c80 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  , SQLITE_AFF_NUM
22c90 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ERIC, encoding);
22ca0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
22cb0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
22cc0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
22cd0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20  to_p2;.  }.  /* 
22ce0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
22cf0 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a  o OP_NotExists *
22d00 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
22d10 73 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  sts:          /*
22d20 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
22d30 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
22d40 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
22d50 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
22d60 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
22d70 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22d80 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22d90 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22da0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22db0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22dc0 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
22dd0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
22de0 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69  eekOp = 0;.#endi
22df0 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  f.  assert( pC->
22e00 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
22e10 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
22e20 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
22e30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
22e40 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
22e50 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
22e60 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
22e70 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
22e80 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
22e90 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
22ea0 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
22eb0 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
22ec0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
22ed0 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
22ee0 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f   );.  pC->moveto
22ef0 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
22f00 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
22f10 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75  lete */.  pC->nu
22f20 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
22f30 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
22f40 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
22f50 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22f60 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
22f70 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
22f80 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  );.  pC->seekRes
22f90 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28  ult = res;.  if(
22fa0 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61   res!=0 ){.    a
22fb0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
22fc0 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
22fd0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
22fe0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
22ff0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
23000 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67    }else{.      g
23010 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
23020 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
23030 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
23040 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23050 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23060 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
23070 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
23080 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72  opsis: r[P2]=cur
23090 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a  sor[P1].ctr++.**
230a0 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
230b0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
230c0 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
230d0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
230e0 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
230f0 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
23100 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
23110 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
23120 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
23130 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
23140 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
23150 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
23160 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
23170 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
23180 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
23190 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
231a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
231b0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
231c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
231d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
231e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
231f0 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  1]->eCurType!=CU
23200 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
23210 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
23220 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
23230 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
23240 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
23250 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
23260 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
23270 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
23280 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
23290 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
232a0 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
232b0 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
232c0 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
232d0 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
232e0 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
232f0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
23300 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
23310 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
23320 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
23330 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
23340 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
23350 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
23360 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
23370 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
23380 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
23390 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
233a0 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
233b0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
233c0 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
233d0 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
233e0 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
233f0 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
23400 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
23410 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
23420 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
23430 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
23440 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
23450 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
23460 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
23470 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
23480 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
23490 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
234a0 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
234b0 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
234c0 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
234d0 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
234e0 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
234f0 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
23500 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
23510 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
23520 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
23530 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
23540 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
23550 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
23560 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
23570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
23580 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
23590 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
235a0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
235b0 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
235c0 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
235d0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
235e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
235f0 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
23600 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
23610 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
23620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
23630 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
23640 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
23650 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
23660 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
23670 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
23680 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
23690 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
236a0 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
236b0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
236c0 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
236d0 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
236e0 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
236f0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
23700 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
23710 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23720 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23730 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23740 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23750 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23760 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
23770 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
23780 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
23790 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
237a0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
237b0 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68  );.  {.    /* Th
237c0 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
237d0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
237e0 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
237f0 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
23800 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
23810 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
23820 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
23830 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
23840 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
23850 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
23860 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
23870 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
23880 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
23890 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
238a0 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
238b0 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
238c0 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
238d0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
238e0 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
238f0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
23900 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
23910 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
23920 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
23930 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
23940 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
23950 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
23960 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
23970 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
23980 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
23990 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
239a0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
239b0 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
239c0 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
239d0 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
239e0 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
239f0 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
23a00 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
23a10 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
23a20 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
23a30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
23a40 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
23a50 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
23a60 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
23a70 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
23a80 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
23a90 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
23aa0 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
23ab0 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
23ac0 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
23ad0 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
23ae0 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
23af0 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
23b00 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
23b10 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
23b20 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
23b30 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
23b40 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
23b50 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
23b60 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
23b70 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
23b80 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
23b90 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
23ba0 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
23bb0 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
23bc0 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
23bd0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
23be0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
23bf0 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75  3BtreeLast(pC->u
23c00 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
23c10 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
23c20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
23c30 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
23c40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23c50 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
23c60 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
23c70 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
23c80 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
23c90 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
23ca0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
23cb0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
23cc0 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70  IsValid(pC->uc.p
23cd0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
23ce0 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
23cf0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
23d00 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
23d10 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
23d20 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
23d30 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
23d40 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
23d50 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
23d60 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
23d70 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
23d80 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
23d90 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
23da0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23db0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
23dc0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
23dd0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
23de0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
23df0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
23e00 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
23e10 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
23e20 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
23e30 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
23e40 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
23e50 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
23e60 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
23e70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
23e80 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
23e90 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
23ea0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
23eb0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
23ec0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
23ed0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
23ee0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
23ef0 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
23f00 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
23f10 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
23f20 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
23f30 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
23f40 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
23f50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
23f60 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
23f70 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
23f80 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
23f90 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
23fa0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
23fb0 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
23fc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
23fd0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
23fe0 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
23ff0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
24000 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
24010 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
24020 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
24030 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
24040 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
24050 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
24060 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
24070 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
24080 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
24090 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
240a0 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
240b0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
240c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
240d0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
240e0 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20  7817-00630 */.  
240f0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
24100 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
24110 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
24120 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
24130 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
24140 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
24150 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
24160 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
24170 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
24180 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
24190 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
241a0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
241b0 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
241c0 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
241d0 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
241e0 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
241f0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
24200 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
24210 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
24220 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
24230 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
24240 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
24250 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
24260 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
24270 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
24280 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
24290 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
242a0 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
242b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
242c0 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
242d0 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
242e0 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
242f0 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24310 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
24320 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
24330 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d  . */.      cnt =
24340 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
24350 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
24360 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
24370 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
24380 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
24390 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45  >>1); v++;  /* E
243a0 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20  nsure that v is 
243b0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
243c0 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c  o */.      }whil
243d0 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  e(  ((rc = sqlit
243e0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
243f0 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
24400 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
24410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
24450 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
24460 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
24470 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
24480 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20  ++cnt<100));.   
24490 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
244a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
244b0 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ror;.      if( r
244c0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
244d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
244e0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
244f0 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
24500 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
24510 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
24520 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
24530 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
24540 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
24550 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
24560 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24570 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
24580 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24590 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
245a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
245b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
245c0 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
245d0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
245e0 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
245f0 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d  r[P3] data=r[P2]
24600 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
24610 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
24620 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
24630 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
24640 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
24650 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
24660 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
24670 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
24680 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
24690 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
246a0 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
246b0 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73  value MEM_Blob s
246c0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
246d0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20  r.** number P2. 
246e0 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65  The key is store
246f0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
24700 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a  . The key must.*
24710 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a  * be a MEM_Int..
24720 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
24730 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
24740 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
24750 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
24760 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
24770 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
24780 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
24790 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
247a0 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
247b0 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
247c0 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
247d0 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
247e0 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
247f0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
24800 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
24810 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
24820 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
24830 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  )..**.** If the 
24840 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
24850 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
24860 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c  is set, the impl
24870 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
24880 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62  .** run faster b
24890 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e  y avoiding an un
248a0 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f  necessary seek o
248b0 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f  n cursor P1.  Ho
248c0 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50  wever,.** the OP
248d0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
248e0 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c  LT flag must onl
248f0 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72  y be set if ther
24900 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70  e have been no p
24910 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e  rior.** seeks on
24920 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69   the cursor or i
24930 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
24940 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65  t seek used a ke
24950 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a  y equal to P3..*
24960 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
24970 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
24980 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
24990 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72  is opcode is par
249a0 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54  t of an.** UPDAT
249b0 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74  E operation.  Ot
249c0 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20  herwise (if the 
249d0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74  flag is clear) t
249e0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a  hen this opcode.
249f0 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  ** is part of an
24a00 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f   INSERT operatio
24a10 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  n.  The differen
24a20 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72  ce is only impor
24a30 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  tant to.** the u
24a40 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a  pdate hook..**.*
24a50 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
24a60 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61  ay point to a Ta
24a70 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f  ble structure, o
24a80 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  r may be NULL. I
24a90 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20  f it is .** not 
24aa0 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
24ab0 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69  pdate-hook (sqli
24ac0 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
24ad0 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
24ae0 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  .** following a 
24af0 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
24b00 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
24b10 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
24b20 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
24b30 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
24b40 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
24b50 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
24b60 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
24b70 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
24b80 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
24b90 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
24ba0 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
24bb0 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
24bc0 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
24bd0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
24be0 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
24bf0 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
24c00 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
24c10 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
24c20 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
24c30 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
24c40 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
24c50 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
24c60 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
24c70 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
24c80 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
24c90 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
24ca0 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50  ode: InsertInt P
24cb0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
24cc0 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
24cd0 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a  y=P3 data=r[P2].
24ce0 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
24cf0 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50   exactly like OP
24d00 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74  _Insert except t
24d10 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74  hat the key is t
24d20 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61  he.** integer va
24d30 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20  lue P3, not the 
24d40 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
24d50 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72  eger stored in r
24d60 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
24d70 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a  ase OP_Insert: .
24d80 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e  case OP_InsertIn
24d90 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
24da0 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
24db0 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
24dc0 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
24dd0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
24de0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
24df0 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
24e00 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
24e10 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
24e20 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
24e30 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
24e40 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
24e50 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
24e60 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73  itten */.  int s
24e70 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
24e80 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
24e90 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
24ea0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
24eb0 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
24ec0 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
24ed0 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
24ee0 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
24ef0 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20  hook */.  Table 
24f00 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  *pTab;      /* T
24f10 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d  able structure -
24f20 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20   used by update 
24f30 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68  and pre-update h
24f40 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  ooks */.  int op
24f50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
24f60 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65  pcode for update
24f70 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50   hook: SQLITE_UP
24f80 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49  DATE or SQLITE_I
24f90 4e 53 45 52 54 20 2a 2f 0a 20 20 42 74 72 65 65  NSERT */.  Btree
24fa0 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20  Payload x;   /* 
24fb0 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e  Payload to be in
24fc0 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 6f 70 20  serted */..  op 
24fd0 3d 20 30 3b 0a 20 20 70 44 61 74 61 20 3d 20 26  = 0;.  pData = &
24fe0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
24ff0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
25000 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
25010 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
25020 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
25030 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43  d(pData) );.  pC
25040 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25050 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25060 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
25070 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
25080 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
25090 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
250a0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
250b0 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
250c0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  >p5 & OPFLAG_ISN
250d0 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54 61  OOP) || pC->isTa
250e0 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
250f0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
25100 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70  _TABLE || pOp->p
25110 34 74 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43  4type>=P4_STATIC
25120 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
25130 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
25140 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
25150 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
25160 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
25170 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
25180 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
25190 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
251a0 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
251b0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b  t( memIsValid(pK
251c0 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  ey) );.    REGIS
251d0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
251e0 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e  3, pKey);.    x.
251f0 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  nKey = pKey->u.i
25200 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
25210 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
25220 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
25230 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d   );.    x.nKey =
25240 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20   pOp->p3;.  }.. 
25250 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
25260 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41  ==P4_TABLE && HA
25270 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62  S_UPDATE_HOOK(db
25280 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
25290 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
252a0 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
252b0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61  [pC->iDb].zDbSNa
252c0 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70  me;.    pTab = p
252d0 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20  Op->p4.pTab;.   
252e0 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
252f0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  5 & OPFLAG_ISNOO
25300 50 29 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70  P) || HasRowid(p
25310 54 61 62 29 20 29 3b 0a 20 20 20 20 6f 70 20 3d  Tab) );.    op =
25320 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
25330 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
25340 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
25350 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
25360 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54 61    }else{.    pTa
25370 62 20 3d 20 30 3b 20 2f 2a 20 4e 6f 74 20 6e 65  b = 0; /* Not ne
25380 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
25390 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
253a0 67 2e 20 2a 2f 0a 20 20 20 20 7a 44 62 20 3d 20  g. */.    zDb = 
253b0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
253c0 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f  d.  Silence a co
253d0 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
253e0 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  */.  }..#ifdef S
253f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
25400 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a  UPDATE_HOOK.  /*
25410 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d   Invoke the pre-
25420 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20  update hook, if 
25430 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  any */.  if( pOp
25440 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
25450 4c 45 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  LE ){.    if( db
25460 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  ->xPreUpdateCall
25470 62 61 63 6b 20 26 26 20 21 28 70 4f 70 2d 3e 70  back && !(pOp->p
25480 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
25490 41 54 45 29 20 29 7b 0a 20 20 20 20 20 20 73 71  ATE) ){.      sq
254a0 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61  lite3VdbePreUpda
254b0 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51  teHook(p, pC, SQ
254c0 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62  LITE_INSERT, zDb
254d0 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 70  , pTab, x.nKey,p
254e0 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 7d 0a 20  Op->p2);.    }. 
254f0 20 20 20 69 66 28 20 6f 70 20 26 26 20 70 54 61     if( op && pTa
25500 62 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20  b->aCol==0 ){.  
25510 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
25520 74 65 33 5f 73 74 72 69 63 6d 70 28 70 54 61 62  te3_stricmp(pTab
25530 2d 3e 7a 4e 61 6d 65 2c 20 22 73 71 6c 69 74 65  ->zName, "sqlite
25540 5f 73 74 61 74 31 22 29 3d 3d 30 20 29 3b 0a 20  _stat1")==0 );. 
25550 20 20 20 20 20 6f 70 20 3d 20 30 3b 0a 20 20 20       op = 0;.   
25560 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70   }.  }.  if( pOp
25570 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
25580 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65  NOOP ) break;.#e
25590 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ndif..  if( pOp-
255a0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
255b0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
255c0 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
255d0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
255e0 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
255f0 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a  Rowid = x.nKey;.
25600 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
25610 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
25620 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
25630 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61   x.pData = pData
25640 2d 3e 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d  ->z;.  x.nData =
25650 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65   pData->n;.  see
25660 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d  kResult = ((pOp-
25670 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
25680 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
25690 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
256a0 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  );.  if( pData->
256b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
256c0 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20   ){.    x.nZero 
256d0 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
256e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
256f0 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a  .nZero = 0;.  }.
25700 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20    x.pKey = 0;.  
25710 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25720 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
25730 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
25740 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
25750 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c  FLAG_APPEND|OPFL
25760 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
25770 29 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  ), seekResult.  
25780 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
25790 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
257a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
257b0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
257c0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
257d0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
257e0 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
257f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
25800 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
25810 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
25820 43 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70 20 29  Callback && op )
25830 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 54  {.    assert( pT
25840 61 62 2d 3e 61 43 6f 6c 20 29 3b 0a 20 20 20 20  ab->aCol );.    
25850 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
25860 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
25870 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61  rg, op, zDb, pTa
25880 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79  b->zName, x.nKey
25890 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
258a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
258b0 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50 34  lete P1 P2 P3 P4
258c0 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P5.**.** Delete
258d0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
258e0 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
258f0 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
25900 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
25910 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41  If the OPFLAG_SA
25920 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f  VEPOSITION bit o
25930 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65 74  f the P5 paramet
25940 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a  er is set, then.
25950 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  ** the cursor wi
25960 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  ll be left point
25970 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20 74  ing at  either t
25980 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70  he next or the p
25990 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72  revious.** recor
259a0 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  d in the table. 
259b0 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f  If it is left po
259c0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65  inting at the ne
259d0 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a  xt record, then.
259e0 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74  ** the next Next
259f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
25a00 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73  l be a no-op. As
25a10 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68   a result, in th
25a20 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73  is case.** it is
25a30 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20   ok to delete a 
25a40 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
25a50 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20  in a Next loop. 
25a60 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41  If .** OPFLAG_SA
25a70 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f  VEPOSITION bit o
25a80 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74  f P5 is clear, t
25a90 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77  hen the cursor w
25aa0 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69  ill be.** left i
25ab0 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73  n an undefined s
25ac0 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tate..**.** If t
25ad0 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  he OPFLAG_AUXDEL
25ae0 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  ETE bit is set o
25af0 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63  n P5, that indic
25b00 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a  ates that this.*
25b10 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20  * delete one of 
25b20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74  several associat
25b30 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67  ed with deleting
25b40 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
25b50 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f   all its.** asso
25b60 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74  ciated index ent
25b70 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f  ries.  Exactly o
25b80 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65  ne of those dele
25b90 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69 6d  tes is the "prim
25ba0 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20  ary".** delete. 
25bb0 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65 20   The others are 
25bc0 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f  all on OPFLAG_FO
25bd0 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20  RDELETE cursors 
25be0 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d  or else are.** m
25bf0 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20 41  arked with the A
25c00 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a  UXDELETE flag..*
25c10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
25c20 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
25c30 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f  of P2 (NB: P2 no
25c40 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74 68  t P5) is set, th
25c50 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68  en the row.** ch
25c60 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e  ange count is in
25c70 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
25c80 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
25c90 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
25ca0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
25cb0 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
25cc0 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
25cd0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
25ce0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
25cf0 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20  ot NULL then it 
25d00 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c  points to a Tabl
25d10 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68 69  e object. In thi
25d20 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a  s case either .*
25d30 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72 20  * the update or 
25d40 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c  pre-update hook,
25d50 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65   or both, may be
25d60 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31   invoked. The P1
25d70 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20   cursor must.** 
25d80 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69  have been positi
25d90 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  oned using OP_No
25da0 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
25db0 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
25dc0 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73  code in .** this
25dd0 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63 61   case. Specifica
25de0 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63  lly, if one is c
25df0 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20 70  onfigured, the p
25e00 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69  re-update hook i
25e10 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66  s .** invoked if
25e20 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P4 is not NULL.
25e30 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   The update-hook
25e40 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f   is invoked if o
25e50 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  ne is configured
25e60 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20  , .** P4 is not 
25e70 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50  NULL, and the OP
25e80 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
25e90 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a  g is set in P2..
25ea0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
25eb0 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
25ec0 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20  g is set in P2, 
25ed0 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73  then P3 contains
25ee0 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20   the address.** 
25ef0 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
25f00 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
25f10 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
25f20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
25f30 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20   row will.** be 
25f40 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75 70  set to by the up
25f50 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
25f60 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  _Delete: {.  Vdb
25f70 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63  eCursor *pC;.  c
25f80 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a  onst char *zDb;.
25f90 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
25fa0 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20   int opflags;.. 
25fb0 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e   opflags = pOp->
25fc0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
25fd0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25fe0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25ff0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26000 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26010 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26020 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
26030 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26040 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
26050 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
26060 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26070 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26080 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65  eto==0 );..#ifde
26090 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
260a0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
260b0 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61  ==P4_TABLE && Ha
260c0 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70  sRowid(pOp->p4.p
260d0 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d  Tab) && pOp->p5=
260e0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  =0 ){.    /* If 
260f0 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  p5 is zero, the 
26100 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74  seek operation t
26110 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  hat positioned t
26120 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20  he cursor prior 
26130 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c  to.    ** OP_Del
26140 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c  ete will have al
26150 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d  so set the pC->m
26160 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c  ovetoTarget fiel
26170 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  d to the rowid o
26180 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77  f.    ** the row
26190 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64   that is being d
261a0 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36  eleted */.    i6
261b0 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  4 iKey = sqlite3
261c0 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
261d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
261e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
261f0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69  >movetoTarget==i
26200 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  Key );.  }.#endi
26210 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75  f..  /* If the u
26220 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72  pdate-hook or pr
26230 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e-update-hook wi
26240 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
26250 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74  et zDb to.  ** t
26260 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
26270 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20  b to pass as to 
26280 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63  it. Also set loc
26290 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70  al pTab to a cop
262a0 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61  y.  ** of p4.pTa
262b0 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70  b. Finally, if p
262c0 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63  5 is true, indic
262d0 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20  ating that this 
262e0 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20  cursor was.  ** 
262f0 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20  last moved with 
26300 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72  OP_Next or OP_Pr
26310 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20  ev, not Seek or 
26320 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20  NotFound, set . 
26330 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d   ** VdbeCursor.m
26340 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74  ovetoTarget to t
26350 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64  he current rowid
26360 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
26370 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
26380 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f  E && HAS_UPDATE_
26390 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20  HOOK(db) ){.    
263a0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
263b0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
263c0 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d  ( pOp->p4.pTab!=
263d0 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64  0 );.    zDb = d
263e0 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
263f0 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54  zDbSName;.    pT
26400 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
26410 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  b;.    if( (pOp-
26420 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56  >p5 & OPFLAG_SAV
26430 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26  EPOSITION)!=0 &&
26440 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
26450 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f        pC->moveto
26460 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33  Target = sqlite3
26470 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
26480 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
26490 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
264a0 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f      zDb = 0;   /
264b0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
264c0 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
264d0 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
264e0 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20    pTab = 0;  /* 
264f0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
26500 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
26510 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a  warning. */.  }.
26520 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
26530 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
26540 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  HOOK.  /* Invoke
26550 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d   the pre-update-
26560 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
26570 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78  . */.  if( db->x
26580 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
26590 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61  k && pOp->p4.pTa
265a0 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  b ){.    assert(
265b0 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46   !(opflags & OPF
265c0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20  LAG_ISUPDATE) . 
265d0 20 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f          || HasRo
265e0 77 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20  wid(pTab)==0 .  
265f0 20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b         || (aMem[
26600 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26  pOp->p3].flags &
26610 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29   MEM_Int) .    )
26620 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
26630 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
26640 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f  , pC,.        (o
26650 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
26660 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
26670 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
26680 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20  TE_DELETE, .    
26690 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70      zDb, pTab, p
266a0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c  C->movetoTarget,
266b0 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33  .        pOp->p3
266c0 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66  .    );.  }.  if
266d0 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
266e0 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61  AG_ISNOOP ) brea
266f0 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a  k;.#endif. .  /*
26700 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74   Only flags that
26710 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20   can be set are 
26720 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64  SAVEPOISTION and
26730 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20   AUXDELETE */ . 
26740 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
26750 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56  5 & ~(OPFLAG_SAV
26760 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47  EPOSITION|OPFLAG
26770 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20  _AUXDELETE))==0 
26780 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
26790 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
267a0 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  ==BTREE_SAVEPOSI
267b0 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74  TION );.  assert
267c0 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  ( OPFLAG_AUXDELE
267d0 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c  TE==BTREE_AUXDEL
267e0 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ETE );..#ifdef S
267f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
26800 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29  ( p->pFrame==0 )
26810 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73  {.    if( pC->is
26820 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20  Ephemeral==0.   
26830 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35       && (pOp->p5
26840 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c   & OPFLAG_AUXDEL
26850 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  ETE)==0.        
26860 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26  && (pC->wrFlag &
26870 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
26880 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  E)==0.      ){. 
26890 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
268a0 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  e++;.    }.    i
268b0 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
268c0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
268d0 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
268e0 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  e--;.    }.  }.#
268f0 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71  endif..  rc = sq
26900 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
26910 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
26920 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d   pOp->p5);.  pC-
26930 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26940 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
26950 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
26960 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
26970 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
26980 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  rror;..  /* Invo
26990 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
269a0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
269b0 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73  */.  if( opflags
269c0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
269d0 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  E ){.    p->nCha
269e0 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64  nge++;.    if( d
269f0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
26a00 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70  ck && HasRowid(p
26a10 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62  Tab) ){.      db
26a20 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
26a30 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
26a40 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  , SQLITE_DELETE,
26a50 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d   zDb, pTab->zNam
26a60 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  e,.          pC-
26a70 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a  >movetoTarget);.
26a80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
26a90 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
26aa0 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a  }.  }..  break;.
26ab0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
26ac0 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
26ad0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
26ae0 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
26af0 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
26b00 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
26b10 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
26b20 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
26b30 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
26b40 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
26b50 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
26b60 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
26b70 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
26b80 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
26b90 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
26ba0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
26bb0 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
26bc0 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
26bd0 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
26be0 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
26bf0 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
26c00 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
26c10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26c20 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
26c30 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  re P1 P2 P3 P4.*
26c40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b  * Synopsis: if k
26c50 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
26c60 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
26c70 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
26c80 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
26c90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
26ca0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
26cb0 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
26cc0 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
26cd0 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
26ce0 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
26cf0 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
26d00 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
26d10 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
26d20 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
26d30 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
26d40 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
26d50 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
26d60 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
26d70 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
26d80 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
26d90 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
26da0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
26db0 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
26dc0 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
26dd0 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
26de0 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
26df0 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
26e00 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
26e10 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
26e20 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
26e30 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
26e40 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
26e50 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
26e60 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
26e70 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
26e80 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
26e90 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
26ea0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
26eb0 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
26ec0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
26ed0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
26ee0 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
26ef0 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
26f00 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26f10 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
26f20 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
26f30 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
26f40 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
26f50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
26f60 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
26f70 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
26f80 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
26f90 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
26fa0 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
26fb0 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
26fc0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
26fd0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
26fe0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
26ff0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
27000 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
27010 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
27020 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f  eak;.};../* Opco
27030 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50  de: SorterData P
27040 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
27050 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
27060 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
27070 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
27080 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
27090 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
270a0 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
270b0 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65  * Then clear the
270c0 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63   column header c
270d0 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50  ache on cursor P
270e0 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  3..**.** This op
270f0 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  code is normally
27100 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72   use to move a r
27110 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65  ecord out of the
27120 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f   sorter and into
27130 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74  .** a register t
27140 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63  hat is the sourc
27150 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74  e for a pseudo-t
27160 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61  able cursor crea
27170 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65  ted using.** Ope
27180 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70  nPseudo.  That p
27190 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
271a0 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68  or is the one th
271b0 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  at is identified
271c0 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72   by.** parameter
271d0 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74   P3.  Clearing t
271e0 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63  he P3 column cac
271f0 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  he as part of th
27200 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a  is opcode saves.
27210 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e  ** us from havin
27220 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70  g to issue a sep
27230 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e  arate NullRow in
27240 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65  struction to cle
27250 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a  ar that cache..*
27260 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
27270 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
27280 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75  rsor *pC;..  pOu
27290 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
272a0 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
272b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
272c0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
272d0 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
272e0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
272f0 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
27300 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d  ;.  assert( rc!=
27310 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f  SQLITE_OK || (pO
27320 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
27330 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72  Blob) );.  asser
27340 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
27350 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
27360 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20  sor );.  if( rc 
27370 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27380 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e  _to_error;.  p->
27390 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e  apCsr[pOp->p3]->
273a0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
273b0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
273c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
273d0 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
273e0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
273f0 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
27400 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
27410 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
27420 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e  complete row con
27430 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77  tent for the row
27440 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75   at .** which cu
27450 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65  rsor P1 is curre
27460 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
27470 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
27480 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
27490 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
274a0 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
274b0 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
274c0 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
274d0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
274e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
274f0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
27500 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20  cursor P1 is an 
27510 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20  index, then the 
27520 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b  content is the k
27530 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a  ey of the row..*
27540 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69  * If cursor P2 i
27550 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  s a table, then 
27560 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72  the content extr
27570 61 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74  acted is the dat
27580 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  a..**.** If the 
27590 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
275a0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
275b0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
275c0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
275d0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
275e0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
275f0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d  e..**.** If P3!=
27600 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
27610 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  de is allowed to
27620 20 6d 61 6b 65 20 61 6e 20 65 70 68 65 72 6d 65   make an epherme
27630 72 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69  ral pointer.** i
27640 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
27650 20 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61   page.  That mea
27660 6e 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74  ns that the cont
27670 65 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75  ent of the outpu
27680 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69  t.** register wi
27690 6c 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  ll be invalidate
276a0 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  d as soon as the
276b0 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20   cursor moves - 
276c0 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76  including.** mov
276d0 65 73 20 63 61 75 73 65 64 20 62 79 20 6f 74 68  es caused by oth
276e0 65 72 20 63 75 72 73 6f 72 73 20 74 68 61 74 20  er cursors that 
276f0 22 73 61 76 65 22 20 74 68 65 20 74 68 65 20 63  "save" the the c
27700 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a  urrent cursors.*
27710 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72  * position in or
27720 64 65 72 20 74 68 61 74 20 74 68 65 79 20 63 61  der that they ca
27730 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 73  n write to the s
27740 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50  ame table.  If P
27750 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63  3==0.** then a c
27760 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74 61 20  opy of the data 
27770 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d  is made into mem
27780 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66  ory.  P3!=0 is f
27790 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33  aster, but.** P3
277a0 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a  ==0 is safer..**
277b0 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65  .** If P3!=0 the
277c0 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
277d0 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
277e0 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66   is unsuitable f
277f0 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f  or use.** in OP_
27800 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f  Result and any O
27810 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e  P_Result will in
27820 76 61 6c 69 64 61 74 65 20 74 68 65 20 50 32 20  validate the P2 
27830 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74  register content
27840 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69  ..** The P2 regi
27850 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20  ster content is 
27860 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f  invalidated by o
27870 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46  pcodes like OP_F
27880 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79  unction or.** by
27890 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74   any use of anot
278a0 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  her cursor point
278b0 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20  ing to the same 
278c0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
278d0 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56  P_RowData: {.  V
278e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
278f0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
27900 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f  ;.  u32 n;..  pO
27910 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
27920 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20  ase(p, pOp);..  
27930 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27940 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27950 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27960 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27970 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27980 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
27990 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
279a0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
279b0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
279c0 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20  rter(pC)==0 );. 
279d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c   assert( pC->nul
279e0 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73  lRow==0 );.  ass
279f0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
27a00 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
27a10 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
27a20 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50  or;..  /* The OP
27a30 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
27a40 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
27a50 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
27a60 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64   ** OP_SeekRowid
27a70 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   or OP_Rewind/Op
27a80 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
27a90 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
27aa0 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74  ctions.  ** that
27ab0 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
27ac0 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  e the cursor..  
27ad0 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65 72 65  ** If this where
27ae0 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f   not the case, o
27af0 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n of the followi
27b00 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a  ng assert()s.  *
27b10 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53  * would fail.  S
27b20 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20  hould this ever 
27b30 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20  change (because 
27b40 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  of changes in th
27b50 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65  e code.  ** gene
27b60 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20  rator) then the 
27b70 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20  fix would be to 
27b80 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f  insert a call to
27b90 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
27ba0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
27bb0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
27bc0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
27bd0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
27be0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
27bf0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
27c00 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a  sr) );.#if 0  /*
27c10 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75   Not required du
27c20 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  e to the previou
27c30 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74  s to assert() st
27c40 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63  atements */.  rc
27c50 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
27c60 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
27c70 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
27c80 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
27c90 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
27ca0 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c  endif..  n = sql
27cb0 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64  ite3BtreePayload
27cc0 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69  Size(pCrsr);.  i
27cd0 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c  f( n>(u32)db->aL
27ce0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
27cf0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
27d00 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
27d10 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e   }.  testcase( n
27d20 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
27d30 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
27d40 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20  Btree(pCrsr, 0, 
27d50 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  n, pOut);.  if( 
27d60 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
27d70 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
27d80 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44  if( !pOp->p3 ) D
27d90 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
27da0 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
27db0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
27dc0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
27dd0 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
27de0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
27df0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
27e00 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
27e10 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
27e20 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  owid.**.** Store
27e30 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
27e40 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
27e50 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
27e60 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
27e70 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
27e80 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
27e90 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
27ea0 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
27eb0 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
27ec0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
27ed0 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
27ee0 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
27ef0 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
27f00 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
27f10 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
27f20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
27f30 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
27f40 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
27f50 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
27f60 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
27f70 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
27f80 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
27f90 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73  pC;.  i64 v;.  s
27fa0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
27fb0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
27fc0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
27fd0 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  ule;..  pOut = o
27fe0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
27ff0 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
28000 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28010 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28020 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28030 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28040 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28050 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28060 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
28070 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
28080 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
28090 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
280a0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
280b0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
280c0 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
280d0 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
280e0 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
280f0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
28100 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
28110 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
28120 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
28130 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
28140 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20  RTYPE_VTAB ){.  
28150 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
28160 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  .pVCur!=0 );.   
28170 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e   pVtab = pC->uc.
28180 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
28190 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
281a0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
281b0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
281c0 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
281d0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
281e0 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72  wid(pC->uc.pVCur
281f0 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
28200 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
28210 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
28220 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
28230 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28240 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  or;.#endif /* SQ
28250 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
28260 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73  LTABLE */.  }els
28270 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
28280 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
28290 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
282a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
282b0 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
282c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
282d0 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
282e0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
282f0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28300 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
28310 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
28320 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  ){.      pOut->f
28330 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
28340 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
28350 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69    }.    v = sqli
28360 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b  te3BtreeIntegerK
28370 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ey(pC->uc.pCurso
28380 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  r);.  }.  pOut->
28390 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
283a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
283b0 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a  NullRow P1 * * *
283c0 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68   *.**.** Move th
283d0 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  e cursor P1 to a
283e0 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20   null row.  Any 
283f0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74  OP_Column operat
28400 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63  ions.** that occ
28410 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72  ur while the cur
28420 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75  sor is on the nu
28430 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61  ll row will alwa
28440 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55  ys.** write a NU
28450 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  LL..*/.case OP_N
28460 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65  ullRow: {.  Vdbe
28470 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
28480 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
28490 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
284a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
284b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
284c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
284d0 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  C!=0 );.  pC->nu
284e0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d  llRow = 1;.  pC-
284f0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28500 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
28510 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28520 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b  CURTYPE_BTREE ){
28530 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28540 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
28550 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
28560 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43  eeClearCursor(pC
28570 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
28580 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
28590 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45 6e  * Opcode: SeekEn
285a0 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  d P1 * * * *.**.
285b0 2a 2a 20 50 6f 73 69 74 69 6f 6e 20 63 75 72 73  ** Position curs
285c0 6f 72 20 50 31 20 61 74 20 74 68 65 20 65 6e 64  or P1 at the end
285d0 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 66 6f   of the btree fo
285e0 72 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66  r the purpose of
285f0 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20 61 20  .** appending a 
28600 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74  new entry onto t
28610 68 65 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  he btree..**.** 
28620 49 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68  It is assumed th
28630 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
28640 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20 61   used only for a
28650 70 70 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 0a  ppending and so.
28660 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
28670 20 69 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20   is valid, then 
28680 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
28690 61 6c 72 65 61 64 79 20 62 65 20 70 6f 69 6e 74  already be point
286a0 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 65 6e  ing.** at the en
286b0 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 61  d of the btree a
286c0 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73  nd so no changes
286d0 20 61 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20   are made to.** 
286e0 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f  the cursor..*/./
286f0 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50  * Opcode: Last P
28700 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
28710 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
28720 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
28730 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73  lumn or Prev ins
28740 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
28750 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
28760 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  o the last entry
28770 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28780 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
28790 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
287a0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
287b0 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
287c0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
287d0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
287e0 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
287f0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
28800 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
28810 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
28820 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
28830 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
28840 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
28850 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
28860 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
28870 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
28880 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
28890 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
288a0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
288b0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
288c0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
288d0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
288e0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
288f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 45  */.case OP_SeekE
28900 6e 64 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74  nd:.case OP_Last
28910 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
28920 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
28930 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
28940 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
28950 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
28960 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28970 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28980 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28990 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
289a0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
289b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
289c0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
289d0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
289e0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
289f0 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  sor;.  res = 0;.
28a00 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
28a10 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
28a20 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
28a30 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
28a40 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69  code;.#endif.  i
28a50 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
28a60 4f 50 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20 20  OP_SeekEnd ){.  
28a70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28a80 32 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  2==0 );.    pC->
28a90 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31 3b  seekResult = -1;
28aa0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
28ab0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
28ac0 69 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20  idNN(pCrsr) ){. 
28ad0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
28ae0 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  }.  }.  rc = sql
28af0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
28b00 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
28b10 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
28b20 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  res;.  pC->defer
28b30 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
28b40 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
28b50 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
28b60 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
28b70 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28b80 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  or;.  if( pOp->p
28b90 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  2>0 ){.    VdbeB
28ba0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
28bb0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
28bc0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
28bd0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
28be0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28bf0 49 66 53 6d 61 6c 6c 65 72 20 50 31 20 50 32 20  IfSmaller P1 P2 
28c00 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74  P3 * *.**.** Est
28c10 69 6d 61 74 65 20 74 68 65 20 6e 75 6d 62 65 72  imate the number
28c20 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
28c30 74 61 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20  table P1.  Jump 
28c40 74 6f 20 50 32 20 69 66 20 74 68 61 74 0a 2a 2a  to P2 if that.**
28c50 20 65 73 74 69 6d 61 74 65 20 69 73 20 6c 65 73   estimate is les
28c60 73 20 74 68 61 6e 20 61 70 70 72 6f 78 69 6d 61  s than approxima
28c70 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29  tely 2**(0.1*P3)
28c80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53  ..*/.case OP_IfS
28c90 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20 20  maller: {       
28ca0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
28cb0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
28cc0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
28cd0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 36  .  int res;.  i6
28ce0 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28  4 sz;..  assert(
28cf0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28d00 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28d10 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28d20 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28d30 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28d40 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
28d50 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
28d60 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
28d70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
28d80 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
28d90 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29  res);.  if( rc )
28da0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
28db0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
28dc0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a  res==0 ){.    sz
28dd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 52   = sqlite3BtreeR
28de0 6f 77 43 6f 75 6e 74 45 73 74 28 70 43 72 73 72  owCountEst(pCrsr
28df0 29 3b 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59  );.    if( ALWAY
28e00 53 28 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69  S(sz>=0) && sqli
28e10 74 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29 73  te3LogEst((u64)s
28e20 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65 73  z)<pOp->p3 ) res
28e30 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65   = 1;.  }.  Vdbe
28e40 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
28e50 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
28e60 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
28e70 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
28e80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
28e90 65 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  erSort P1 P2 * *
28ea0 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61   *.**.** After a
28eb0 6c 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65 20  ll records have 
28ec0 62 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e  been inserted in
28ed0 74 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62  to the Sorter ob
28ee0 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69  ject.** identifi
28ef0 65 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65  ed by P1, invoke
28f00 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
28f10 61 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20  actually do the 
28f20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70  sorting..** Jump
28f30 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20   to P2 if there 
28f40 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74  are no records t
28f50 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a  o be sorted..**.
28f60 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
28f70 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f  s an alias for O
28f80 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65  P_Sort and OP_Re
28f90 77 69 6e 64 20 74 68 61 74 20 69 73 20 75 73 65  wind that is use
28fa0 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20  d.** for Sorter 
28fb0 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f  objects..*/./* O
28fc0 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
28fd0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
28fe0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
28ff0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
29000 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
29010 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
29020 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
29030 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
29040 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
29050 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
29060 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
29070 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
29080 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
29090 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
290a0 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
290b0 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
290c0 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
290d0 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
290e0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
290f0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
29100 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
29110 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
29120 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
29130 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
29140 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
29150 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
29160 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
29170 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
29180 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
29190 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
291a0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
291b0 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
291c0 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
291d0 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
291e0 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
291f0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
29200 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
29210 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
29220 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
29230 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
29240 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
29250 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
29260 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
29270 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
29280 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a  STATUS_SORT]++;.
29290 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
292a0 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
292b0 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
292c0 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
292d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
292e0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
292f0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
29300 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
29310 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
29320 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
29330 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
29340 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
29350 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
29360 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
29370 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75  dex is empty, ju
29380 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
29390 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20  o P2..** If the 
293a0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
293b0 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
293c0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
293d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69   following .** i
293e0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
293f0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
29400 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
29410 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
29420 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
29430 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
29440 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
29450 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
29460 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
29470 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
29480 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
29490 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
294a0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
294b0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
294c0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
294d0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
294e0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
294f0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
29500 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29510 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29520 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
29530 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29540 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29550 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
29560 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
29570 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
29580 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
29590 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
295a0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
295b0 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e  eekOp = OP_Rewin
295c0 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  d;.#endif.  if( 
295d0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
295e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
295f0 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64  VdbeSorterRewind
29600 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65  (pC, &res);.  }e
29610 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
29620 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
29630 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
29640 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e      pCrsr = pC->
29650 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  uc.pCursor;.    
29660 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
29670 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
29680 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
29690 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
296a0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
296b0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
296c0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
296d0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69  E_STALE;.  }.  i
296e0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
296f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
29700 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
29710 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65   (u8)res;.  asse
29720 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
29730 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
29740 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
29750 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
29760 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
29770 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
29780 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29790 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50  de: Next P1 P2 P
297a0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64  3 P4 P5.**.** Ad
297b0 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20  vance cursor P1 
297c0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
297d0 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65  s to the next ke
297e0 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
297f0 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
29800 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
29810 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f  are no more key/
29820 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
29830 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
29840 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
29850 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
29860 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
29870 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75  r advance was su
29880 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
29890 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
298a0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e   P2..**.** The N
298b0 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  ext opcode is on
298c0 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69  ly valid followi
298d0 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65  ng an SeekGT, Se
298e0 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52  ekGE, or.** OP_R
298f0 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65  ewind opcode use
29900 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68  d to position th
29910 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20  e cursor.  Next 
29920 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a  is not allowed.*
29930 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b  * to follow Seek
29940 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f  LT, SeekLE, or O
29950 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  P_Last..**.** Th
29960 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
29970 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
29980 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
29990 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75  do-table.  P1 mu
299a0 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20  st have.** been 
299b0 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20  opened prior to 
299c0 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74  this opcode or t
299d0 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20  he program will 
299e0 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  segfault..**.** 
299f0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
29a00 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
29a10 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
29a20 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
29a30 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
29a40 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
29a50 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
29a60 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
29a70 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
29a80 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
29a90 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
29aa0 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
29ab0 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
29ac0 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
29ad0 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
29ae0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
29af0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
29b00 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
29b10 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
29b20 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29  lite3BtreeNext()
29b30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
29b40 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
29b50 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
29b60 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
29b70 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
29b80 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
29b90 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
29ba0 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
29bb0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65  ** See also: Pre
29bc0 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f  v, NextIfOpen.*/
29bd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
29be0 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  IfOpen P1 P2 P3 
29bf0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
29c00 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
29c10 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63  st like Next exc
29c20 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
29c30 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
29c40 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
29c50 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f  a no-op..*/./* O
29c60 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
29c70 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
29c80 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
29c90 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
29ca0 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
29cb0 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
29cc0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
29cd0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
29ce0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
29cf0 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
29d00 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
29d10 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
29d20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
29d30 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
29d40 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
29d50 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
29d60 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
29d70 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
29d80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20  .**.** The Prev 
29d90 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
29da0 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
29db0 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45  n SeekLT, SeekLE
29dc0 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20  , or.** OP_Last 
29dd0 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70  opcode used to p
29de0 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73  osition the curs
29df0 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74  or.  Prev is not
29e00 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66   allowed.** to f
29e10 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65  ollow SeekGT, Se
29e20 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69  ekGE, or OP_Rewi
29e30 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  nd..**.** The P1
29e40 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
29e50 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
29e60 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
29e70 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a  able.  If P1 is.
29e80 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e  ** not open then
29e90 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
29ea0 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
29eb0 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
29ec0 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
29ed0 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61  btree implementa
29ee0 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20  tion. If P3==1, 
29ef0 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31  that.** means P1
29f00 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   is an SQL index
29f10 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69   and that this i
29f20 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64  nstruction could
29f30 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d   have been.** om
29f40 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e  itted if that in
29f50 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69  dex had been uni
29f60 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61  que.  P3 is usua
29f70 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a  lly 0.  P3 is.**
29f80 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30   always either 0
29f90 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   or 1..**.** P4 
29fa0 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
29fb0 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
29fc0 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
29fd0 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
29fe0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
29ff0 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ious()..**.** If
2a000 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20   P5 is positive 
2a010 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20  and the jump is 
2a020 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e  taken, then even
2a030 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d  t counter.** num
2a040 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20  ber P5-1 in the 
2a050 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
2a060 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
2a070 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  d..*/./* Opcode:
2a080 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50   PrevIfOpen P1 P
2a090 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2a0a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
2a0b0 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65  ks just like Pre
2a0c0 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  v except that if
2a0d0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f   cursor P1 is no
2a0e0 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68  t.** open it beh
2a0f0 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  aves a no-op..*/
2a100 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2a110 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a  erNext P1 P2 * *
2a120 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
2a130 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
2a140 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78   like OP_Next ex
2a150 63 65 70 74 20 74 68 61 74 20 50 31 20 6d 75 73  cept that P1 mus
2a160 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72  t be a.** sorter
2a170 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68 69 63   object for whic
2a180 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65 72 53  h the OP_SorterS
2a190 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73 20 62  ort opcode has b
2a1a0 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20  een.** invoked. 
2a1b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61 64 76   This opcode adv
2a1c0 61 6e 63 65 73 20 74 68 65 20 63 75 72 73 6f 72  ances the cursor
2a1d0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 6f 72   to the next sor
2a1e0 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f  ted.** record, o
2a1f0 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69 66  r jumps to P2 if
2a200 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f   there are no mo
2a210 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f 72 64  re sorted record
2a220 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
2a230 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20  rterNext: {  /* 
2a240 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
2a250 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43 20  rsor *pC;..  pC 
2a260 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a270 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
2a280 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
2a290 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2a2a0 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20  eSorterNext(db, 
2a2b0 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74  pC);.  goto next
2a2c0 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50  _tail;.case OP_P
2a2d0 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  revIfOpen:    /*
2a2e0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2a2f0 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20  _NextIfOpen:    
2a300 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
2a310 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2a320 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  1]==0 ) break;. 
2a330 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
2a340 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76   */.case OP_Prev
2a350 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2a360 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
2a370 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  xt:          /* 
2a380 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
2a390 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2a3a0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2a3b0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
2a3c0 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a  pOp->p5<ArraySiz
2a3d0 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29  e(p->aCounter) )
2a3e0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2a3f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2a400 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2a410 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2a420 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2a430 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2a440 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2a450 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2a460 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2a470 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
2a480 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
2a490 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
2a4a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2a4b0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
2a4c0 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  v || pOp->p4.xAd
2a4d0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
2a4e0 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20  reePrevious );. 
2a4f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2a500 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f  code!=OP_NextIfO
2a510 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  pen || pOp->p4.x
2a520 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
2a530 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
2a540 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2a550 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65  de!=OP_PrevIfOpe
2a560 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
2a570 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
2a580 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20  reePrevious);.. 
2a590 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63   /* The Next opc
2a5a0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
2a5b0 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53   after SeekGT, S
2a5c0 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e  eekGE, and Rewin
2a5d0 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76  d..  ** The Prev
2a5e0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2a5f0 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c  used after SeekL
2a600 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c  T, SeekLE, and L
2a610 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  ast. */.  assert
2a620 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2a630 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Next || pOp->o
2a640 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
2a650 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70  Open.       || p
2a660 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2a670 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  ekGT || pC->seek
2a680 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20  Op==OP_SeekGE.  
2a690 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2a6a0 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c  Op==OP_Rewind ||
2a6b0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2a6c0 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74  Found);.  assert
2a6d0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2a6e0 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Prev || pOp->o
2a6f0 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66  pcode!=OP_PrevIf
2a700 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70  Open.       || p
2a710 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2a720 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  ekLT || pC->seek
2a730 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20  Op==OP_SeekLE.  
2a740 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2a750 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a  Op==OP_Last );..
2a760 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78    rc = pOp->p4.x
2a770 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70  Advance(pC->uc.p
2a780 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29  Cursor, pOp->p3)
2a790 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70  ;.next_tail:.  p
2a7a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2a7b0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2a7c0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2a7d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29  rc==SQLITE_OK,2)
2a7e0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2a7f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d  TE_OK ){.    pC-
2a800 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
2a810 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f    p->aCounter[pO
2a820 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66  p->p5]++;.#ifdef
2a830 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
2a840 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
2a850 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
2a860 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
2a870 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
2a880 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
2a890 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
2a8a0 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62  E_DONE ) goto ab
2a8b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2a8c0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2a8d0 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  OK;.  pC->nullRo
2a8e0 77 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68  w = 1;.  goto ch
2a8f0 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2a900 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
2a910 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
2a920 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2a930 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
2a940 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2a950 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
2a960 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
2a970 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
2a980 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
2a990 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
2a9a0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
2a9b0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
2a9c0 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
2a9d0 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
2a9e0 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  il..**.** If P4 
2a9f0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
2aa00 6e 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62  n it is the numb
2aa10 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  er of values in 
2aa20 74 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20  the unpacked.** 
2aa30 6b 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20  key of reg(P2). 
2aa40 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50   In that case, P
2aa50 33 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  3 is the index o
2aa60 66 20 74 68 65 20 66 69 72 73 74 20 72 65 67 69  f the first regi
2aa70 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  ster.** for the 
2aa80 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54  unpacked key.  T
2aa90 68 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20  he availability 
2aaa0 6f 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20  of the unpacked 
2aab0 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65  key can sometime
2aac0 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d  s.** be an optim
2aad0 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ization..**.** I
2aae0 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
2aaf0 4c 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73  LAG_APPEND bit s
2ab00 65 74 2c 20 74 68 61 74 20 69 73 20 61 20 68 69  et, that is a hi
2ab10 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
2ab20 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74   layer.** that t
2ab30 68 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69  his insert is li
2ab40 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
2ab50 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  pend..**.** If P
2ab60 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
2ab70 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74  _NCHANGE bit set
2ab80 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  , then the chang
2ab90 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20  e counter is.** 
2aba0 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
2abb0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
2abc0 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
2abd0 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63  NCHANGE bit is c
2abe0 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  lear,.** then th
2abf0 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
2ac00 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2ac10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
2ac20 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
2ac30 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
2ac40 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  et, the implemen
2ac50 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20  tation might.** 
2ac60 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76  run faster by av
2ac70 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65  oiding an unnece
2ac80 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75  ssary seek on cu
2ac90 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65  rsor P1.  Howeve
2aca0 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47  r,.** the OPFLAG
2acb0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
2acc0 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65  lag must only be
2acd0 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61   set if there ha
2ace0 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72  ve been no prior
2acf0 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65  .** seeks on the
2ad00 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68   cursor or if th
2ad10 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65  e most recent se
2ad20 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71  ek used a key eq
2ad30 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50  uivalent.** to P
2ad40 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  2. .**.** This i
2ad50 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
2ad60 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
2ad70 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
2ad80 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
2ad90 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
2ada0 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  OP_Insert..*/./*
2adb0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49   Opcode: SorterI
2adc0 6e 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20  nsert P1 P2 * * 
2add0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
2ade0 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52  ey=r[P2].**.** R
2adf0 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
2ae00 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
2ae10 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
2ae20 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
2ae30 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
2ae40 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
2ae50 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
2ae60 6f 20 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e  o the sorter P1.
2ae70 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
2ae80 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a  ntry is nil..*/.
2ae90 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e  case OP_SorterIn
2aea0 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69  sert:       /* i
2aeb0 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n2 */.case OP_Id
2aec0 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20  xInsert: {      
2aed0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
2aee0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2aef0 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a  BtreePayload x;.
2af00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2af10 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2af20 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2af30 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2af40 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2af50 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2af60 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
2af70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
2af80 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2af90 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
2afa0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2afb0 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
2afc0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
2afd0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  );.  if( pOp->p5
2afe0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
2aff0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
2b000 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2b010 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2b020 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e  E_BTREE || pOp->
2b030 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2b040 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73  rInsert );.  ass
2b050 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
2b060 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78  ==0 );.  rc = Ex
2b070 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
2b080 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2b090 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2b0a0 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  or;.  if( pOp->o
2b0b0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2b0c0 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63  Insert ){.    rc
2b0d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
2b0e0 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49  rterWrite(pC, pI
2b0f0 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n2);.  }else{.  
2b100 20 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d    x.nKey = pIn2-
2b110 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d  >n;.    x.pKey =
2b120 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e   pIn2->z;.    x.
2b130 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f  aMem = aMem + pO
2b140 70 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65  p->p3;.    x.nMe
2b150 6d 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  m = (u16)pOp->p4
2b160 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  .i;.    rc = sql
2b170 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
2b180 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
2b190 26 78 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f  &x,.         (pO
2b1a0 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
2b1b0 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41  APPEND|OPFLAG_SA
2b1c0 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20  VEPOSITION)), . 
2b1d0 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
2b1e0 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
2b1f0 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
2b200 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
2b210 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73         );.    as
2b220 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2b230 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2b240 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
2b250 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2b260 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20  ;.  }.  if( rc) 
2b270 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2b280 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
2b290 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2b2a0 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
2b2b0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2b2c0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d  is: key=r[P2@P3]
2b2d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
2b2e0 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
2b2f0 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
2b300 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
2b310 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
2b320 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
2b330 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
2b340 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
2b350 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
2b360 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
2b370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
2b380 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
2b390 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
2b3a0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
2b3b0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2b3c0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2b3d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2b3e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2b3f0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
2b400 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  >p2+pOp->p3<=(p-
2b410 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
2b420 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73  rsor)+1 );.  ass
2b430 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2b440 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2b450 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2b460 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2b470 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2b480 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2b490 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2b4a0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2b4b0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
2b4c0 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
2b4d0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
2b4e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2b4f0 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
2b500 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2b510 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2b520 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
2b530 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2b540 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  0;.  r.aMem = &a
2b550 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2b560 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2b570 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
2b580 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
2b590 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63   &res);.  if( rc
2b5a0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2b5b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2b5c0 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
2b5d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2b5e0 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42  eDelete(pCrsr, B
2b5f0 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b  TREE_AUXDELETE);
2b600 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2b610 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2b620 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73  error;.  }.  ass
2b630 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2b640 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2b650 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2b660 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2b670 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2b680 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2b690 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65  ./* Opcode: Defe
2b6a0 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33  rredSeek P1 * P3
2b6b0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2b6c0 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31  s: Move P3 to P1
2b6d0 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64  .rowid if needed
2b6e0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
2b6f0 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f  open index curso
2b700 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63 75  r and P3 is a cu
2b710 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72  rsor on the corr
2b720 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62  esponding.** tab
2b730 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  le.  This opcode
2b740 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65 64   does a deferred
2b750 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20   seek of the P3 
2b760 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20  table cursor.** 
2b770 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
2b780 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
2b790 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  he current row o
2b7a0 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  f P1..**.** This
2b7b0 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20 73   is a deferred s
2b7c0 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
2b7d0 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
2b7e0 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
2b7f0 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
2b800 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
2b810 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
2b820 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
2b830 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
2b840 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20   happens..**.** 
2b850 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72  P4 may be an arr
2b860 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28  ay of integers (
2b870 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59  type P4_INTARRAY
2b880 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20  ) containing.** 
2b890 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  one entry for ea
2b8a0 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
2b8b0 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61   P3 table.  If a
2b8c0 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a  rray entry a(i).
2b8d0 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ** is non-zero, 
2b8e0 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
2b8f0 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20  umn a(i)-1 from 
2b900 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a  cursor P3 is .**
2b910 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70   equivalent to p
2b920 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65  erforming the de
2b930 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20  ferred seek and 
2b940 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
2b950 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50  umn i .** from P
2b960 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61  1.  This informa
2b970 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
2b980 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f  n P3 and used to
2b990 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61   redirect.** rea
2b9a0 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76  ds against P3 ov
2b9b0 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70  er to P1, thus p
2b9c0 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67  ossibly avoiding
2b9d0 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20   the need to.** 
2b9e0 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75  seek and read cu
2b9f0 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f  rsor P3..*/./* O
2ba00 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
2ba10 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2ba20 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2ba30 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
2ba40 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
2ba50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
2ba60 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
2ba70 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
2ba80 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
2ba90 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
2baa0 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
2bab0 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
2bac0 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
2bad0 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
2bae0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
2baf0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
2bb00 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
2bb10 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
2bb20 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
2bb30 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
2bb40 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a  OP_DeferredSeek:
2bb50 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
2bb60 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
2bb70 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65  * out2 */.  Vdbe
2bb80 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
2bb90 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
2bba0 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  1 index cursor *
2bbb0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2bbc0 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20  pTabCur;        
2bbd0 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20  /* The P2 table 
2bbe0 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72  cursor (OP_Defer
2bbf0 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f  redSeek only) */
2bc00 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20  .  i64 rowid;   
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2bc20 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31 20  * Rowid that P1 
2bc30 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74  current points t
2bc40 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
2bc50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2bc60 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2bc70 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2bc80 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2bc90 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2bca0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2bcb0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2bcc0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2bcd0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2bce0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
2bcf0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
2bd00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2bd10 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2bd20 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2bd30 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c  ( !pC->nullRow |
2bd40 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2bd50 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20  P_IdxRowid );.. 
2bd60 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64   /* The IdxRowid
2bd70 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65   and Seek opcode
2bd80 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62  s are combined b
2bd90 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f  ecause of the co
2bda0 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f  mmonality.  ** o
2bdb0 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  f sqlite3VdbeCur
2bdc0 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64  sorRestore() and
2bdd0 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
2bde0 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20  owid(). */.  rc 
2bdf0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
2be00 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a  sorRestore(pC);.
2be10 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65  .  /* sqlite3Vbe
2be20 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
2be30 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66  can only fail if
2be40 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20   the record has 
2be50 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a  been deleted.  *
2be60 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72  * out from under
2be70 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
2be80 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61  at will never ha
2be90 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78  ppens for an Idx
2bea0 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65  Rowid.  ** or Se
2beb0 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  ek opcode */.  i
2bec0 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
2bed0 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
2bee0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2bef0 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e  r;..  if( !pC->n
2bf00 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f  ullRow ){.    ro
2bf10 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  wid = 0;  /* Not
2bf20 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
2bf30 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
2bf40 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
2bf50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2bf60 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
2bf70 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
2bf80 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72  owid);.    if( r
2bf90 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
2bfa0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
2bfb0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2bfc0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70     }.    if( pOp
2bfd0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66  ->opcode==OP_Def
2bfe0 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20  erredSeek ){.   
2bff0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2c000 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
2c010 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2c020 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70       pTabCur = p
2c030 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d  ->apCsr[pOp->p3]
2c040 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2c050 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20  pTabCur!=0 );.  
2c060 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2c070 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  Cur->eCurType==C
2c080 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2c090 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2c0a0 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f  abCur->uc.pCurso
2c0b0 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  r!=0 );.      as
2c0c0 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69  sert( pTabCur->i
2c0d0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20  sTable );.      
2c0e0 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  pTabCur->nullRow
2c0f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62   = 0;.      pTab
2c100 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65  Cur->movetoTarge
2c110 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  t = rowid;.     
2c120 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72   pTabCur->deferr
2c130 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
2c140 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2c150 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
2c160 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  RRAY || pOp->p4.
2c170 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70  ai==0 );.      p
2c180 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20  TabCur->aAltMap 
2c190 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
2c1a0 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c      pTabCur->pAl
2c1b0 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20  tCursor = pC;.  
2c1c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
2c1d0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
2c1e0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
2c1f0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
2c200 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  rowid;.    }.  }
2c210 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2c220 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2c230 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20  P_IdxRowid );.  
2c240 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c250 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f  SetNull(&aMem[pO
2c260 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62  p->p2]);.  }.  b
2c270 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2c280 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20  de: IdxGE P1 P2 
2c290 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2c2a0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2c2b0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2c2c0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2c2d0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2c2e0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2c2f0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2c300 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2c310 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f  PRIMARY KEY.  Co
2c320 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
2c330 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
2c340 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
2c350 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2c360 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2c370 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2c380 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a  Y KEY or ROWID .
2c390 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  ** fields at the
2c3a0 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   end..**.** If t
2c3b0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2c3c0 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
2c3d0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
2c3e0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2c3f0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2c400 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2c410 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2c420 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2c430 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2c440 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34  dxGT P1 P2 P3 P4
2c450 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2c460 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2c470 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2c480 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2c490 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2c4a0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2c4b0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2c4c0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2c4d0 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
2c4e0 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2c4f0 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
2c500 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
2c510 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2c520 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2c530 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2c540 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
2c550 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
2c560 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2c570 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2c580 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
2c590 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
2c5a0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2c5b0 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2c5c0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2c5d0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2c5e0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2c5f0 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xLT P1 P2 P3 P4 
2c600 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2c610 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2c620 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2c630 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2c640 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2c650 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2c660 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2c670 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2c680 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20  Y KEY or ROWID. 
2c690 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2c6a0 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a  y value against.
2c6b0 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61  ** the index tha
2c6c0 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2c6d0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2c6e0 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2c6f0 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f  ARY KEY or.** RO
2c700 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
2c710 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
2c720 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2c730 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
2c740 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
2c750 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
2c760 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2c770 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2c780 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2c790 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2c7a0 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xLE P1 P2 P3 P4 
2c7b0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2c7c0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2c7d0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2c7e0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2c7f0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2c800 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2c810 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2c820 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2c830 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20  Y KEY or ROWID. 
2c840 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2c850 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a  y value against.
2c860 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61  ** the index tha
2c870 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2c880 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2c890 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2c8a0 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f  ARY KEY or.** RO
2c8b0 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
2c8c0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
2c8d0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2c8e0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
2c8f0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
2c900 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
2c910 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65  p.** to P2. Othe
2c920 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2c930 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2c940 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2c950 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20  ase OP_IdxLE:   
2c960 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2c970 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a  /.case OP_IdxGT:
2c980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2c990 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
2c9a0 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LT:          /* 
2c9b0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2c9c0 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20  IdxGE:  {       
2c9d0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2c9e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
2c9f0 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
2ca00 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
2ca10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2ca20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2ca30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2ca40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2ca50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2ca60 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2ca70 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20  ( pC->isOrdered 
2ca80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2ca90 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2caa0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
2cab0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
2cac0 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65  rsor!=0);.  asse
2cad0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2cae0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
2caf0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
2cb00 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  0 || pOp->p5==1 
2cb10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2cb20 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2cb30 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  32 );.  r.pKeyIn
2cb40 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
2cb50 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
2cb60 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
2cb70 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2cb80 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20  e<OP_IdxLT ){.  
2cb90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2cba0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
2cbb0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2cbc0 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
2cbd0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
2cbe0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
2cbf0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2cc00 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c  ode==OP_IdxGE ||
2cc10 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2cc20 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxLT );.    r.
2cc30 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
2cc40 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26    }.  r.aMem = &
2cc50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
2cc60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2cc70 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  UG.  { int i; fo
2cc80 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
2cc90 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
2cca0 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
2ccb0 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
2ccc0 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f  if.  res = 0;  /
2ccd0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
2cce0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
2ccf0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
2cd00 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
2cd10 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72  VdbeIdxKeyCompar
2cd20 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72  e(db, pC, &r, &r
2cd30 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  es);.  assert( (
2cd40 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50  OP_IdxLE&1)==(OP
2cd50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50  _IdxLT&1) && (OP
2cd60 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxGE&1)==(OP_I
2cd70 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28  dxGT&1) );.  if(
2cd80 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29   (pOp->opcode&1)
2cd90 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29  ==(OP_IdxLT&1) )
2cda0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2cdb0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2cdc0 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xLE || pOp->opco
2cdd0 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
2cde0 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a      res = -res;.
2cdf0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2ce00 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2ce10 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f  ==OP_IdxGE || pO
2ce20 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2ce30 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b  xGT );.    res++
2ce40 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
2ce50 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29  chTaken(res>0,2)
2ce60 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2ce70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ce80 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e  rror;.  if( res>
2ce90 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
2cea0 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
2ceb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
2cec0 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
2ced0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
2cee0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2cef0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2cf00 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
2cf10 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
2cf20 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
2cf30 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
2cf40 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
2cf50 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
2cf60 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2cf70 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
2cf80 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
2cf90 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2cfa0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2cfb0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2cfc0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2cfd0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2cfe0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2cff0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2d000 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2d010 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
2d020 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
2d030 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
2d040 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
2d050 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
2d060 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
2d070 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
2d080 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
2d090 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
2d0a0 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
2d0b0 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
2d0c0 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
2d0d0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
2d0e0 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
2d0f0 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
2d100 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
2d110 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
2d120 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
2d130 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
2d140 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
2d150 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d  If no page movem
2d160 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64  ent was required
2d170 20 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a   (because the.**
2d180 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
2d190 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
2d1a0 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
2d1b0 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
2d1c0 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69  hen a .** zero i
2d1d0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2d1e0 73 74 65 72 20 50 32 2e 20 20 49 66 20 41 55 54  ster P2.  If AUT
2d1f0 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
2d200 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
2d210 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2d220 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2d230 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2d240 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2d250 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  if there are any
2d260 20 61 63 74 69 76 65 20 72 65 61 64 65 72 20 56   active reader V
2d270 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73  Ms when.** it is
2d280 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69   invoked. This i
2d290 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  s done to avoid 
2d2a0 74 68 65 20 64 69 66 66 69 63 75 6c 74 79 20 61  the difficulty a
2d2b0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a  ssociated with .
2d2c0 2a 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69 73  ** updating exis
2d2d0 74 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65  ting cursors whe
2d2e0 6e 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73  n a root page is
2d2f0 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54   moved in an AUT
2d300 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61  OVACUUM .** data
2d310 62 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72  base. This error
2d320 20 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20   is thrown even 
2d330 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2d340 69 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41  is not an AUTOVA
2d350 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f  CUUM .** db in o
2d360 72 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e  rder to avoid in
2d370 74 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63  troducing an inc
2d380 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65 74  ompatibility bet
2d390 77 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20  ween autovacuum 
2d3a0 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f  .** and non-auto
2d3b0 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a  vacuum modes..**
2d3c0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
2d3d0 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
2d3e0 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
2d3f0 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69   out2 */.  int i
2d400 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62  Moved;.  int iDb
2d410 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
2d420 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2d430 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2d440 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  >1 );.  pOut = o
2d450 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2d460 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
2d470 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2d480 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  .  if( db->nVdbe
2d490 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73  Read > db->nVDes
2d4a0 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63  troy+1 ){.    rc
2d4b0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
2d4c0 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
2d4d0 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
2d4e0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
2d4f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2d500 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
2d510 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
2d520 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2d530 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
2d540 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65  Db) );.    iMove
2d550 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2d560 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20  eeded.  Only to 
2d570 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2d580 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
2d590 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
2d5a0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
2d5b0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
2d5c0 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
2d5d0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2d5e0 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
2d5f0 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20  .i = iMoved;.   
2d600 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2d610 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2d620 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  r;.#ifndef SQLIT
2d630 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2d640 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64  M.    if( iMoved
2d650 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
2d660 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
2d670 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65  d(db, iDb, iMove
2d680 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
2d690 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73     /* All OP_Des
2d6a0 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
2d6b0 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d  occur on the sam
2d6c0 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20  e btree */.     
2d6d0 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63   assert( resetSc
2d6e0 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c  hemaOnFault==0 |
2d6f0 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  | resetSchemaOnF
2d700 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20  ault==iDb+1 );. 
2d710 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61       resetSchema
2d720 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b  OnFault = iDb+1;
2d730 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
2d740 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2d750 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50   Opcode: Clear P
2d760 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65  1 P2 P3.**.** De
2d770 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2d780 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
2d790 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2d7a0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2d7b0 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62  .** in the datab
2d7c0 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65  ase file is give
2d7d0 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75  n by P1.  But, u
2d7e0 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64  nlike Destroy, d
2d7f0 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20  o not.** remove 
2d800 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
2d810 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ex from the data
2d820 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
2d830 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
2d840 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2d850 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2d860 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49  ile if P2==0.  I
2d870 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20  f.** P2==1 then 
2d880 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2d890 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2d8a0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2d8b0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2d8c0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2d8d0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2d8e0 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2d8f0 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2d900 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  ** If the P3 val
2d910 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
2d920 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72  then the table r
2d930 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20  eferred to must 
2d940 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20  be an.** intkey 
2d950 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61  table (an SQL ta
2d960 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ble, not an inde
2d970 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  x). In this case
2d980 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
2d990 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  .** count is inc
2d9a0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
2d9b0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
2d9c0 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
2d9d0 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49  g cleared. .** I
2d9e0 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  f P3 is greater 
2d9f0 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
2da00 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
2da10 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
2da20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65  is.** also incre
2da30 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2da40 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2da50 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2da60 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  cleared..**.** S
2da70 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79  ee also: Destroy
2da80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61  .*/.case OP_Clea
2da90 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e  r: {.  int nChan
2daa0 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20  ge;. .  nChange 
2dab0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
2dac0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2dad0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2dae0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2daf0 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a  sk, pOp->p2) );.
2db00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2db10 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20  reeClearTable(. 
2db20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70       db->aDb[pOp
2db30 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  ->p2].pBt, pOp->
2db40 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26  p1, (pOp->p3 ? &
2db50 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29  nChange : 0).  )
2db60 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
2db70 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
2db80 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  e += nChange;.  
2db90 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
2dba0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2dbb0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
2dbc0 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
2dbd0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
2dbe0 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
2dbf0 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
2dc00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e  aMem[pOp->p3].u.
2dc10 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  i += nChange;.  
2dc20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
2dc30 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2dc40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2dc50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2dc60 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50  e: ResetSorter P
2dc70 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
2dc80 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
2dc90 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68  nts from the eph
2dca0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20  emeral table or 
2dcb0 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69  sorter.** that i
2dcc0 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72  s open on cursor
2dcd0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P1..**.** This 
2dce0 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b  opcode only work
2dcf0 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73  s for cursors us
2dd00 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61  ed for sorting a
2dd10 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74  nd.** opened wit
2dd20 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  h OP_OpenEphemer
2dd30 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f  al or OP_SorterO
2dd40 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pen..*/.case OP_
2dd50 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20  ResetSorter: {. 
2dd60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2dd70 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  . .  assert( pOp
2dd80 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2dd90 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2dda0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2ddb0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2ddc0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2ddd0 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
2dde0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2ddf0 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64  dbeSorterReset(d
2de00 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65  b, pC->uc.pSorte
2de10 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
2de20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2de30 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2de40 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65  TREE );.    asse
2de50 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65  rt( pC->isEpheme
2de60 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ral );.    rc = 
2de70 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
2de80 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70  rTableOfCursor(p
2de90 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
2dea0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2deb0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2dec0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61  rror;.  }.  brea
2ded0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2dee0 20 43 72 65 61 74 65 42 74 72 65 65 20 50 31 20   CreateBtree P1 
2def0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2df00 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2df10 74 20 69 44 62 3d 50 31 20 66 6c 61 67 73 3d 50  t iDb=P1 flags=P
2df20 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  3.**.** Allocate
2df30 20 61 20 6e 65 77 20 62 2d 74 72 65 65 20 69 6e   a new b-tree in
2df40 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2df50 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
2df60 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45   or in the.** TE
2df70 4d 50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  MP database file
2df80 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
2df90 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
2dfa0 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
2dfb0 20 20 54 68 65 20 50 33 20 61 72 67 75 6d 65 6e    The P3 argumen
2dfc0 74 20 6d 75 73 74 20 62 65 20 31 20 28 42 54 52  t must be 1 (BTR
2dfd0 45 45 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20 61  EE_INTKEY) for a
2dfe0 20 72 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20   rowid table.** 
2dff0 69 74 20 6d 75 73 74 20 62 65 20 32 20 28 42 54  it must be 2 (BT
2e000 52 45 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72  REE_BLOBKEY) for
2e010 20 61 20 69 6e 64 65 78 20 6f 72 20 57 49 54 48   a index or WITH
2e020 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e  OUT ROWID table.
2e030 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
2e040 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
2e050 6e 65 77 20 62 2d 74 72 65 65 20 69 73 20 73 74  new b-tree is st
2e060 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2e070 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2e080 43 72 65 61 74 65 42 74 72 65 65 3a 20 7b 20 20  CreateBtree: {  
2e090 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
2e0a0 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
2e0b0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75   Db *pDb;..  pOu
2e0c0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2e0d0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67  se(p, pOp);.  pg
2e0e0 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
2e0f0 28 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45  ( pOp->p3==BTREE
2e100 5f 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e  _INTKEY || pOp->
2e110 70 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45  p3==BTREE_BLOBKE
2e120 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
2e130 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2e140 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2e150 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2e160 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2e170 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
2e180 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2e190 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
2e1a0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
2e1b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2e1c0 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
2e1d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2e1e0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
2e1f0 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70  b->pBt, &pgno, p
2e200 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72  Op->p3);.  if( r
2e210 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2e220 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
2e230 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
2e240 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e250 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20  Opcode: SqlExec 
2e260 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2e270 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61   Run the SQL sta
2e280 74 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d  tement or statem
2e290 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
2e2a0 6e 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e  n the P4 string.
2e2b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45  .*/.case OP_SqlE
2e2c0 78 65 63 3a 20 7b 0a 20 20 64 62 2d 3e 6e 53 71  xec: {.  db->nSq
2e2d0 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20  lExec++;.  rc = 
2e2e0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2e2f0 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30   pOp->p4.z, 0, 0
2e300 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c  , 0);.  db->nSql
2e310 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63  Exec--;.  if( rc
2e320 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2e330 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2e340 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2e350 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
2e360 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e370 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
2e380 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
2e390 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
2e3a0 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
2e3b0 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
2e3c0 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
2e3d0 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
2e3e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2e3f0 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
2e400 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
2e410 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2e420 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
2e430 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
2e440 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
2e450 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
2e460 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
2e470 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
2e480 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
2e490 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
2e4a0 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
2e4b0 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
2e4c0 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
2e4d0 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
2e4e0 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
2e4f0 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
2e500 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
2e510 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
2e520 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
2e530 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
2e540 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
2e550 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2e560 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
2e570 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2e580 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
2e590 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
2e5a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
2e5b0 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
2e5c0 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
2e5d0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
2e5e0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
2e5f0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
2e600 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
2e610 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
2e620 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2e630 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
2e640 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
2e650 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
2e660 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
2e670 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
2e680 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52  zMaster = MASTER
2e690 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44  _NAME;.    initD
2e6a0 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
2e6b0 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
2e6c0 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
2e6d0 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
2e6e0 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
2e6f0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
2e700 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
2e710 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
2e720 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
2e730 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
2e740 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
2e750 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
2e760 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61  >aDb[iDb].zDbSNa
2e770 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
2e780 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
2e790 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
2e7a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
2e7b0 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65  MEM_BKPT;.    }e
2e7c0 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
2e7d0 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
2e7e0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ==0 );.      db-
2e7f0 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a  >init.busy = 1;.
2e800 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72        initData.r
2e810 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2e820 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62       assert( !db
2e830 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
2e840 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
2e850 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
2e860 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
2e870 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
2e880 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ta, 0);.      if
2e890 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2e8a0 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e  ) rc = initData.
2e8b0 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  rc;.      sqlite
2e8c0 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53  3DbFreeNN(db, zS
2e8d0 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
2e8e0 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
2e8f0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
2e900 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2e910 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
2e920 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
2e930 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2e940 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
2e950 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2e960 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62     }.    goto ab
2e970 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2e980 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
2e990 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
2e9a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2e9b0 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
2e9c0 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
2e9d0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
2e9e0 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
2e9f0 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
2ea00 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
2ea10 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
2ea20 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
2ea30 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
2ea40 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
2ea50 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
2ea60 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
2ea70 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
2ea80 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
2ea90 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
2eaa0 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
2eab0 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
2eac0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
2ead0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2eae0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2eaf0 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
2eb00 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
2eb10 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p1);.  if( rc 
2eb20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2eb30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2eb40 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
2eb50 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
2eb60 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
2eb70 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
2eb80 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
2eb90 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2eba0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2ebb0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2ebc0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2ebd0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2ebe0 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
2ebf0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2ec00 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2ec10 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
2ec20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2ec30 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2ec40 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2ec50 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2ec60 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2ec70 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2ec80 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2ec90 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2eca0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2ecb0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2ecc0 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
2ecd0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2ece0 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
2ecf0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2ed00 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ed10 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
2ed20 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
2ed30 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2ed40 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2ed50 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2ed60 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2ed70 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
2ed80 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2ed90 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2eda0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2edb0 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
2edc0 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2edd0 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2ede0 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e  oy opcode).** in
2edf0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
2ee00 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2ee10 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2ee20 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2ee30 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2ee40 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2ee50 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65  case OP_DropInde
2ee60 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  x: {.  sqlite3Un
2ee70 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
2ee80 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ex(db, pOp->p1, 
2ee90 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2eea0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2eeb0 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50  e: DropTrigger P
2eec0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2eed0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2eee0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2eef0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2ef00 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2ef10 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61  * the trigger na
2ef20 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2ef30 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2ef40 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
2ef50 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f  rigger.** is dro
2ef60 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2ef70 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2ef80 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2ef90 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2efa0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2efb0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2efc0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2efd0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2efe0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2eff0 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
2f000 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
2f010 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2f020 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
2f030 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2f040 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
2f050 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f060 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
2f070 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
2f080 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
2f090 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20   P4 P5.**.** Do 
2f0a0 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
2f0b0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
2f0c0 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
2f0d0 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
2f0e0 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
2f0f0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2f100 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
2f110 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
2f120 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
2f130 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
2f140 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
2f150 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
2f160 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
2f170 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61  ins one less tha
2f180 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  n the maximum nu
2f190 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20  mber of allowed 
2f1a0 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f  errors..** At mo
2f1b0 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72  st reg(P3) error
2f1c0 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74  s will be report
2f1d0 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  ed..** In other 
2f1e0 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79  words, the analy
2f1f0 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f  sis stops as soo
2f200 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72  n as reg(P1) err
2f210 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e  ors are .** seen
2f220 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70  .  Reg(P1) is up
2f230 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e  dated with the n
2f240 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
2f250 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a  remaining..**.**
2f260 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
2f270 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61  umbers of all ta
2f280 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  bles in the data
2f290 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72  base are integer
2f2a0 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50  s.** stored in P
2f2b0 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d  4_INTARRAY argum
2f2c0 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ent..**.** If P5
2f2d0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2f2e0 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
2f2f0 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
2f300 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
2f310 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
2f320 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
2f330 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2f340 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
2f350 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
2f360 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
2f370 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
2f380 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
2f390 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
2f3a0 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
2f3b0 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
2f3c0 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
2f3d0 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
2f3e0 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
2f3f0 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
2f400 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
2f410 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
2f420 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
2f430 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2f440 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
2f450 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
2f460 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
2f470 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
2f480 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
2f490 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
2f4a0 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
2f4b0 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
2f4c0 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65  ining */..  asse
2f4d0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
2f4e0 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f   );.  nRoot = pO
2f4f0 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d  p->p2;.  aRoot =
2f500 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61   pOp->p4.ai;.  a
2f510 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
2f520 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f  ;.  assert( aRoo
2f530 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20  t[0]==nRoot );. 
2f540 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2f550 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
2f560 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
2f570 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45  Cursor) );.  pnE
2f580 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rr = &aMem[pOp->
2f590 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
2f5a0 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
2f5b0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
2f5c0 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
2f5d0 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
2f5e0 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
2f5f0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
2f600 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2f610 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
2f620 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2f630 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2f640 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2f650 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  p5) );.  z = sql
2f660 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
2f670 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
2f680 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61  pOp->p5].pBt, &a
2f690 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a  Root[1], nRoot,.
2f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6c0 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69   (int)pnErr->u.i
2f6d0 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71  +1, &nErr);.  sq
2f6e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2f6f0 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  ull(pIn1);.  if(
2f700 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20   nErr==0 ){.    
2f710 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a  assert( z==0 );.
2f720 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30    }else if( z==0
2f730 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
2f740 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  mem;.  }else{.  
2f750 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
2f760 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69  nErr-1;.    sqli
2f770 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
2f780 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
2f790 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
2f7a0 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
2f7b0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2f7c0 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
2f7d0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2f7e0 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
2f7f0 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
2f800 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2f810 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2f820 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
2f830 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
2f840 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2f850 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65   Synopsis: rowse
2f860 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  t(P1)=r[P2].**.*
2f870 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74  * Insert the int
2f880 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
2f890 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  by register P2 i
2f8a0 6e 74 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  nto a RowSet obj
2f8b0 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72  ect.** held in r
2f8c0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
2f8d0 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66  * An assertion f
2f8e0 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f  ails if P2 is no
2f8f0 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  t an integer..*/
2f900 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41  .case OP_RowSetA
2f910 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  dd: {       /* i
2f920 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e  n1, in2 */.  pIn
2f930 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2f940 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
2f950 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
2f960 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
2f970 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
2f980 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  0 );.  if( (pIn1
2f990 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2f9a0 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
2f9b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2f9c0 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
2f9d0 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
2f9e0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2f9f0 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
2fa00 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  em;.  }.  sqlite
2fa10 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
2fa20 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
2fa30 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In2->u.i);.  bre
2fa40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2fa50 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20  : RowSetRead P1 
2fa60 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2fa70 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77  opsis: r[P3]=row
2fa80 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
2fa90 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
2faa0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68  st value from th
2fab0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
2fac0 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74  in P1.** and put
2fad0 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
2fae0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
2faf0 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f   Or, if RowSet o
2fb00 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e 69 74  bject P1 is init
2fb10 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61  ially empty, lea
2fb20 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67  ve P3.** unchang
2fb30 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69  ed and jump to i
2fb40 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
2fb50 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2fb60 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  Read: {       /*
2fb70 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33   jump, in1, out3
2fb80 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a   */.  i64 val;..
2fb90 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2fba0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
2fbb0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2fbc0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20  M_RowSet)==0 .  
2fbd0 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
2fbe0 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tNext(pIn1->u.pR
2fbf0 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a  owSet, &val)==0.
2fc00 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
2fc10 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
2fc20 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
2fc30 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2fc40 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56  ull(pIn1);.    V
2fc50 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
2fc60 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ,2);.    goto ju
2fc70 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
2fc80 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2fc90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
2fca0 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75  * A value was pu
2fcb0 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  lled from the in
2fcc0 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42  dex */.    VdbeB
2fcd0 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b  ranchTaken(0,2);
2fce0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2fcf0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
2fd00 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
2fd10 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
2fd20 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2fd30 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2fd40 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
2fd50 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
2fd60 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20  is: if r[P3] in 
2fd70 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20  rowset(P1) goto 
2fd80 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2fd90 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
2fda0 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
2fdb0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
2fdc0 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
2fdd0 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
2fde0 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
2fdf0 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
2fe00 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
2fe10 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
2fe20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
2fe30 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
2fe40 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
2fe50 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
2fe60 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
2fe70 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
2fe80 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
2fe90 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
2fea0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
2feb0 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
2fec0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
2fed0 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a  ets of integers.
2fee0 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64 20  ** are inserted 
2fef0 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61 73  in distinct phas
2ff00 65 73 2c 20 77 68 69 63 68 20 65 61 63 68 20 73  es, which each s
2ff10 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
2ff20 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61  uplicates..** Ea
2ff30 63 68 20 73 65 74 20 69 73 20 69 64 65 6e 74 69  ch set is identi
2ff40 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
2ff50 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
2ff60 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
2ff70 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
2ff80 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20   final set must 
2ff90 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64  have P4==-1, and
2ffa0 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73   for all other s
2ffb0 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  ets.** must have
2ffc0 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   P4>0..**.** Thi
2ffd0 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
2ffe0 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
2fff0 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
30000 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
30010 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62  ** the RowSet ob
30020 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
30030 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
30040 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
30050 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
30060 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
30070 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
30080 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
30090 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
300a0 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
300b0 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
300c0 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
300d0 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
300e0 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
300f0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
30100 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
30110 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
30120 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
30130 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
30140 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
30150 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
30160 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
30170 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
30180 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
30190 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
301a0 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
301b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
301c0 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
301d0 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
301e0 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
301f0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
30200 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
30210 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
30220 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
30230 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
30240 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
30250 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
30260 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
30270 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
30280 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
30290 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
302a0 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
302b0 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
302c0 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
302d0 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
302e0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
302f0 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
30300 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
30310 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
30320 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
30330 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
30340 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
30350 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
30360 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
30370 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
30380 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
30390 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
303a0 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
303b0 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
303c0 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
303d0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
303e0 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  iSet, pIn3->u.i)
303f0 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
30400 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c  Taken(exists!=0,
30410 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  2);.    if( exis
30420 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
30430 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20  o_p2;.  }.  if( 
30440 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73  iSet>=0 ){.    s
30450 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
30460 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
30470 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
30480 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
30490 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
304a0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
304b0 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
304c0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
304d0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
304e0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
304f0 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28  m passed as P4 (
30500 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52  type P4_SUBPROGR
30510 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63  AM). .**.** P1 c
30520 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
30530 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ess of the memor
30540 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74  y cell that cont
30550 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d  ains the first m
30560 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69  emory .** cell i
30570 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61  n an array of va
30580 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67  lues used as arg
30590 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75  uments to the su
305a0 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a  b-program. P2 .*
305b0 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  * contains the a
305c0 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
305d0 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f  o if the sub-pro
305e0 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49  gram throws an I
305f0 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74  GNORE .** except
30600 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41  ion using the RA
30610 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  ISE() function. 
30620 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  Register P3 cont
30630 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
30640 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79   .** of a memory
30650 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74   cell in this (t
30660 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68  he parent) VM th
30670 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c  at is used to al
30680 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d  locate the .** m
30690 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62  emory required b
306a0 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61  y the sub-vdbe a
306b0 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  t runtime..**.**
306c0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
306d0 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61   to the VM conta
306e0 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
306f0 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a  r program..**.**
30700 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
30710 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ro, then recursi
30720 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63  ve program invoc
30730 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ation is enabled
30740 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f  ..*/.case OP_Pro
30750 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  gram: {        /
30760 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
30770 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
30780 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
30790 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
307a0 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  s for sub-progra
307b0 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  m */.  int nByte
307c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
307d0 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69  * Bytes of runti
307e0 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65  me space require
307f0 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  d for sub-progra
30800 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b  m */.  Mem *pRt;
30810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30820 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c  * Register to al
30830 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73  locate runtime s
30840 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  pace */.  Mem *p
30850 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
30860 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
30870 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d  rate through mem
30880 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d  ory cells */.  M
30890 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  em *pEnd;       
308a0 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d         /* Last m
308b0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65  emory cell in ne
308c0 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62  w array */.  Vdb
308d0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
308e0 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65       /* New vdbe
308f0 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74   frame to execut
30900 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f  e in */.  SubPro
30910 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
30920 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d    /* Sub-program
30930 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20   to execute */. 
30940 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20   void *t;       
30950 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
30960 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72  n identifying tr
30970 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f  igger */..  pPro
30980 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  gram = pOp->p4.p
30990 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d  Program;.  pRt =
309a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
309b0 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
309c0 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
309d0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
309e0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
309f0 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
30a00 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
30a10 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
30a20 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
30a30 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
30a40 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
30a50 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
30a60 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
30a70 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
30a80 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
30a90 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
30aa0 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
30ab0 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
30ac0 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
30ad0 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
30ae0 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
30af0 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
30b00 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
30b10 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
30b20 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
30b30 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
30b40 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
30b50 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
30b60 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
30b70 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
30b80 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
30b90 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
30ba0 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
30bb0 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
30bc0 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
30bd0 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
30be0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
30bf0 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
30c00 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
30c10 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
30c20 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
30c30 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
30c40 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
30c50 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
30c60 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
30c70 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
30c80 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
30c90 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
30ca0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
30cb0 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
30cc0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
30cd0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
30ce0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
30cf0 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
30d00 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
30d10 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
30d20 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
30d30 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
30d40 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
30d50 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
30d60 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
30d70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
30d80 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
30d90 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67  cursion");.    g
30da0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
30db0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
30dc0 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69  * Register pRt i
30dd0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
30de0 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
30df0 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20  red to save the 
30e00 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68  state.  ** of th
30e10 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61  e current progra
30e20 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72  m, and the memor
30e30 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75  y required at ru
30e40 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65  ntime to execute
30e50 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65  .  ** the trigge
30e60 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68  r program. If th
30e70 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62  is trigger has b
30e80 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65  een fired before
30e90 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a  , then pRt .  **
30ea0 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f   is already allo
30eb0 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  cated. Otherwise
30ec0 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69  , it must be ini
30ed0 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20  tialized.  */.  
30ee0 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26  if( (pRt->flags&
30ef0 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b  MEM_Frame)==0 ){
30f00 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72  .    /* SubProgr
30f10 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74  am.nMem is set t
30f20 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
30f30 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
30f40 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a  d by the .    **
30f50 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20   program stored 
30f60 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f  in SubProgram.aO
30f70 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68  p. As well as th
30f80 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a  ese, one memory.
30f90 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72      ** cell is r
30fa0 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68  equired for each
30fb0 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20   cursor used by 
30fc0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74  the program. Set
30fd0 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61   local.    ** va
30fe0 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64  riable nMem (and
30ff0 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d   later, VdbeFram
31000 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20  e.nChildMem) to 
31010 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20  this value..    
31020 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50  */.    nMem = pP
31030 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70  rogram->nMem + p
31040 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
31050 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e     assert( nMem>
31060 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72  0 );.    if( pPr
31070 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29  ogram->nCsr==0 )
31080 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79   nMem++;.    nBy
31090 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
310a0 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
310b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
310c0 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
310d0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
310e0 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
310f0 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
31100 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
31110 20 20 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d       + (pProgram
31120 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20  ->nOp + 7)/8;.  
31130 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74    pFrame = sqlit
31140 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64  e3DbMallocZero(d
31150 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69  b, nByte);.    i
31160 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20  f( !pFrame ){.  
31170 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
31180 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
31190 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
311a0 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e  (pRt);.    pRt->
311b0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d  flags = MEM_Fram
311c0 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46  e;.    pRt->u.pF
311d0 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a  rame = pFrame;..
311e0 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20      pFrame->v = 
311f0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
31200 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b  ChildMem = nMem;
31210 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
31220 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61  ildCsr = pProgra
31230 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72  m->nCsr;.    pFr
31240 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28  ame->pc = (int)(
31250 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
31260 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
31270 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
31280 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
31290 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
312a0 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
312b0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
312c0 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
312d0 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
312e0 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
312f0 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
31300 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
31310 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
31320 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66  gram->token;.#if
31330 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
31340 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
31350 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e  S.    pFrame->an
31360 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63  Exec = p->anExec
31370 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45  ;.#endif..    pE
31380 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  nd = &VdbeFrameM
31390 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d  em(pFrame)[pFram
313a0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20  e->nChildMem];. 
313b0 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65     for(pMem=Vdbe
313c0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
313d0 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d  ; pMem!=pEnd; pM
313e0 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65  em++){.      pMe
313f0 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  m->flags = MEM_U
31400 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20  ndefined;.      
31410 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
31420 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
31430 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
31440 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
31450 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
31460 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
31470 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
31480 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20  ildMem .        
31490 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  || (pProgram->nC
314a0 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61  sr==0 && pProgra
314b0 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d  m->nMem+1==pFram
314c0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b  e->nChildMem) );
314d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
314e0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
314f0 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29  ame->nChildCsr )
31500 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69  ;.    assert( (i
31510 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d  nt)(pOp - aOp)==
31520 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
31530 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
31540 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
31550 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
31560 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
31570 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
31580 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  owid;.  pFrame->
31590 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
315a0 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  ange;.  pFrame->
315b0 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64  nDbChange = p->d
315c0 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73  b->nChange;.  as
315d0 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41  sert( pFrame->pA
315e0 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70  uxData==0 );.  p
315f0 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20  Frame->pAuxData 
31600 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20  = p->pAuxData;. 
31610 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30   p->pAuxData = 0
31620 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
31630 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
31640 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
31650 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62  Mem = aMem = Vdb
31660 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
31670 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  );.  p->nMem = p
31680 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
31690 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
316a0 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
316b0 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
316c0 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
316d0 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  r **)&aMem[p->nM
316e0 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61  em];.  pFrame->a
316f0 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e  Once = (u8*)&p->
31700 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e  apCsr[pProgram->
31710 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28  nCsr];.  memset(
31720 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30  pFrame->aOnce, 0
31730 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  , (pProgram->nOp
31740 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61   + 7)/8);.  p->a
31750 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
31760 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
31770 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
31780 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Op;.#ifdef SQLIT
31790 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
317a0 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e  ANSTATUS.  p->an
317b0 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66  Exec = 0;.#endif
317c0 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31  .  pOp = &aOp[-1
317d0 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ];..  break;.}..
317e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d  /* Opcode: Param
317f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
31800 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
31810 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73  s only ever pres
31820 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72  ent in sub-progr
31830 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74  ams called via t
31840 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61  he .** OP_Progra
31850 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43  m instruction. C
31860 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72  opy a value curr
31870 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ently stored in 
31880 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  a memory .** cel
31890 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  l of the calling
318a0 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20   (parent) frame 
318b0 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68  to cell P2 in th
318c0 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73  e current frames
318d0 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61   .** address spa
318e0 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ce. This is used
318f0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
31900 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74  rams to access t
31910 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64  he new.* .** and
31920 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a   old.* values..*
31930 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73  *.** The address
31940 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20   of the cell in 
31950 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
31960 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
31970 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20  y adding.** the 
31980 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
31990 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
319a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
319b0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a  argument to the.
319c0 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  ** calling OP_Pr
319d0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
319e0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  n..*/.case OP_Pa
319f0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ram: {          
31a00 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
31a10 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
31a20 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70  .  Mem *pIn;.  p
31a30 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
31a40 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
31a50 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
31a60 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
31a70 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
31a80 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
31a90 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
31aa0 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
31ab0 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
31ac0 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
31ad0 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
31ae0 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
31af0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31b00 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
31b10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31b20 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20  _FOREIGN_KEY./* 
31b30 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65  Opcode: FkCounte
31b40 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
31b50 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72   Synopsis: fkctr
31b60 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49  [P1]+=P2.**.** I
31b70 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73  ncrement a "cons
31b80 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20  traint counter" 
31b90 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65  by P2 (P2 may be
31ba0 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73   negative or pos
31bb0 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31  itive)..** If P1
31bc0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
31bd0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
31be0 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  raint counter is
31bf0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a   incremented .**
31c00 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   (deferred forei
31c10 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
31c20 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ts). Otherwise, 
31c30 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  if P1 is zero, t
31c40 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  he .** statement
31c50 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
31c60 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61  emented (immedia
31c70 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
31c80 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a  onstraints)..*/.
31c90 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65  case OP_FkCounte
31ca0 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66  r: {.  if( db->f
31cb0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65  lags & SQLITE_De
31cc0 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62  ferFKs ){.    db
31cd0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
31ce0 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
31cf0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
31d00 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  p1 ){.    db->nD
31d10 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70  eferredCons += p
31d20 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  Op->p2;.  }else{
31d30 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74  .    p->nFkConst
31d40 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32  raint += pOp->p2
31d50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31d60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49  ../* Opcode: FkI
31d70 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  fZero P1 P2 * * 
31d80 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
31d90 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67  f fkctr[P1]==0 g
31da0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
31db0 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69  s opcode tests i
31dc0 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  f a foreign key 
31dd0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
31de0 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
31df0 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20  zero..** If so, 
31e00 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
31e10 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
31e20 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
31e30 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20  to the next .** 
31e40 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
31e50 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
31e60 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a  zero, then the j
31e70 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
31e80 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
31e90 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a  straint-counter.
31ea0 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20  ** is zero (the 
31eb0 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20  one that counts 
31ec0 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
31ed0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
31ee0 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72   If P1 is.** zer
31ef0 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  o, the jump is t
31f00 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74  aken if the stat
31f10 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  ement constraint
31f20 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f  -counter is zero
31f30 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66  .** (immediate f
31f40 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
31f50 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
31f60 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
31f70 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
31f80 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
31f90 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
31fa0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
31fb0 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  n(db->nDeferredC
31fc0 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
31fd0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
31fe0 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64  0, 2);.    if( d
31ff0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
32000 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
32010 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
32020 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
32030 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
32040 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
32050 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
32060 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
32070 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
32080 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  );.    if( p->nF
32090 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
320a0 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
320b0 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f  mmCons==0 ) goto
320c0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
320d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
320e0 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
320f0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
32100 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65  N_KEY */..#ifnde
32110 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
32120 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
32130 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
32140 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
32150 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78  opsis: r[P1]=max
32160 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a  (r[P1],r[P2]).**
32170 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69  .** P1 is a regi
32180 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
32190 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
321a0 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  M (the root fram
321b0 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e  e is.** differen
321c0 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  t from the curre
321d0 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73  nt frame if this
321e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
321f0 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a  being executed.*
32200 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70  * within a sub-p
32210 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65  rogram). Set the
32220 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
32230 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78  er P1 to the max
32240 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20  imum of .** its 
32250 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e  current value an
32260 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
32270 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
32280 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
32290 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
322a0 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
322b0 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
322c0 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
322d0 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
322e0 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
322f0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
32300 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
32310 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
32320 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61   ){.    for(pFra
32330 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
32340 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
32350 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
32360 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31  arent);.    pIn1
32370 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
32380 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c  [pOp->p1];.  }el
32390 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  se{.    pIn1 = &
323a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
323b0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d   }.  assert( mem
323c0 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
323d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
323e0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
323f0 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
32400 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
32410 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
32420 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
32430 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
32440 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
32450 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
32460 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
32470 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
32480 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
32490 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
324a0 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
324b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
324c0 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
324d0 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33  0 then r[P1]-=P3
324e0 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
324f0 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
32500 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
32510 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ger..** If the v
32520 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
32530 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
32540 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50 33  ter, subtract P3
32550 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c   from the.** val
32560 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d  ue in P1 and jum
32570 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
32580 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61  f the initial va
32590 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
325a0 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
325b0 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  1, then the.** v
325c0 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65  alue is unchange
325d0 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61  d and control pa
325e0 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20  sses through to 
325f0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
32600 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
32610 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
32620 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
32630 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
32640 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
32650 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
32660 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
32670 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49  eBranchTaken( pI
32680 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20  n1->u.i>0, 2);. 
32690 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
326a0 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e   ){.    pIn1->u.
326b0 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i -= pOp->p3;.  
326c0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
326d0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
326e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66  }../* Opcode: Of
326f0 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20  fsetLimit P1 P2 
32700 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
32710 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74  is: if r[P1]>0 t
32720 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b  hen r[P2]=r[P1]+
32730 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73  max(0,r[P3]) els
32740 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a  e r[P2]=(-1).**.
32750 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70  ** This opcode p
32760 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e  erforms a common
32770 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74  ly used computat
32780 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
32790 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64  ith.** LIMIT and
327a0 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e   OFFSET process.
327b0 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68    r[P1] holds th
327c0 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e  e limit counter.
327d0 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73    r[P3].** holds
327e0 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e   the offset coun
327f0 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  ter.  The opcode
32800 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f   computes the co
32810 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20  mbined value.** 
32820 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  of the LIMIT and
32830 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72   OFFSET and stor
32840 65 73 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  es that value in
32850 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50   r[P2].  The r[P
32860 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70  2].** value comp
32870 75 74 65 64 20 69 73 20 74 68 65 20 74 6f 74 61  uted is the tota
32880 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  l number of rows
32890 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20   that will need 
328a0 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64  to be.** visited
328b0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d   in order to com
328c0 70 6c 65 74 65 20 74 68 65 20 71 75 65 72 79 2e  plete the query.
328d0 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20  .**.** If r[P3] 
328e0 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74  is zero or negat
328f0 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ive, that means 
32900 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
32910 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20  ET.** and r[P2] 
32920 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65  is set to be the
32930 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49   value of the LI
32940 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a  MIT, r[P1]..**.*
32950 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65  * if r[P1] is ze
32960 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20  ro or negative, 
32970 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65  that means there
32980 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20   is no LIMIT.** 
32990 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
329a0 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f   to -1. .**.** O
329b0 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20  therwise, r[P2] 
329c0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 73 75  is set to the su
329d0 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72  m of r[P1] and r
329e0 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  [P3]..*/.case OP
329f0 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20  _OffsetLimit: { 
32a00 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c     /* in1, out2,
32a10 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b   in3 */.  i64 x;
32a20 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
32a30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
32a40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
32a50 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ];.  pOut = out2
32a60 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
32a70 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  p);.  assert( pI
32a80 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
32a90 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
32aa0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
32ab0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20  EM_Int );.  x = 
32ac0 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28  pIn1->u.i;.  if(
32ad0 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33   x<=0 || sqlite3
32ae0 41 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49 6e  AddInt64(&x, pIn
32af0 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75  3->u.i>0?pIn3->u
32b00 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20  .i:0) ){.    /* 
32b10 49 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73 20  If the LIMIT is 
32b20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
32b30 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70  al to zero, loop
32b40 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73 0a   forever.  This.
32b50 20 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65      ** is docume
32b60 6e 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c  nted.  But also,
32b70 20 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46   if the LIMIT+OF
32b80 46 53 45 54 20 65 78 63 65 65 64 73 20 32 5e 36  FSET exceeds 2^6
32b90 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c  3 then.    ** al
32ba0 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e  so loop forever.
32bb0 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75    This is undocu
32bc0 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63 74  mented.  In fact
32bd0 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67 75  , one could argu
32be0 65 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68  e.    ** that th
32bf0 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65  e loop should te
32c00 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61 73  rminate.  But as
32c10 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e  suming 1 billion
32c20 20 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20 20   iterations.    
32c30 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28 66  ** per second (f
32c40 61 72 20 65 78 63 65 65 64 69 6e 67 20 74 68 65  ar exceeding the
32c50 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66   capabilities of
32c60 20 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61 72   any current har
32c70 64 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69 74  dware).    ** it
32c80 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61 72   would take near
32c90 6c 79 20 33 30 30 20 79 65 61 72 73 20 74 6f 20  ly 300 years to 
32ca0 61 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20 74  actually reach t
32cb0 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20  he limit.  So.  
32cc0 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72    ** looping for
32cd0 65 76 65 72 20 69 73 20 61 20 72 65 61 73 6f 6e  ever is a reason
32ce0 61 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74 69  able approximati
32cf0 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d  on. */.    pOut-
32d00 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  >u.i = -1;.  }el
32d10 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
32d20 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65  i = x;.  }.  bre
32d30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
32d40 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50  : IfNotZero P1 P
32d50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
32d60 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30  sis: if r[P1]!=0
32d70 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67   then r[P1]--, g
32d80 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
32d90 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
32da0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
32db0 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e  .  If the conten
32dc0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
32dd0 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79   is.** initially
32de0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
32df0 72 6f 2c 20 74 68 65 6e 20 64 65 63 72 65 6d 65  ro, then decreme
32e00 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nt the value in 
32e10 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
32e20 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72  If it is non-zer
32e30 6f 20 28 6e 65 67 61 74 69 76 65 20 6f 72 20 70  o (negative or p
32e40 6f 73 69 74 69 76 65 29 20 61 6e 64 20 74 68 65  ositive) and the
32e50 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50  n also jump to P
32e60 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67 69 73  2.  .** If regis
32e70 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61  ter P1 is initia
32e80 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20  lly zero, leave 
32e90 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  it unchanged and
32ea0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a   fall through..*
32eb0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a  /.case OP_IfNotZ
32ec0 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ero: {        /*
32ed0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
32ee0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
32ef0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
32f00 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
32f10 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
32f20 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e  anchTaken(pIn1->
32f30 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i<0, 2);.  if(
32f40 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20   pIn1->u.i ){.  
32f50 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69     if( pIn1->u.i
32f60 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d  >0 ) pIn1->u.i--
32f70 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ;.     goto jump
32f80 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
32f90 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
32fa0 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20  e: DecrJumpZero 
32fb0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
32fc0 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72  ynopsis: if (--r
32fd0 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32  [P1])==0 goto P2
32fe0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
32ff0 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20  P1 must hold an 
33000 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d  integer.  Decrem
33010 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
33020 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20   P1.** and jump 
33030 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65 77  to P2 if the new
33040 20 76 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c   value is exactl
33050 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20  y zero..*/.case 
33060 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a  OP_DecrJumpZero:
33070 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c   {      /* jump,
33080 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
33090 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
330a0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
330b0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
330c0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
330d0 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  i>SMALLEST_INT64
330e0 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a   ) pIn1->u.i--;.
330f0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
33100 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20  n(pIn1->u.i==0, 
33110 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
33120 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  u.i==0 ) goto ju
33130 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
33140 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
33150 3a 20 41 67 67 53 74 65 70 30 20 2a 20 50 32 20  : AggStep0 * P2 
33160 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
33170 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
33180 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
33190 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
331a0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
331b0 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
331c0 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
331d0 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
331e0 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
331f0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
33200 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
33210 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
33220 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
33230 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73    Register P3 is
33240 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61   the.** accumula
33250 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
33260 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
33270 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
33280 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
33290 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f  * successors..*/
332a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
332b0 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50  tep * P2 P3 P4 P
332c0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  5.** Synopsis: a
332d0 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28  ccum=r[P3] step(
332e0 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
332f0 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70  Execute the step
33300 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
33310 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65   aggregate.  The
33320 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  .** function has
33330 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
33340 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
33350 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63   to an sqlite3_c
33360 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74  ontext.** object
33370 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
33380 20 72 75 6e 20 74 68 65 20 66 75 6e 63 74 69 6f   run the functio
33390 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  n.  Register P3 
333a0 69 73 0a 2a 2a 20 61 73 20 74 68 65 20 61 63 63  is.** as the acc
333b0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
333c0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
333d0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
333e0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
333f0 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
33400 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
33410 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c  code is initiall
33420 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67  y coded as OP_Ag
33430 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73  gStep0.  On firs
33440 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a  t evaluation,.**
33450 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f   the FuncDef sto
33460 72 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e  red in P4 is con
33470 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73  verted into an s
33480 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61  qlite3_context a
33490 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65  nd.** the opcode
334a0 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e   is changed.  In
334b0 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69   this way, the i
334c0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  nitialization of
334d0 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
334e0 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70  context only hap
334f0 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65  pens once, inste
33500 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61  ad of on each ca
33510 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65  ll to the.** ste
33520 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  p function..*/.c
33530 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a  ase OP_AggStep0:
33540 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71   {.  int n;.  sq
33550 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
33560 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
33570 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
33580 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d  FUNCDEF );.  n =
33590 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
335a0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
335b0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
335c0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
335d0 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
335e0 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
335f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
33600 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
33610 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
33620 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
33630 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
33640 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
33650 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69  );.  pCtx = sqli
33660 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
33670 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74  (db, sizeof(*pCt
33680 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f  x) + (n-1)*sizeo
33690 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  f(sqlite3_value*
336a0 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d  ));.  if( pCtx==
336b0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
336c0 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20  .  pCtx->pMem = 
336d0 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63  0;.  pCtx->pFunc
336e0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
336f0 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20  ;.  pCtx->iOp = 
33700 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
33710 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20  ;.  pCtx->pVdbe 
33720 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67  = p;.  pCtx->arg
33730 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34  c = n;.  pOp->p4
33740 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54  type = P4_FUNCCT
33750 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74  X;.  pOp->p4.pCt
33760 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d  x = pCtx;.  pOp-
33770 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67  >opcode = OP_Agg
33780 53 74 65 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  Step;.  /* Fall 
33790 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
337a0 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73  AggStep */.}.cas
337b0 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a  e OP_AggStep: {.
337c0 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
337d0 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
337e0 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  ;.  Mem *pMem;. 
337f0 20 4d 65 6d 20 74 3b 0a 0a 20 20 61 73 73 65 72   Mem t;..  asser
33800 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
33810 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20  P4_FUNCCTX );.  
33820 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pCtx = pOp->p4.p
33830 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  Ctx;.  pMem = &a
33840 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20  Mem[pOp->p3];.. 
33850 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63   /* If this func
33860 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f  tion is inside o
33870 66 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65  f a trigger, the
33880 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20   register array 
33890 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d  in aMem[].  ** m
338a0 69 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d  ight change from
338b0 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   one evaluation 
338c0 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68  to the next.  Th
338d0 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
338e0 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73  code.  ** checks
338f0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72   to see if the r
33900 65 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61  egister array ha
33910 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69  s changed, and i
33920 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69  f so it.  ** rei
33930 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72  nitializes the r
33940 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66  elavant parts of
33950 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e   the sqlite3_con
33960 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  text object */. 
33970 20 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20   if( pCtx->pMem 
33980 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70  != pMem ){.    p
33990 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d  Ctx->pMem = pMem
339a0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78  ;.    for(i=pCtx
339b0 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20  ->argc-1; i>=0; 
339c0 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b  i--) pCtx->argv[
339d0 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  i] = &aMem[pOp->
339e0 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64  p2+i];.  }..#ifd
339f0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
33a00 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74    for(i=0; i<pCt
33a10 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20  x->argc; i++){. 
33a20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
33a30 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76  Valid(pCtx->argv
33a40 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  [i]) );.    REGI
33a50 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
33a60 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76  p2+i, pCtx->argv
33a70 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  [i]);.  }.#endif
33a80 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20  ..  pMem->n++;. 
33a90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
33aa0 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f  nit(&t, db, MEM_
33ab0 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70  Null);.  pCtx->p
33ac0 4f 75 74 20 3d 20 26 74 3b 0a 20 20 70 43 74 78  Out = &t;.  pCtx
33ad0 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
33ae0 30 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46  0;.  pCtx->skipF
33af0 6c 61 67 20 3d 20 30 3b 0a 20 20 28 70 43 74 78  lag = 0;.  (pCtx
33b00 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29  ->pFunc->xSFunc)
33b10 28 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63  (pCtx,pCtx->argc
33b20 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a  ,pCtx->argv); /*
33b30 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
33b40 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 70 43 74  230 */.  if( pCt
33b50 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29  x->fErrorOrAux )
33b60 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  {.    if( pCtx->
33b70 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20  isError ){.     
33b80 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
33b90 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74  r(p, "%s", sqlit
33ba0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 74  e3_value_text(&t
33bb0 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70  ));.      rc = p
33bc0 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20  Ctx->isError;.  
33bd0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
33be0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 74  dbeMemRelease(&t
33bf0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
33c00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
33c10 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65  o_error;.  }else
33c20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 74 2e  {.    assert( t.
33c30 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20  flags==MEM_Null 
33c40 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 74  );.  }.  if( pCt
33c50 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20  x->skipFlag ){. 
33c60 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
33c70 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
33c80 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d  llSeq );.    i =
33c90 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20   pOp[-1].p1;.   
33ca0 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33   if( i ) sqlite3
33cb0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
33cc0 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20  &aMem[i], 1);.  
33cd0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
33ce0 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61   Opcode: AggFina
33cf0 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
33d00 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
33d10 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a  m=r[P1] N=P2.**.
33d20 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66  ** Execute the f
33d30 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f  inalizer functio
33d40 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
33d50 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68  te.  P1 is.** th
33d60 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
33d70 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63  n that is the ac
33d80 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68  cumulator for th
33d90 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a  e aggregate..**.
33da0 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
33db0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
33dc0 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66   that the step f
33dd0 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e  unction takes an
33de0 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  d.** P4 is a poi
33df0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
33e00 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e  Def for this fun
33e10 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a  ction.  The P2.*
33e20 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f  * argument is no
33e30 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f  t used by this o
33e40 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e  pcode.  It is on
33e50 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61  ly there to disa
33e60 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63  mbiguate.** func
33e70 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74  tions that can t
33e80 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62  ake varying numb
33e90 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ers of arguments
33ea0 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67  .  The.** P4 arg
33eb0 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65  ument is only ne
33ec0 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67  eded for the deg
33ed0 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65  enerate case whe
33ee0 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66  re.** the step f
33ef0 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  unction was not 
33f00 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65  previously calle
33f10 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  d..*/.case OP_Ag
33f20 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20  gFinal: {.  Mem 
33f30 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  *pMem;.  assert(
33f40 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
33f50 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
33f60 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
33f70 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65  );.  pMem = &aMe
33f80 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
33f90 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
33fa0 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c  gs & ~(MEM_Null|
33fb0 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a  MEM_Agg))==0 );.
33fc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
33fd0 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d  beMemFinalize(pM
33fe0 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  em, pOp->p4.pFun
33ff0 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  c);.  if( rc ){.
34000 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
34010 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
34020 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
34030 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f 74  (pMem));.    got
34040 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
34050 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
34060 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
34070 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
34080 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
34090 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
340a0 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
340b0 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
340c0 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
340d0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
340e0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
340f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
34100 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65  L./* Opcode: Che
34110 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33  ckpoint P1 P2 P3
34120 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
34130 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50  point database P
34140 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  1. This is a no-
34150 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20  op if P1 is not 
34160 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20  currently in.** 
34170 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65  WAL mode. Parame
34180 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66  ter P2 is one of
34190 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
341a0 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c  NT_PASSIVE, FULL
341b0 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f 72  ,.** RESTART, or
341c0 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69 74   TRUNCATE.  Writ
341d0 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65  e 1 or 0 into me
341e0 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65  m[P3] if the che
341f0 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a  ckpoint returns.
34200 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f  ** SQLITE_BUSY o
34210 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76  r not, respectiv
34220 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20  ely.  Write the 
34230 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
34240 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66  in the.** WAL af
34250 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
34260 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31  nt into mem[P3+1
34270 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72  ] and the number
34280 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20   of pages.** in 
34290 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76  the WAL that hav
342a0 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e  e been checkpoin
342b0 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68  ted after the ch
342c0 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70  eckpoint.** comp
342d0 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50  letes into mem[P
342e0 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f  3+2].  However o
342f0 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b  n an error, mem[
34300 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d  P3+1] and.** mem
34310 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69  [P3+2] are initi
34320 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f  alized to -1..*/
34330 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f  .case OP_Checkpo
34340 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20  int: {.  int i; 
34350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34360 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
34370 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
34380 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20  t aRes[3];      
34390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
343a0 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65   Results */.  Me
343b0 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
343c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
343d0 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68   Write results h
343e0 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  ere */..  assert
343f0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
34400 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20   );.  aRes[0] = 
34410 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61  0;.  aRes[1] = a
34420 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61  Res[2] = -1;.  a
34430 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d  ssert( pOp->p2==
34440 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
34450 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20  T_PASSIVE.      
34460 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
34470 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46  ITE_CHECKPOINT_F
34480 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ULL.       || pO
34490 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
344a0 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54  ECKPOINT_RESTART
344b0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
344c0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
344d0 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a 20  POINT_TRUNCATE. 
344e0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
344f0 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  e3Checkpoint(db,
34500 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
34510 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52  2, &aRes[1], &aR
34520 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63  es[2]);.  if( rc
34530 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d   ){.    if( rc!=
34540 53 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67 6f  SQLITE_BUSY ) go
34550 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
34560 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20  error;.    rc = 
34570 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
34580 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
34590 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
345a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
345b0 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
345c0 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
345d0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
345e0 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
345f0 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
34600 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
34610 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
34620 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
34630 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
34640 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
34650 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  *.**.** Change t
34660 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
34670 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
34680 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
34690 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
346a0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
346b0 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
346c0 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
346d0 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
346e0 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
346f0 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
34700 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
34710 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
34720 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
34730 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
34740 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
34750 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
34760 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
34770 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
34780 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
34790 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
347a0 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
347b0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
347c0 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
347d0 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
347e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
347f0 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
34800 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65  * out2 */.  Btre
34810 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
34820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
34830 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a  tree to change j
34840 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a  ournal mode of *
34850 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  /.  Pager *pPage
34860 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
34870 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73      /* Pager ass
34880 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74  ociated with pBt
34890 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20   */.  int eNew; 
348a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348b0 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75        /* New jou
348c0 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  rnal mode */.  i
348d0 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20  nt eOld;        
348e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
348f0 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61  * The old journa
34900 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65  l mode */.#ifnde
34910 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
34920 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  L.  const char *
34930 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20  zFilename;      
34940 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64      /* Name of d
34950 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
34960 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69   pPager */.#endi
34970 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  f..  pOut = out2
34980 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
34990 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70  p);.  eNew = pOp
349a0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
349b0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
349c0 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a  NALMODE_DELETE .
349d0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
349e0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
349f0 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20  E_TRUNCATE .    
34a00 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
34a10 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
34a20 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c  RSIST .       ||
34a30 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
34a40 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20  RNALMODE_OFF.   
34a50 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
34a60 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
34a70 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20  EMORY.       || 
34a80 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34a90 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20  NALMODE_WAL.    
34aa0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
34ab0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
34ac0 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ERY.  );.  asser
34ad0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
34ae0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
34af0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
34b00 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
34b10 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
34b20 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
34b30 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
34b40 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
34b50 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74  ;.  eOld = sqlit
34b60 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61  e3PagerGetJourna
34b70 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20  lMode(pPager);. 
34b80 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
34b90 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
34ba0 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  RY ) eNew = eOld
34bb0 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  ;.  if( !sqlite3
34bc0 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a  PagerOkToChangeJ
34bd0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
34be0 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  r) ) eNew = eOld
34bf0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
34c00 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69  E_OMIT_WAL.  zFi
34c10 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  lename = sqlite3
34c20 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50  PagerFilename(pP
34c30 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20  ager, 1);..  /* 
34c40 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
34c50 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
34c60 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
34c70 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
34c80 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
34c90 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
34ca0 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
34cb0 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
34cc0 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
34cd0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34ce0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
34cf0 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  & (sqlite3Strlen
34d00 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30  30(zFilename)==0
34d10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
34d20 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
34d30 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
34d40 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
34d50 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
34d60 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
34d70 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
34d80 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
34d90 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
34da0 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
34db0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
34dc0 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
34dd0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
34de0 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
34df0 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
34e00 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56  Commit || db->nV
34e10 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20  dbeRead>1 ){.   
34e20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
34e30 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69  RROR;.      sqli
34e40 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
34e50 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
34e60 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
34e70 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
34e80 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
34e90 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
34ea0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34eb0 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
34ec0 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
34ed0 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f     );.      goto
34ee0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
34ef0 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
34f00 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64   .      if( eOld
34f10 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34f20 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20  ODE_WAL ){.     
34f30 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67     /* If leaving
34f40 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65   WAL mode, close
34f50 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49   the log file. I
34f60 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  f successful, th
34f70 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a  e call.        *
34f80 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57  * to PagerCloseW
34f90 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73  al() checkpoints
34fa0 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65   and deletes the
34fb0 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67   write-ahead-log
34fc0 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c   .        ** fil
34fd0 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20  e. An EXCLUSIVE 
34fe0 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62  lock may still b
34ff0 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61  e held on the da
35000 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20  tabase file .   
35010 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20       ** after a 
35020 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72  successful retur
35030 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  n. .        */. 
35040 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
35050 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  te3PagerCloseWal
35060 28 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20 20  (pPager, db);.  
35070 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
35080 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
35090 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
350a0 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
350b0 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
350c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
350d0 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50  else if( eOld==P
350e0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
350f0 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20  _MEMORY ){.     
35100 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61     /* Cannot tra
35110 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79  nsition directly
35120 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20   from MEMORY to 
35130 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f  WAL.  Use mode O
35140 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73  FF.        ** as
35150 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65   an intermediate
35160 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
35170 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
35180 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50  alMode(pPager, P
35190 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
351a0 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20  _OFF);.      }. 
351b0 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   .      /* Open 
351c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
351d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
351e0 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
351f0 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
35200 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69      ** mode, thi
35210 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  s transaction al
35220 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c  ways uses a roll
35230 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20  back journal..  
35240 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
35250 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
35260 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d  eIsInTrans(pBt)=
35270 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
35280 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
35290 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
352a0 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72  lite3BtreeSetVer
352b0 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d  sion(pBt, (eNew=
352c0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
352d0 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29  DE_WAL ? 2 : 1))
352e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
352f0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66    }.#endif /* if
35300 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35310 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72  _WAL */..  if( r
35320 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  c ) eNew = eOld;
35330 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  eNew = sqlite
35340 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
35350 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
35360 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  w);..  pOut->fla
35370 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
35380 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
35390 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63  ;.  pOut->z = (c
353a0 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75  har *)sqlite3Jou
353b0 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65  rnalModename(eNe
353c0 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  w);.  pOut->n = 
353d0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
353e0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74  pOut->z);.  pOut
353f0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
35400 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  TF8;.  sqlite3Vd
35410 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
35420 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
35430 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
35440 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
35450 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
35460 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
35470 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
35480 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
35490 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
354a0 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
354b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
354c0 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
354d0 61 63 75 75 6d 20 50 31 20 2a 20 2a 20 2a 20 2a  acuum P1 * * * *
354e0 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68  .**.** Vacuum th
354f0 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
35500 65 20 50 31 2e 20 20 50 31 20 69 73 20 30 20 66  e P1.  P1 is 0 f
35510 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20 32  or "main", and 2
35520 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72 20   or more.** for 
35530 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
35540 62 61 73 65 2e 20 20 54 68 65 20 22 74 65 6d 70  base.  The "temp
35550 22 20 64 61 74 61 62 61 73 65 20 6d 61 79 20 6e  " database may n
35560 6f 74 20 62 65 20 76 61 63 75 75 6d 65 64 2e 0a  ot be vacuumed..
35570 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75  */.case OP_Vacuu
35580 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  m: {.  assert( p
35590 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
355a0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52  .  rc = sqlite3R
355b0 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72  unVacuum(&p->zEr
355c0 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d 3e 70  rMsg, db, pOp->p
355d0 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
355e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
355f0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
35600 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
35610 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
35620 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
35630 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
35640 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
35650 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
35660 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
35670 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
35680 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
35690 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
356a0 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
356b0 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
356c0 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
356d0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
356e0 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
356f0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
35700 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
35710 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
35720 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
35730 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
35740 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
35750 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
35760 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
35770 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
35780 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
35790 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
357a0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
357b0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
357c0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
357d0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
357e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
357f0 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74  eeIncrVacuum(pBt
35800 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
35810 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
35820 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72  DONE,2);.  if( r
35830 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21  c ){.    if( rc!
35840 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67  =SQLITE_DONE ) g
35850 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35860 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d  _error;.    rc =
35870 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
35880 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
35890 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
358a0 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
358b0 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
358c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
358d0 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
358e0 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72  tements to expir
358f0 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69  e.  When an expi
35900 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
35910 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69   is executed usi
35920 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ng sqlite3_step(
35930 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72  ) it will either
35940 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a   automatically.*
35950 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65  * reprepare itse
35960 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72  lf (if it was or
35970 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64  iginally created
35980 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
35990 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20  repare_v2()).** 
359a0 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20  or it will fail 
359b0 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45  with SQLITE_SCHE
359c0 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  MA..** .** If P1
359d0 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
359e0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
359f0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
35a00 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
35a10 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
35a20 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
35a30 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
35a40 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a   is expired..*/.
35a50 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
35a60 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
35a70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
35a80 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
35a90 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
35aa0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
35ab0 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
35ac0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
35ad0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
35ae0 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
35af0 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
35b00 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
35b10 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50   Synopsis: iDb=P
35b20 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d  1 root=P2 write=
35b30 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20  P3.**.** Obtain 
35b40 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74  a lock on a part
35b50 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68  icular table. Th
35b60 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
35b70 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
35b80 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63  .** the shared-c
35b90 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20  ache feature is 
35ba0 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  enabled. .**.** 
35bb0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
35bc0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
35bd0 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
35be0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
35bf0 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65  .** on which the
35c00 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
35c10 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69  d.  A readlock i
35c20 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33  s obtained if P3
35c30 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74  ==0 or.** a writ
35c40 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e  e lock if P3==1.
35c50 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69  .**.** P2 contai
35c60 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  ns the root-page
35c70 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
35c80 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   lock..**.** P4 
35c90 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
35ca0 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f  er to the name o
35cb0 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
35cc0 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69  g locked. This i
35cd0 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74  s only.** used t
35ce0 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72  o generate an er
35cf0 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74  ror message if t
35d00 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62  he lock cannot b
35d10 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63  e obtained..*/.c
35d20 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b  ase OP_TableLock
35d30 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65  : {.  u8 isWrite
35d40 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e  Lock = (u8)pOp->
35d50 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74  p3;.  if( isWrit
35d60 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d  eLock || 0==(db-
35d70 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65  >flags&SQLITE_Re
35d80 61 64 55 6e 63 6f 6d 6d 69 74 29 20 29 7b 0a 20  adUncommit) ){. 
35d90 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d     int p1 = pOp-
35da0 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74  >p1; .    assert
35db0 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62  ( p1>=0 && p1<db
35dc0 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73  ->nDb );.    ass
35dd0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
35de0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31  p->btreeMask, p1
35df0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
35e00 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20   isWriteLock==0 
35e10 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  || isWriteLock==
35e20 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  1 );.    rc = sq
35e30 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
35e40 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
35e50 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
35e60 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20  WriteLock);.    
35e70 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
35e80 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53  if( (rc&0xFF)==S
35e90 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
35ea0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
35eb0 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ar *z = pOp->p4.
35ec0 7a 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  z;.        sqlit
35ed0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
35ee0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
35ef0 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a  s locked: %s", z
35f00 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
35f10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35f20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
35f30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
35f40 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
35f50 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
35f60 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
35f70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
35f80 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
35f90 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
35fa0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
35fb0 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
35fc0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
35fd0 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
35fe0 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
35ff0 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
36000 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
36010 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
36020 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
36030 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
36040 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
36050 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
36060 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
36070 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
36080 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
36090 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74  hod. If it is, t
360a0 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65  he error.** code
360b0 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
360c0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a  SQLITE_LOCKED..*
360d0 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e  /.case OP_VBegin
360e0 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56  : {.  VTable *pV
360f0 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70  Tab;.  pVTab = p
36100 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
36110 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
36120 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29  Begin(db, pVTab)
36130 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20  ;.  if( pVTab ) 
36140 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
36150 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62  tErrmsg(p, pVTab
36160 2d 3e 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  ->pVtab);.  if( 
36170 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36180 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36190 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
361a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
361b0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
361c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
361d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
361e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
361f0 61 74 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ate P1 P2 * * *.
36200 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65  **.** P2 is a re
36210 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64  gister that hold
36220 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
36230 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
36240 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31   database .** P1
36250 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61  . Call the xCrea
36260 74 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  te method for th
36270 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
36280 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a  e OP_VCreate: {.
36290 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
362a0 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
362b0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
362c0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
362d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
362e0 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ab;  /* Name of 
362f0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
36300 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26  e */..  memset(&
36310 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sMem, 0, sizeof(
36320 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64  sMem));.  sMem.d
36330 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63  b = db;.  /* Bec
36340 61 75 73 65 20 50 32 20 69 73 20 61 6c 77 61 79  ause P2 is alway
36350 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e  s a static strin
36360 67 2c 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69  g, it is impossi
36370 62 6c 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ble for the.  **
36380 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
36390 6f 70 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f  opy() to fail */
363a0 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d  .  assert( (aMem
363b0 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20  [pOp->p2].flags 
363c0 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b  & MEM_Str)!=0 );
363d0 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d  .  assert( (aMem
363e0 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20  [pOp->p2].flags 
363f0 26 20 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30  & MEM_Static)!=0
36400 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
36410 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73  e3VdbeMemCopy(&s
36420 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Mem, &aMem[pOp->
36430 70 32 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2]);.  assert( 
36440 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
36450 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74  .  zTab = (const
36460 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
36470 61 6c 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29  alue_text(&sMem)
36480 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 54 61 62  ;.  assert( zTab
36490 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
364a0 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54  iled );.  if( zT
364b0 61 62 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  ab ){.    rc = s
364c0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
364d0 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
364e0 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72  , zTab, &p->zErr
364f0 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  Msg);.  }.  sqli
36500 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
36510 65 28 26 73 4d 65 6d 29 3b 0a 20 20 69 66 28 20  e(&sMem);.  if( 
36520 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36530 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36540 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
36550 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
36560 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
36570 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36580 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36590 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73  ./* Opcode: VDes
365a0 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a  troy P1 * * P4 *
365b0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
365c0 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
365d0 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
365e0 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74  base P1.  Call t
365f0 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
36600 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  od.** of that ta
36610 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
36620 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62  VDestroy: {.  db
36630 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20  ->nVDestroy++;. 
36640 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
36650 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
36660 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
36670 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65  4.z);.  db->nVDe
36680 73 74 72 6f 79 2d 2d 3b 0a 20 20 69 66 28 20 72  stroy--;.  if( r
36690 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
366a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
366b0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
366c0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
366d0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
366e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
366f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
36700 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
36710 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
36720 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
36730 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
36740 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
36750 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
36760 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
36770 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
36780 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
36790 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
367a0 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
367b0 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
367c0 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
367d0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
367e0 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
367f0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
36800 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
36810 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c  or *pVCur;.  sql
36820 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
36830 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
36840 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
36850 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  e;..  assert( p-
36860 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
36870 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 43 75  pCur = 0;.  pVCu
36880 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
36890 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
368a0 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74  pVtab;.  if( pVt
368b0 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70  ab==0 || NEVER(p
368c0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30  Vtab->pModule==0
368d0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ) ){.    rc = SQ
368e0 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
368f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36900 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
36910 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
36920 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d  >pModule;.  rc =
36930 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
36940 70 56 74 61 62 2c 20 26 70 56 43 75 72 29 3b 0a  pVtab, &pVCur);.
36950 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
36960 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
36970 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ab);.  if( rc ) 
36980 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
36990 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49  o_error;..  /* I
369a0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
369b0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
369c0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 70 56  se class */.  pV
369d0 43 75 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  Cur->pVtab = pVt
369e0 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61  ab;..  /* Initia
369f0 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72  lize vdbe cursor
36a00 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70 43 75   object */.  pCu
36a10 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
36a20 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  or(p, pOp->p1, 0
36a30 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 56 54  , -1, CURTYPE_VT
36a40 41 42 29 3b 0a 20 20 69 66 28 20 70 43 75 72 20  AB);.  if( pCur 
36a50 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e 75 63 2e  ){.    pCur->uc.
36a60 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b 0a 20  pVCur = pVCur;. 
36a70 20 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b     pVtab->nRef++
36a80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
36a90 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f  ssert( db->mallo
36aa0 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 70  cFailed );.    p
36ab0 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70  Module->xClose(p
36ac0 56 43 75 72 29 3b 0a 20 20 20 20 67 6f 74 6f 20  VCur);.    goto 
36ad0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
36ae0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
36af0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36b00 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
36b10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36b20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
36b30 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
36b40 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
36b50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c  ** Synopsis: ipl
36b60 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27  an=r[P3] zplan='
36b70 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P4'.**.** P1 is 
36b80 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
36b90 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
36ba0 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
36bb0 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
36bc0 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
36bd0 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
36be0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
36bf0 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
36c00 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
36c10 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
36c20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
36c30 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
36c40 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
36c50 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
36c60 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
36c70 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
36c80 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
36c90 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
36ca0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
36cb0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
36cc0 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
36cd0 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
36ce0 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
36cf0 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
36d00 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
36d10 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
36d20 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
36d30 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
36d40 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
36d50 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
36d60 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
36d70 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
36d80 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
36d90 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
36da0 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
36db0 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
36dc0 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
36dd0 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
36de0 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
36df0 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
36e00 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
36e10 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
36e20 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
36e30 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
36e40 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
36e50 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
36e60 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
36e70 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
36e80 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
36e90 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
36ea0 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
36eb0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
36ec0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
36ed0 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
36ee0 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
36ef0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
36f00 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
36f10 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64  tab *pVtab;.  Vd
36f20 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
36f30 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
36f40 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   i;.  Mem **apAr
36f50 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26  g;..  pQuery = &
36f60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
36f70 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79   pArgc = &pQuery
36f80 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  [1];.  pCur = p-
36f90 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
36fa0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
36fb0 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b  Valid(pQuery) );
36fc0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
36fd0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72  E(pOp->p3, pQuer
36fe0 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  y);.  assert( pC
36ff0 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
37000 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
37010 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e 75 63  pVCur = pCur->uc
37020 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61 62 20  .pVCur;.  pVtab 
37030 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  = pVCur->pVtab;.
37040 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
37050 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
37060 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
37070 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
37080 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
37090 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
370a0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
370b0 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
370c0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
370d0 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
370e0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
370f0 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
37100 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
37110 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
37120 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20  method */.  res 
37130 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70  = 0;.  apArg = p
37140 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69  ->apArg;.  for(i
37150 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b   = 0; i<nArg; i+
37160 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d  +){.    apArg[i]
37170 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a   = &pArgc[i+1];.
37180 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75    }.  rc = pModu
37190 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 43 75  le->xFilter(pVCu
371a0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
371b0 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
371c0 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  g);.  sqlite3Vta
371d0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
371e0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
371f0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
37200 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72  ue_to_error;.  r
37210 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
37220 6f 66 28 70 56 43 75 72 29 3b 0a 20 20 70 43 75  of(pVCur);.  pCu
37230 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
37240 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
37250 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
37260 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
37270 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
37280 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
37290 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
372a0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
372b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
372c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
372d0 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
372e0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
372f0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
37300 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a  =vcolumn(P2).**.
37310 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69  ** Store in regi
37320 73 74 65 72 20 50 33 20 74 68 65 20 76 61 6c 75  ster P3 the valu
37330 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63  e of the P2-th c
37340 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  olumn of.** the 
37350 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 74  current row of t
37360 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  he virtual-table
37370 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   of cursor P1..*
37380 2a 0a 2a 2a 20 49 66 20 74 68 65 20 56 43 6f 6c  *.** If the VCol
37390 75 6d 6e 20 6f 70 63 6f 64 65 20 69 73 20 62 65  umn opcode is be
373a0 69 6e 67 20 75 73 65 64 20 74 6f 20 66 65 74 63  ing used to fetc
373b0 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 2a  h the value of.*
373c0 2a 20 61 6e 20 75 6e 63 68 61 6e 67 69 6e 67 20  * an unchanging 
373d0 63 6f 6c 75 6d 6e 20 64 75 72 69 6e 67 20 61 6e  column during an
373e0 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
373f0 6e 2c 20 74 68 65 6e 20 74 68 65 20 50 34 0a 2a  n, then the P4.*
37400 2a 20 76 61 6c 75 65 20 69 73 20 31 2e 20 20 4f  * value is 1.  O
37410 74 68 65 72 77 69 73 65 2c 20 50 34 20 69 73 20  therwise, P4 is 
37420 30 2e 20 20 54 68 65 20 50 34 20 76 61 6c 75 65  0.  The P4 value
37430 20 69 73 20 72 65 74 75 72 6e 65 64 0a 2a 2a 20   is returned.** 
37440 62 79 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  by sqlite3_vtab_
37450 6e 6f 63 68 61 6e 67 65 28 29 20 72 6f 75 74 69  nochange() routi
37460 6e 65 20 63 61 6e 20 63 61 6e 20 62 65 20 75 73  ne can can be us
37470 65 64 0a 2a 2a 20 62 79 20 76 69 72 74 75 61 6c  ed.** by virtual
37480 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
37490 61 74 69 6f 6e 73 20 74 6f 20 72 65 74 75 72 6e  ations to return
374a0 20 73 70 65 63 69 61 6c 20 22 6e 6f 2d 63 68 61   special "no-cha
374b0 6e 67 65 22 0a 2a 2a 20 6d 61 72 6b 73 20 77 68  nge".** marks wh
374c0 69 63 68 20 63 61 6e 20 62 65 20 6d 6f 72 65 20  ich can be more 
374d0 65 66 66 69 63 69 65 6e 74 2c 20 64 65 70 65 6e  efficient, depen
374e0 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 69 72 74  ding on the virt
374f0 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  ual table..*/.ca
37500 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
37510 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
37520 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
37530 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
37540 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
37550 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33  pDest;.  sqlite3
37560 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78  _context sContex
37570 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  t;..  VdbeCursor
37580 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
37590 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
375a0 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72  sert( pCur->eCur
375b0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54  Type==CURTYPE_VT
375c0 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AB );.  assert( 
375d0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
375e0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
375f0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
37600 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
37610 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
37620 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
37630 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20  , pDest);.  if( 
37640 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
37650 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
37660 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
37670 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
37680 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
37690 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61  ->uc.pVCur->pVta
376a0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
376b0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
376c0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
376d0 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
376e0 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
376f0 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
37700 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78  ext));.  sContex
37710 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a  t.pOut = pDest;.
37720 20 20 73 43 6f 6e 74 65 78 74 2e 62 56 74 61 62    sContext.bVtab
37730 4e 6f 43 68 6e 67 20 3d 20 70 4f 70 2d 3e 70 34  NoChng = pOp->p4
37740 2e 69 21 3d 30 3b 0a 20 20 4d 65 6d 53 65 74 54  .i!=0;.  MemSetT
37750 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d  ypeFlag(pDest, M
37760 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d  EM_Null);.  rc =
37770 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
37780 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  n(pCur->uc.pVCur
37790 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
377a0 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2);.  sqlite3
377b0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
377c0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
377d0 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  ( sContext.isErr
377e0 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  or ){.    rc = s
377f0 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b  Context.isError;
37800 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
37810 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
37820 28 70 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67  (pDest, encoding
37830 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
37840 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
37850 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  st);.  UPDATE_MA
37860 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
37870 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
37880 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
37890 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
378a0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
378b0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
378c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
378d0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
378e0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
378f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
37900 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
37910 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37920 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
37930 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
37940 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
37950 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
37960 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
37970 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
37980 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
37990 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
379a0 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
379b0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
379c0 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
379d0 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
379e0 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
379f0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
37a00 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
37a10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
37a20 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
37a30 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
37a40 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
37a50 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
37a60 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
37a70 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
37a80 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
37a90 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
37aa0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
37ab0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
37ac0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
37ad0 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  YPE_VTAB );.  if
37ae0 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
37af0 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
37b00 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
37b10 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61  ->uc.pVCur->pVta
37b20 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
37b30 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
37b40 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
37b50 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a  ->xNext );..  /*
37b60 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78   Invoke the xNex
37b70 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  t() method of th
37b80 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20  e module. There 
37b90 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68  is no way for th
37ba0 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  e.  ** underlyin
37bb0 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  g implementation
37bc0 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72   to return an er
37bd0 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72  ror if one occur
37be0 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e  s during.  ** xN
37bf0 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20  ext(). Instead, 
37c00 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
37c10 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75  rs, true is retu
37c20 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67  rned (indicating
37c30 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61   that .  ** data
37c40 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61   is available) a
37c50 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  nd the error cod
37c60 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  e returned when 
37c70 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20  xColumn or.  ** 
37c80 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f  some other metho
37c90 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65  d is next invoke
37ca0 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69  d on the save vi
37cb0 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
37cc0 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20  or..  */.  rc = 
37cd0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
37ce0 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a  Cur->uc.pVCur);.
37cf0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
37d00 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
37d10 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ab);.  if( rc ) 
37d20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37d30 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d  o_error;.  res =
37d40 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
37d50 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a  Cur->uc.pVCur);.
37d60 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
37d70 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28  n(!res,2);.  if(
37d80 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20   !res ){.    /* 
37d90 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61  If there is data
37da0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  , jump to P2 */.
37db0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
37dc0 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
37dd0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
37de0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
37df0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23  r_interrupt;.}.#
37e00 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37e10 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37e20 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
37e30 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
37e40 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
37e50 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a  : VRename P1 * *
37e60 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
37e70 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
37e80 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
37e90 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
37ea0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
37eb0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
37ec0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
37ed0 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61  responding xRena
37ee0 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76  me method. The v
37ef0 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73  alue.** in regis
37f00 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64  ter P1 is passed
37f10 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72   as the zName ar
37f20 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52  gument to the xR
37f30 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f  ename method..*/
37f40 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65  .case OP_VRename
37f50 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
37f60 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d  ab *pVtab;.  Mem
37f70 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61   *pName;..  pVta
37f80 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
37f90 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  b->pVtab;.  pNam
37fa0 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  e = &aMem[pOp->p
37fb0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
37fc0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
37fd0 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72  ename );.  asser
37fe0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e  t( memIsValid(pN
37ff0 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74  ame) );.  assert
38000 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
38010 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
38020 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
38030 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
38040 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
38050 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74  EM_Str );.  test
38060 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
38070 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
38080 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
38090 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
380a0 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73  UTF16BE );.  tes
380b0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
380c0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
380d0 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  E );.  rc = sqli
380e0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
380f0 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c  oding(pName, SQL
38100 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
38110 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
38120 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
38130 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
38140 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
38150 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
38160 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
38170 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
38180 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72 65  ab);.  p->expire
38190 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20  d = 0;.  if( rc 
381a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
381b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
381c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
381d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
381e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
381f0 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
38200 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
38210 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61  .** Synopsis: da
38220 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a  ta=r[P3@P2].**.*
38230 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
38240 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
38250 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
38260 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
38270 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
38280 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
38290 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
382a0 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
382b0 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
382c0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
382d0 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
382e0 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
382f0 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to