/ Hex Artifact Content
Login

Artifact 9ef1b1701e133d1cdb7dc66598863993b925b069:


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 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65  orter(x) ((x)->e
1810: 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1820: 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20  _SORTER)../*.** 
1830: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1840: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1850: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1860: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1870: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1880: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1890: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
18a0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
18b0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
18c0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
18d0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
18e0: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
18f0: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1900: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1910: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1920: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1930: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1940: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1950: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1960: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1970: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1980: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1990: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
19a0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
19b0: 75 38 20 65 43 75 72 54 79 70 65 20 20 20 20 20  u8 eCurType     
19c0: 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
19d0: 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19e0: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  */.){.  /* Find 
19f0: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1a00: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1a10: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1a20: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1a30: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1a40: 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20  this VdbeCursor 
1a50: 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73  structure. It is
1a60: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1a70: 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20  se a .  ** vdbe 
1a80: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d  memory cell to m
1a90: 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  anage the memory
1aa0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
1ab0: 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20  ired for a.  ** 
1ac0: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1ad0: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1ae0: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1af0: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b00: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b10: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b20: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1b30: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1b40: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1b50: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1b60: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1b70: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1b80: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1b90: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1ba0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1bb0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1bc0: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1bd0: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1be0: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1bf0: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c00: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c10: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c20: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1c30: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1c40: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1c50: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1c60: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1c70: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1c80: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1c90: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1ca0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1cb0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1cc0: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1cd0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1ce0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1cf0: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d00: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d10: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d20: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1d30: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1d40: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1d50: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1d60: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1d70: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1d80: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1d90: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1da0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1db0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20  VdbeCursor *pCx 
1dc0: 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a  = 0;.  nByte = .
1dd0: 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69 7a        ROUND8(siz
1de0: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29  eof(VdbeCursor))
1df0: 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32 29   + 2*sizeof(u32)
1e00: 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20 20  *nField + .     
1e10: 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54   (eCurType==CURT
1e20: 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69 74 65  YPE_BTREE?sqlite
1e30: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e40: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
1e50: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1e60: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1e70: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1e80: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1e90: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1ea0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1eb0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1ec0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1ed0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ee0: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
1ef0: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
1f00: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1f10: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1f20: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1f30: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
1f40: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
1f50: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
1f60: 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20    pCx->eCurType 
1f70: 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20  = eCurType;.    
1f80: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
1f90: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
1fa0: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43  = nField;.    pC
1fb0: 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43  x->aOffset = &pC
1fc0: 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  x->aType[nField]
1fd0: 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54 79  ;.    if( eCurTy
1fe0: 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1ff0: 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  E ){.      pCx->
2000: 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  uc.pCursor = (Bt
2010: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2020: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e     &pMem->z[ROUN
2030: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2040: 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28  rsor))+2*sizeof(
2050: 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20  u32)*nField];.  
2060: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2070: 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e  CursorZero(pCx->
2080: 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
2090: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
20a0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
20b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
20c0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
20d0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
20e0: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
20f0: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2100: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2110: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2120: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2130: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2140: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2150: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2160: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2170: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
2180: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
2190: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   it alone..**.**
21a0: 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72 49   If the bTryForI
21b0: 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c  nt flag is true,
21c0: 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f   then extra effo
21d0: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69  rt is made to gi
21e0: 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ve.** an integer
21f0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2200: 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c    Strings that l
2210: 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e  ook like floatin
2220: 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65  g point.** value
2230: 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76 65  s but which have
2240: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63   no fractional c
2250: 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c  omponent (exampl
2260: 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77  e: '48.00').** w
2270: 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49  ill have a MEM_I
2280: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2290: 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e  n when bTryForIn
22a0: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a  t is true..**.**
22b0: 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69   If bTryForInt i
22c0: 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66  s false, then if
22d0: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
22e0: 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63  g contains a dec
22f0: 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72  imal.** point or
2300: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74   exponential not
2310: 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c  ation, the resul
2320: 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65  t is only MEM_Re
2330: 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74  al, even.** if t
2340: 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63 74  here is an exact
2350: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2360: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71  ntation of the q
2370: 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74  uantity..*/.stat
2380: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
2390: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
23a0: 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79   *pRec, int bTry
23b0: 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c  ForInt){.  doubl
23c0: 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20  e rValue;.  i64 
23d0: 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63  iValue;.  u8 enc
23e0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
23f0: 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66  assert( (pRec->f
2400: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2410: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2420: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  ))==MEM_Str );. 
2430: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2440: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75  (pRec->z, &rValu
2450: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
2460: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2470: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
2480: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
2490: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
24a0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63  enc) ){.    pRec
24b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
24c0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
24d0: 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65  |= MEM_Int;.  }e
24e0: 6c 73 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  lse{.    pRec->u
24f0: 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  .r = rValue;.   
2500: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2510: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66  MEM_Real;.    if
2520: 28 20 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73  ( bTryForInt ) s
2530: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2540: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2550: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
2560: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2570: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2580: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2590: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
25a0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
25b0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
25c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
25d0: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
25e0: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
25f0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2600: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2610: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2620: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2630: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2640: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2650: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
2660: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2670: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2680: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2690: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
26a0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
26b0: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
26c0: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
26d0: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
26e0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
26f0: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2700: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2710: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2720: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2730: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2740: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
2750: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
2760: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
2770: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2780: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2790: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
27a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
27b0: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
27c0: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
27d0: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
27e0: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
27f0: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2800: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2810: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2820: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2830: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2840: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
2850: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
2860: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
2870: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
2880: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2890: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
28a0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
28b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
28c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
28d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
28e0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
28f0: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2900: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2920: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2930: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
2940: 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63          if( pRec
2950: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2960: 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  r ) applyNumeric
2970: 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29  Affinity(pRec,1)
2980: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
29a0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29b0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  y(pRec);.      }
29c0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
29d0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
29e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
29f0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2a00: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2a10: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
2a20: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2a30: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2a40: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2a50: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2a60: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2a70: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2a80: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2a90: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2aa0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2ab0: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2ac0: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2ad0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2ae0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2af0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2b00: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2b10: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
2b20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2b30: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2b40: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2b50: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2b60: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2b70: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2b80: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2b90: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2ba0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2bb0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2bc0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2bd0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2be0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2bf0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2c00: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2c10: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2c20: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2c30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2c40: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2c50: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2c60: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2c80: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2c90: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ca0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2cb0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2cc0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2cd0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2ce0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2d10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2d20: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2d40: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2d50: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2d60: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d70: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d80: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d90: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2da0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2db0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2dc0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2de0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2df0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2e00: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e10: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e20: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e30: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e40: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
2e60: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
2e70: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
2e80: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
2e90: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
2ea0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
2eb0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
2ec0: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
2ed0: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
2ee0: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
2ef0: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
2f00: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
2f10: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
2f20: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
2f30: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
2f40: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
2f50: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
2f60: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
2f70: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
2f80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2f90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2fa0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2fb0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2fc0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2fd0: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
2fe0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
2ff0: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3000: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3010: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3020: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3030: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3040: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3050: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3060: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
3070: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
3080: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
3090: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
30a0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
30b0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
30c0: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
30d0: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
30e0: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
30f0: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3100: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3110: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3120: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3130: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3140: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3150: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
3160: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
3170: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
3180: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
3190: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
31c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
31d0: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
31e0: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3200: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3210: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3220: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3230: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3240: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3250: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
3260: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
3270: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3280: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
3290: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
32a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
32b0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
32c0: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
32d0: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
32e0: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
32f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3300: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3310: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3320: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3330: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3340: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3350: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
3360: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
3370: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
3380: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
3390: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
33a0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
33b0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
33c0: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
33d0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
33e0: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
33f0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3400: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3410: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3420: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3430: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3440: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3450: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3460: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3470: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3480: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3490: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
34a0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
34b0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
34c0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
34d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
34e0: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
34f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3550: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3560: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3570: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3580: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3590: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
35a0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
35b0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
35c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
35d0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
35e0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
35f0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3600: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3610: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3620: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3640: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3650: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
3660: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3670: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3680: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3690: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
36a0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
36b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
36c0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
36d0: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
36e0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
36f0: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3700: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3710: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3720: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3730: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
3760: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3770: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3780: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3790: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
37a0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
37b0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
37c0: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
37d0: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
37e0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
37f0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3800: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3810: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3820: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3830: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3840: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3850: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3860: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3870: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3880: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3890: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
38a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
38b0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
38c0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
38d0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
38e0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
38f0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3900: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3910: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3920: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3930: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3940: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3950: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3960: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3970: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3980: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3990: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
39a0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
39b0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
39c0: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
39d0: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
39e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
39f0: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3a00: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3a10: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3a20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3a30: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3a40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3a50: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a70: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3a80: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3a90: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3aa0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3ab0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3ac0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3ad0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3ae0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3af0: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3b00: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3b10: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3b20: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3b30: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3b40: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3b50: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3b60: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3b70: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3b80: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3b90: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3ba0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3bb0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3bc0: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3bd0: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3be0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bf0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3c00: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3c10: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3c20: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3c30: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c40: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3c50: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3c60: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3c70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3c80: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3c90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ca0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3cb0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3cc0: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3cd0: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3ce0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3cf0: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3d00: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3d10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3d20: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3d40: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3d50: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3d60: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3d70: 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64   }.}.static void
3d80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3d90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3da0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3db0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3dc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3dd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3de0: 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ");.}.#endif..#i
3df0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
3e00: 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  G.#  define REGI
3e10: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20  STER_TRACE(R,M) 
3e20: 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  if(db->flags&SQL
3e30: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72 65  ITE_VdbeTrace)re
3e40: 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d 29  gisterTrace(R,M)
3e50: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
3e60: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
3e70: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
3e80: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
3e90: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
3ea0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
3eb0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
3ec0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
3ed0: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
3ee0: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
3ef0: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
3f00: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
3f10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
3f20: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3f30: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3f40: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3f50: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3f60: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3f70: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3f80: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3f90: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3fa0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3fb0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3fc0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3fd0: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3fe0: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ff0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
4000: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
4010: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
4020: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
4030: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
4040: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
4050: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
4060: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
4070: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
4080: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4090: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
40a0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
40b0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
40c0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
40d0: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
40e0: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
40f0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4100: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4110: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4120: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4130: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 67  * Return the reg
4140: 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70 32  ister of pOp->p2
4150: 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72 65   after first pre
4160: 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65 0a  paring it to be.
4170: 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  ** overwritten w
4180: 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ith an integer v
4190: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
41a0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
41b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
41c0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65 6d  aseWithClear(Mem
41d0: 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69 74   *pOut){.  sqlit
41e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
41f0: 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  (pOut);.  pOut->
4200: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
4210: 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a  .  return pOut;.
4220: 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f 75  }.static Mem *ou
4230: 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64 62  t2Prerelease(Vdb
4240: 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70 4f  e *p, VdbeOp *pO
4250: 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b  p){.  Mem *pOut;
4260: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
4270: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
4280: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
4290: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
42a0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
42b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
42c0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
42d0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
42e0: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
42f0: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 72 65  (pOut) ){.    re
4300: 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65  turn out2Prerele
4310: 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75  aseWithClear(pOu
4320: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
4330: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4340: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75  EM_Int;.    retu
4350: 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a  rn pOut;.  }.}..
4360: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
4370: 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45  s much of a VDBE
4380: 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63   program as we c
4390: 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  an..** This is t
43a0: 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74  he core of sqlit
43b0: 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a  e3_step().  .*/.
43c0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
43d0: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
4400: 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20  .){.  Op *aOp = 
4410: 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20  p->aOp;         
4420: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4430: 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20  Op */.  Op *pOp 
4440: 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  = aOp;          
4450: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70     /* Current op
4460: 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64  eration */.#if d
4470: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
4480: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
4490: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
44a0: 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20  Op *pOrigOp;    
44b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
44c0: 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68  lue of pOp at th
44d0: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f  e top of the loo
44e0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  p */.#endif.  in
44f0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4500: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4510: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
4520: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
4530: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
4540: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
4550: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
4560: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
4570: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4580: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f  r an error if po
4590: 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  sitive */.  u8 e
45a0: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
45b0: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
45c0: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
45d0: 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72  */.  int iCompar
45e0: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
45f0: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73  /* Result of las
4600: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  t OP_Compare ope
4610: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  ration */.  unsi
4620: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4630: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4640: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4650: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4660: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4670: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4680: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4690: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
46a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
46b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
46c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
46d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
46e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
46f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4700: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4710: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4720: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4730: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4740: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4750: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4760: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4770: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4780: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4790: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
47a0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
47b0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
47c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
47d0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
47e0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
47f0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4800: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4810: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4820: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4830: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4840: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4850: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4860: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4870: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4880: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4890: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
48a0: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
48b0: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
48c0: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
48d0: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
48e0: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
48f0: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4900: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4910: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4920: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4930: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
4940: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
4950: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
4960: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4970: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
4980: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
4990: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
49a0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
49b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
49c0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
49d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
49e0: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
49f0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4a00: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4a10: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4a20: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
4a30: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4a40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
4a50: 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61  Reader || p->rea
4a60: 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d  dOnly!=0 );.  p-
4a70: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4a80: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
4a90: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
4aa0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4ab0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4ac0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4ad0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4ae0: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4af0: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4b00: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4b10: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4b20: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4b30: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4b40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4b50: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4b60: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
4b70: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
4b80: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
4b90: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4ba0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4bb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4bc0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4bd0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4be0: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4bf0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
4c00: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
4c10: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65  ressOps);.  }.#e
4c20: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4c30: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4c40: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4c50: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4c60: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
4c70: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
4c80: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
4c90: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
4ca0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4cb0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
4cc0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
4cd0: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
4ce0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4cf0: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
4d00: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4d10: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
4d20: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4d30: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
4d40: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
4d50: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4d60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
4d70: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4d80: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
4d90: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
4da0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
4db0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4dc0: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
4dd0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4de0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4df0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
4e00: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
4e10: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
4e20: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
4e30: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
4e40: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
4e50: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
4e60: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
4e70: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
4e80: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
4e90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4ea0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4eb0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
4ec0: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
4ed0: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
4ee0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4ef0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4f00: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f  .#endif.  for(pO
4f10: 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 72  p=&aOp[p->pc]; r
4f20: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 4f  c==SQLITE_OK; pO
4f30: 70 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p++){.    assert
4f40: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
4f50: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
4f60: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4f70: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4f80: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4f90: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4fa0: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4fb0: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4fc0: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
4fd0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
4fe0: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
4ff0: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
5000: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
5010: 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70  ec[(int)(pOp-aOp
5020: 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  )]++;.#endif..  
5030: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
5040: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
5050: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
5060: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
5070: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
5080: 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
5090: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
50a0: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ace ){.      sql
50b0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
50c0: 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f  stdout, (int)(pO
50d0: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a  p - aOp), pOp);.
50e0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
50f0: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
5100: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
5110: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
5120: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
5130: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
5140: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
5150: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
5160: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
5170: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
5180: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5190: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
51a0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
51b0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
51c0: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
51d0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
51e0: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
51f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5200: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
5210: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
5220: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e  ndif..    /* San
5230: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
5240: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
5250: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5260: 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
5270: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
5280: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
5290: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
52a0: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70  e] );.    if( (p
52b0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
52c0: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
52d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
52e0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
52f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
5300: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5310: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5320: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5330: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
5340: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5350: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
5360: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
5370: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
5380: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
5390: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
53a0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
53b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
53c0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
53d0: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
53e0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
53f0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5400: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5410: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
5420: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5430: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5440: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5450: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73  p2]) );.      as
5460: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
5470: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
5480: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
5490: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  2]) );.      REG
54a0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
54b0: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
54c0: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
54d0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
54e0: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  s & OPFLG_IN3)!=
54f0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5500: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5510: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5520: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
5530: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5540: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5550: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5560: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5570: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5580: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5590: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
55a0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
55b0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
55c0: 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
55d0: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p3]);.    }. 
55e0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
55f0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
5600: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  2)!=0 ){.      a
5610: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5620: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5630: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
5640: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
5650: 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
5660: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
5670: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
5680: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
5690: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
56a0: 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20  G_OUT3)!=0 ){.  
56b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56c0: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p3>0 );.      a
56d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
56e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
56f0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
5700: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5710: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
5720: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
5730: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
5740: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
5750: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
5760: 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d  E).    pOrigOp =
5770: 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a   pOp;.#endif.  .
5780: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5790: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
57a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
57f0: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5800: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5810: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5820: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5830: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5840: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5850: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5860: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5870: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5880: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5890: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
58a0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
58b0: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
58c0: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
58d0: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
58e0: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
58f0: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5900: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5910: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5920: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5930: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5940: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5950: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5960: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5970: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5980: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5990: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
59a0: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
59b0: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
59c0: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
59d0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
59e0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
59f0: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5a00: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5a10: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5a20: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5a30: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5a40: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5a50: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5a60: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5a70: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5a80: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5a90: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5aa0: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5ab0: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5ac0: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5ad0: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5ae0: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5af0: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5b00: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5b10: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5b20: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5b30: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5b40: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5b50: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5b60: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5b70: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5b80: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5b90: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5ba0: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5bb0: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5bc0: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5bd0: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5be0: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5bf0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5c00: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5c10: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5c20: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5c30: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5c40: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5c50: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5c60: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5c70: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5c80: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5c90: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5ca0: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5cb0: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5cc0: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5cd0: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f  n2, in3, out2, o
5ce0: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5cf0: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5d00: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5d10: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5d20: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5d30: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5d40: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5d50: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5d60: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5d70: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5d80: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
5d90: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
5da0: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
5db0: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
5dc0: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
5dd0: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
5de0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
5df0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
5e00: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
5e10: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
5e20: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
5e30: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
5e40: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
5e50: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
5e60: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
5e70: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
5e80: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
5e90: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
5ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
5ef0: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
5f00: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
5f10: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
5f20: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
5f30: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
5f40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
5f50: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
5f60: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
5f70: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
5f80: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
5f90: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  he program..**.*
5fa0: 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65 74  * The P1 paramet
5fb0: 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c  er is not actual
5fc0: 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ly used by this 
5fd0: 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72  opcode.  However
5fe0: 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74  , it.** is somet
5ff0: 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e  imes set to 1 in
6000: 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61 20  stead of 0 as a 
6010: 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d  hint to the comm
6020: 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a  and-line shell.*
6030: 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f  * that this Goto
6040: 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   is the bottom o
6050: 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61  f a loop and tha
6060: 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d  t the lines from
6070: 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74   P2 down.** to t
6080: 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20  he current line 
6090: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
60a0: 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ed for EXPLAIN o
60b0: 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
60c0: 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20  P_Goto: {       
60d0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
60e0: 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f  .jump_to_p2_and_
60f0: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6100: 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  upt:.  pOp = &aO
6110: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6120: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
6130: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
6140: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
6150: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
6160: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
6170: 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e  Next, OP_RowSetN
6180: 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  ext, or OP_Sorte
6190: 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20  rNext) all jump 
61a0: 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63  here upon.  ** c
61b0: 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63  ompletion.  Chec
61c0: 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69  k to see if sqli
61d0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
61e0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a  has been called.
61f0: 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70    ** or if the p
6200: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
6210: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76   needs to be inv
6220: 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  oked. .  **.  **
6230: 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20   This code uses 
6240: 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f  unstructured "go
6250: 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61  to" statements a
6260: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b  nd does not look
6270: 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74   clean..  ** But
6280: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65   that is not due
6290: 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e   to sloppy codin
62a0: 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f  g habits. The co
62b0: 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  de is written th
62c0: 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20  is.  ** way for 
62d0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20  performance, to 
62e0: 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20  avoid having to 
62f0: 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70  run the interrup
6300: 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20  t and progress. 
6310: 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76   ** checks on ev
6320: 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69  ery opcode.  Thi
6330: 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f  s helps sqlite3_
6340: 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62  step() to run ab
6350: 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61  out 1.5%.  ** fa
6360: 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74  ster according t
6370: 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f  o "valgrind --to
6380: 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a  ol=cachegrind" *
6390: 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  /.check_for_inte
63a0: 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d  rrupt:.  if( db-
63b0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
63c0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
63d0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
63e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
63f0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
6400: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c  LLBACK.  /* Call
6410: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6420: 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20  llback if it is 
6430: 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74  configured and t
6440: 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62  he required numb
6450: 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20  er.  ** of VDBE 
6460: 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78  ops have been ex
6470: 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73  ecuted (either s
6480: 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61  ince this invoca
6490: 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c  tion of.  ** sql
64a0: 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f  ite3VdbeExec() o
64b0: 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d  r since last tim
64c0: 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  e the progress c
64d0: 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c  allback was call
64e0: 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ed)..  ** If the
64f0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6500: 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  ck returns non-z
6510: 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69  ero, exit the vi
6520: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69  rtual machine wi
6530: 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e  th.  ** a return
6540: 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f   code SQLITE_ABO
6550: 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  RT..  */.  if( d
6560: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20  b->xProgress!=0 
6570: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
6580: 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20  gressLimit ){.  
6590: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50    assert( db->nP
65a0: 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b  rogressOps!=0 );
65b0: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
65c0: 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20  mit = nVmStep + 
65d0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
65e0: 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e   - (nVmStep%db->
65f0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20  nProgressOps);. 
6600: 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67     if( db->xProg
6610: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
6620: 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20  ssArg) ){.      
6630: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
6640: 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  RRUPT;.      got
6650: 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
6660: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  t;.    }.  }.#en
6670: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
6680: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
6690: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
66a0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
66b0: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
66c0: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
66d0: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
66e0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
66f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
6700: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
6710: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
6720: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6730: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
6740: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
6750: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
6760: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6770: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
6780: 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29  namic(pIn1)==0 )
6790: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
67a0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
67b0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
67c0: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
67d0: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d  u.i = (int)(pOp-
67e0: 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52  aOp);.  REGISTER
67f0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6800: 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73  pIn1);..  /* Mos
6810: 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e  t jump operation
6820: 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74  s do a goto to t
6830: 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65  his spot in orde
6840: 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a  r to update.  **
6850: 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72   the pOp pointer
6860: 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a  . */.jump_to_p2:
6870: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
6880: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72  p->p2 - 1];.  br
6890: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
68a0: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
68b0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
68c0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
68d0: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
68e0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
68f0: 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65  gister P1.  Afte
6900: 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72  r.** the jump, r
6910: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
6920: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f  es undefined..*/
6930: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
6940: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6950: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6960: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6970: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6980: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6990: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
69a0: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e  In1->u.i];.  pIn
69b0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
69c0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
69d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
69e0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50   InitCoroutine P
69f0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
6a00: 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65  * Set up registe
6a10: 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
6a20: 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68  will Yield to th
6a30: 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c  e coroutine.** l
6a40: 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73  ocated at addres
6a50: 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  s P3..**.** If P
6a60: 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f  2!=0 then the co
6a70: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
6a80: 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65  tation immediate
6a90: 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68  ly follows.** th
6aa0: 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a  is opcode.  So j
6ab0: 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72  ump over the cor
6ac0: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
6ad0: 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72  ation to.** addr
6ae0: 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ess P2..**.** Se
6af0: 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75  e also: EndCorou
6b00: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6b10: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
6b20: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6b30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6b40: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
6b50: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
6b60: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
6b70: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
6b80: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
6b90: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6ba0: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
6bb0: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
6bc0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
6bd0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6be0: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
6bf0: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
6c00: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
6c10: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
6c20: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
6c30: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74  f( pOp->p2 ) got
6c40: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
6c50: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6c60: 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69  ode:  EndCorouti
6c70: 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ne P1 * * * *.**
6c80: 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74  .** The instruct
6c90: 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65  ion at the addre
6ca0: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
6cb0: 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a  1 is a Yield..**
6cc0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20   Jump to the P2 
6cd0: 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61  parameter of tha
6ce0: 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65  t Yield..** Afte
6cf0: 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  r the jump, regi
6d00: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
6d10: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
6d20: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
6d30: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6d40: 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65   OP_EndCoroutine
6d50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6d60: 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70   in1 */.  VdbeOp
6d70: 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e   *pCaller;.  pIn
6d80: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6d90: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6da0: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6db0: 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
6dc0: 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20  pIn1->u.i>=0 && 
6dd0: 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70  pIn1->u.i<p->nOp
6de0: 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20   );.  pCaller = 
6df0: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
6e00: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
6e10: 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59  er->opcode==OP_Y
6e20: 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ield );.  assert
6e30: 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30  ( pCaller->p2>=0
6e40: 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c   && pCaller->p2<
6e50: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20  p->nOp );.  pOp 
6e60: 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e  = &aOp[pCaller->
6e70: 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d  p2 - 1];.  pIn1-
6e80: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6e90: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6ea0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6eb0: 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20  Yield P1 P2 * * 
6ec0: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
6ed0: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
6ee0: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
6ef0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
6f00: 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65   This.** has the
6f10: 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64   effect of yield
6f20: 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69  ing to a corouti
6f30: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ne..**.** If the
6f40: 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20   coroutine that 
6f50: 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74  is launched by t
6f60: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
6f70: 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65  ends with.** Yie
6f80: 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65  ld or Return the
6f90: 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68  n continue to th
6fa0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6fb0: 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74  on.  But if.** t
6fc0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75  he coroutine lau
6fd0: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
6fe0: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
6ff0: 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74  ith.** EndCorout
7000: 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ine, then jump t
7010: 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61 6e  o P2 rather than
7020: 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68   continuing with
7030: 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73   the.** next ins
7040: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
7050: 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f  See also: InitCo
7060: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
7070: 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20  OP_Yield: {     
7080: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a         /* in1, j
7090: 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  ump */.  int pcD
70a0: 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  est;.  pIn1 = &a
70b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
70c0: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
70d0: 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20  ynamic(pIn1)==0 
70e0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
70f0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63   = MEM_Int;.  pc
7100: 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31  Dest = (int)pIn1
7110: 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75  ->u.i;.  pIn1->u
7120: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  .i = (int)(pOp -
7130: 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45   aOp);.  REGISTE
7140: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
7150: 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20   pIn1);.  pOp = 
7160: 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20  &aOp[pcDest];.  
7170: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7180: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
7190: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35    P1 P2 P3 P4 P5
71a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
71b0: 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c  f r[P3]=null hal
71c0: 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  t.**.** Check th
71d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
71e0: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
71f0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
7200: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
7210: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
7220: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
7230: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
7240: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
7250: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
7260: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
7270: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
7280: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
7290: 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  ..** The P5 para
72a0: 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20  meter should be 
72b0: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  1..*/.case OP_Ha
72c0: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
72d0: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
72e0: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
72f0: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
7300: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
7310: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
7320: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7330: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
7340: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
7350: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
7360: 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d  P5.**.** Exit im
7370: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
7380: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
7390: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
73a0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
73b0: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
73c0: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
73d0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
73e0: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
73f0: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
7400: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
7410: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
7420: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
7430: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
7440: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
7450: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
7460: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
7470: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
7480: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
7490: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
74a0: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
74b0: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
74c0: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
74d0: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
74e0: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
74f0: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
7500: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
7510: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
7520: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
7530: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
7540: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
7550: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
7560: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
7570: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
7580: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
7590: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
75a0: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
75b0: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
75c0: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
75d0: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50   string..**.** P
75e0: 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74  5 is a value bet
75f0: 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e  ween 0 and 4, in
7600: 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f  clusive, that mo
7610: 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74  difies the P4 st
7620: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ring..**.**    0
7630: 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a  :  (no change).*
7640: 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c  *    1:  NOT NUL
7650: 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c  L contraint fail
7660: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20  ed: P4.**    2: 
7670: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
7680: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7690: 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f      3:  CHECK co
76a0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
76b0: 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f   P4.**    4:  FO
76c0: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
76d0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
76e0: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
76f0: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69  ot zero and P4 i
7700: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65  s NULL, then eve
7710: 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68  rything after th
7720: 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74  e ":" is.** omit
7730: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ted..**.** There
7740: 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22   is an implied "
7750: 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74  Halt 0 0 0" inst
7760: 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64  ruction inserted
7770: 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64   at the very end
7780: 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f   of.** every pro
7790: 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70  gram.  So a jump
77a0: 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69   past the last i
77b0: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
77c0: 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20  e program.** is 
77d0: 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63  the same as exec
77e0: 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63  uting Halt..*/.c
77f0: 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20  ase OP_Halt: {. 
7800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
7810: 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pe;.  const char
7820: 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56 64 62   *zLogFmt;.  Vdb
7830: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
7840: 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63    int pcx;..  pc
7850: 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  x = (int)(pOp - 
7860: 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  aOp);.  if( pOp-
7870: 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26  >p1==SQLITE_OK &
7880: 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  & p->pFrame ){. 
7890: 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73     /* Halt the s
78a0: 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75  ub-program. Retu
78b0: 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  rn control to th
78c0: 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20  e parent frame. 
78d0: 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  */.    pFrame = 
78e0: 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  p->pFrame;.    p
78f0: 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
7900: 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20  e->pParent;.    
7910: 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20  p->nFrame--;.   
7920: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7930: 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
7940: 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20  hange);.    pcx 
7950: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
7960: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
7970: 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64  );.    lastRowid
7980: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
7990: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
79a0: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
79b0: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
79c0: 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20  tion pcx is the 
79d0: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
79e0: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
79f0: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
7a00: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
7a10: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
7a20: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
7a30: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
7a40: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
7a50: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
7a60: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
7a70: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
7a80: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
7a90: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
7aa0: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
7ab0: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
7ac0: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
7ad0: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
7ae0: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
7af0: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
7b00: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20  .  */.      pcx 
7b10: 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32  = p->aOp[pcx].p2
7b20: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
7b30: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
7b40: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
7b50: 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70      pOp = &aOp[p
7b60: 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  cx];.    break;.
7b70: 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f    }.  p->rc = pO
7b80: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
7b90: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
7ba0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
7bb0: 20 70 63 78 3b 0a 20 20 69 66 28 20 70 2d 3e 72   pcx;.  if( p->r
7bc0: 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  c ){.    if( pOp
7bd0: 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74  ->p5 ){.      st
7be0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
7bf0: 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d  * const azType[]
7c00: 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c   = { "NOT NULL",
7c10: 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43   "UNIQUE", "CHEC
7c20: 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  K",.            
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d   "FOREIGN KEY" }
7c60: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
7c70: 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f  pOp->p5>=1 && pO
7c80: 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20  p->p5<=4 );.    
7c90: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7ca0: 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  >p5==1 );.      
7cb0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7cc0: 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65  5==2 );.      te
7cd0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7ce0: 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =3 );.      test
7cf0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34  case( pOp->p5==4
7d00: 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70 65 20   );.      zType 
7d10: 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35  = azType[pOp->p5
7d20: 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  -1];.    }else{.
7d30: 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 30 3b        zType = 0;
7d40: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
7d50: 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70  t( zType!=0 || p
7d60: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7d70: 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62     zLogFmt = "ab
7d80: 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73  ort at %d in [%s
7d90: 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66 28 20  ]: %s";.    if( 
7da0: 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e 70 34  zType && pOp->p4
7db0: 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  .z ){.      sqli
7dc0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
7dd0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
7de0: 61 69 6c 65 64 3a 20 25 73 22 2c 20 7a 54 79 70  ailed: %s", zTyp
7df0: 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  e, pOp->p4.z);. 
7e00: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
7e10: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
7e20: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
7e30: 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  (p, "%s", pOp->p
7e40: 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  4.z);.    }else{
7e50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7e60: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63  beError(p, "%s c
7e70: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7e80: 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d  ", zType);.    }
7e90: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
7ea0: 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d  (pOp->p1, zLogFm
7eb0: 74 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c  t, pcx, p->zSql,
7ec0: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
7ed0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
7ee0: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
7ef0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7f00: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
7f10: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
7f20: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
7f30: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7f40: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
7f50: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
7f60: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
7f70: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
7f80: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
7f90: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
7fa0: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
7fb0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
7fc0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
7fd0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
7fe0: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
7ff0: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
8000: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
8010: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
8020: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
8030: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
8040: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8050: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
8060: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8070: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
8080: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
8090: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
80a0: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
80b0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
80c0: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
80d0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
80e0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
80f0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8100: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
8110: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
8120: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8130: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
8140: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8150: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8160: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8170: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
8180: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
8190: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
81a0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
81b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
81c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
81d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
81e0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
81f0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
8200: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
8210: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
8220: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
8230: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
8240: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8250: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
8260: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
8270: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
8280: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8290: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
82a0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
82b0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
82c0: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
82d0: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
82e0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
82f0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
8300: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
8310: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
8320: 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  LOAT, out2 */.  
8330: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8340: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8350: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8360: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
8370: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
8380: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
8390: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20   );.  pOut->u.r 
83a0: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
83b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
83c0: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
83d0: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
83e0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
83f0: 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a   r[P2]='P4'.**.*
8400: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
8410: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
8420: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
8430: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
8440: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
8450: 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64  o a String opcod
8460: 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  e before it is e
8470: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
8480: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
8490: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
84a0: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
84b0: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
84c0: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
84d0: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
84e0: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
84f0: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
8500: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
8510: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
8520: 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20  TRING, out2 */. 
8530: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8540: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
8550: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8560: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d  (p, pOp);.  pOp-
8570: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
8580: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
8590: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
85a0: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
85b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
85c0: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
85d0: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
85e0: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
85f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8600: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
8610: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
8620: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
8630: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
8640: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
8650: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
8660: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8670: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8680: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8690: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
86a0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
86b0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
86c0: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
86d0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
86e0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
86f0: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
8700: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
8710: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
8720: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
8730: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
8740: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
8750: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
8760: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
8770: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
8780: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8790: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
87a0: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
87b0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
87c0: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
87d0: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
87e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28    }.#endif.  if(
87f0: 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69   pOp->p1>db->aLi
8800: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
8810: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
8820: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8830: 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  }.  /* Fall thro
8840: 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
8850: 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20  case, OP_String 
8860: 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64  */.}.  ./* Opcod
8870: 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20  e: String P1 P2 
8880: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
8890: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
88a0: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
88b0: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
88c0: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
88d0: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
88e0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
88f0: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  2..**.** If P5!=
8900: 30 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  0 and the conten
8910: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
8920: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
8930: 20 7a 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74   zero, then.** t
8940: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
8950: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
8960: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
8970: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
8980: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
8990: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
89a0: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
89b0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
89c0: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
89d0: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
89e0: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
89f0: 20 43 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f   CAST..*/.case O
8a00: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8a10: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8a20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8a30: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8a40: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8a50: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8a60: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
8a70: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
8a80: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8a90: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
8aa0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
8ab0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
8ac0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8ad0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8ae0: 45 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 70  E(pOut);.  if( p
8af0: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61 73  Op->p5 ){.    as
8b00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
8b10: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
8b20: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
8b30: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
8b40: 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
8b50: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61  [pOp->p3];.    a
8b60: 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
8b70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
8b80: 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
8b90: 69 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  i ) pOut->flags 
8ba0: 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53  = MEM_Blob|MEM_S
8bb0: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
8bc0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
8bd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
8be0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
8bf0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e  Synopsis:  r[P2.
8c00: 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  .P3]=NULL.**.** 
8c10: 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74  Write a NULL int
8c20: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20  o registers P2. 
8c30: 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74   If P3 greater t
8c40: 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73  han P2, then als
8c50: 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20  o write.** NULL 
8c60: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
8c70: 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73   and every regis
8c80: 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50  ter in between P
8c90: 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33  2 and P3.  If P3
8ca0: 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
8cb0: 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50   P2 (typically P
8cc0: 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20  3 is zero) then 
8cd0: 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32  only register P2
8ce0: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55   is.** set to NU
8cf0: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LL..**.** If the
8d00: 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P1 value is non
8d10: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f  -zero, then also
8d20: 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65   set the MEM_Cle
8d30: 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61  ared flag so tha
8d40: 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73  t.** NULL values
8d50: 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72   will not compar
8d60: 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20  e equal even if 
8d70: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
8d80: 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65   set on.** OP_Ne
8d90: 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61   or OP_Eq..*/.ca
8da0: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
8db0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
8dc0: 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20  */.  int cnt;.  
8dd0: 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  u16 nullFlag;.  
8de0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8df0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8e00: 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70   cnt = pOp->p3-p
8e10: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
8e20: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
8e30: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
8e40: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8e50: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
8e60: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
8e70: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
8e80: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69   MEM_Null;.  whi
8e90: 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20  le( cnt>0 ){.   
8ea0: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d   pOut++;.    mem
8eb0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
8ec0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
8ed0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
8ee0: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75  l(pOut);.    pOu
8ef0: 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46  t->flags = nullF
8f00: 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a  lag;.    cnt--;.
8f10: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
8f20: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e  /* Opcode: SoftN
8f30: 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ull P1 * * * *.*
8f40: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
8f50: 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65  1]=NULL.**.** Se
8f60: 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  t register P1 to
8f70: 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65 20   have the value 
8f80: 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20  NULL as seen by 
8f90: 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
8fa0: 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  d.** instruction
8fb0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65  , but do not fre
8fc0: 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  e any string or 
8fd0: 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f  blob memory asso
8fe0: 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74  ciated with.** t
8ff0: 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20  he register, so 
9000: 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c 75  that if the valu
9010: 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f  e was a string o
9020: 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a  r blob that was.
9030: 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f  ** previously co
9040: 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43  pied using OP_SC
9050: 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20  opy, the copies 
9060: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f  will continue to
9070: 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61   be valid..*/.ca
9080: 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20  se OP_SoftNull: 
9090: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
90a0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
90b0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
90c0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
90d0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
90e0: 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ];.  pOut->flags
90f0: 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c   = (pOut->flags|
9100: 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55  MEM_Null)&~MEM_U
9110: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
9120: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9130: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
9140: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9150: 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31  r[P2]=P4 (len=P1
9160: 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  ).**.** P4 point
9170: 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64  s to a blob of d
9180: 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e  ata P1 bytes lon
9190: 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a  g.  Store this.*
91a0: 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  * blob in regist
91b0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
91c0: 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20  P_Blob: {       
91d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
91e0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
91f0: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
9200: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
9210: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
9220: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
9230: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9240: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
9250: 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20  >p4.z, pOp->p1, 
9260: 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  0, 0);.  pOut->e
9270: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
9280: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9290: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
92a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
92b0: 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50  e: Variable P1 P
92c0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
92d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61  psis: r[P2]=para
92e0: 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a  meter(P1,P4).**.
92f0: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
9300: 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20  values of bound 
9310: 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74  parameter P1 int
9320: 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  o register P2.**
9330: 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d  .** If the param
9340: 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74  eter is named, t
9350: 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70  hen its name app
9360: 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54  ears in P4..** T
9370: 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75  he P4 value is u
9380: 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62  sed by sqlite3_b
9390: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
93a0: 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  me()..*/.case OP
93b0: 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20  _Variable: {    
93c0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
93d0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20  */.  Mem *pVar; 
93e0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62        /* Value b
93f0: 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64  eing transferred
9400: 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
9410: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
9420: 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  >p1<=p->nVar );.
9430: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9440: 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  4.z==0 || pOp->p
9450: 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f  4.z==p->azVar[pO
9460: 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56  p->p1-1] );.  pV
9470: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f  ar = &p->aVar[pO
9480: 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66  p->p1 - 1];.  if
9490: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
94a0: 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a  TooBig(pVar) ){.
94b0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
94c0: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 6f  ;.  }.  pOut = o
94d0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
94e0: 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33   pOp);.  sqlite3
94f0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9500: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
9510: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
9520: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
9530: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
9540: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9550: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
9560: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
9570: 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33  r[P2@P3]=r[P1@P3
9580: 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  ].**.** Move the
9590: 20 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65   P3 values in re
95a0: 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33  gister P1..P1+P3
95b0: 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20  -1 over into.** 
95c0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
95d0: 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72  +P3-1.  Register
95e0: 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72  s P1..P1+P3-1 ar
95f0: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
9600: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
9610: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
9620: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
9630: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64   P1..P1+P3-1 and
9640: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20   P2..P2+P3-1 to 
9650: 6f 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20  overlap.  It is 
9660: 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20  an error.** for 
9670: 50 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  P3 to be less th
9680: 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  an 1..*/.case OP
9690: 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  _Move: {.  int n
96a0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
96b0: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
96c0: 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20  rs left to copy 
96d0: 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
96e0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
96f0: 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  r to copy from *
9700: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
9710: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
9720: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a   to copy to */..
9730: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9740: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
9750: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
9760: 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20   assert( n>0 && 
9770: 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a  p1>0 && p2>0 );.
9780: 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d    assert( p1+n<=
9790: 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29  p2 || p2+n<=p1 )
97a0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
97b0: 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  m[p1];.  pOut = 
97c0: 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b  &aMem[p2];.  do{
97d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
97e0: 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  t<=&aMem[(p->nMe
97f0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
9800: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
9810: 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  n1<=&aMem[(p->nM
9820: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20  em-p->nCursor)] 
9830: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
9840: 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
9850: 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  );.    memAboutT
9860: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
9870: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9880: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70  eMemMove(pOut, p
9890: 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  In1);.#ifdef SQL
98a0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
98b0: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
98c0: 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26  om>=&aMem[p1] &&
98d0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
98e0: 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20  m<pOut ){.      
98f0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9900: 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31   += pOp->p2 - p1
9910: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
9920: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
9930: 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47  e(pOut);.    REG
9940: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
9950: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
9960: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
9970: 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29  .  }while( --n )
9980: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9990: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
99a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
99b0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b  nopsis: r[P2@P3+
99c0: 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a  1]=r[P1@P3+1].**
99d0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20  .** Make a copy 
99e0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e  of registers P1.
99f0: 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69  .P1+P3 into regi
9a00: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e  sters P2..P2+P3.
9a10: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
9a20: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
9a30: 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65  deep copy of the
9a40: 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69   value.  A dupli
9a50: 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20  cate.** is made 
9a60: 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  of any string or
9a70: 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20   blob constant. 
9a80: 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f   See also OP_SCo
9a90: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  py..*/.case OP_C
9aa0: 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  opy: {.  int n;.
9ab0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
9ac0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9ad0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
9ae0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9af0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
9b00: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c  !=pIn1 );.  whil
9b10: 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  e( 1 ){.    sqli
9b20: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
9b30: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
9b40: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
9b50: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9b60: 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53  (pOut);.#ifdef S
9b70: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
9b80: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9b90: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20   = 0;.#endif.   
9ba0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9bb0: 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d  pOp->p2+pOp->p3-
9bc0: 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66  n, pOut);.    if
9bd0: 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65  ( (n--)==0 ) bre
9be0: 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ak;.    pOut++;.
9bf0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
9c00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9c10: 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20  pcode: SCopy P1 
9c20: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
9c30: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
9c40: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73  ].**.** Make a s
9c50: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72  hallow copy of r
9c60: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
9c70: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
9c80: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
9c90: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c  ion makes a shal
9ca0: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20  low copy of the 
9cb0: 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76  value.  If the v
9cc0: 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72  alue.** is a str
9cd0: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
9ce0: 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e  n the copy is on
9cf0: 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ly a pointer to 
9d00: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
9d10: 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65  and hence if the
9d20: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
9d30: 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f  s so will the co
9d40: 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66  py..** Worse, if
9d50: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73   the original is
9d60: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68   deallocated, th
9d70: 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69  e copy becomes i
9d80: 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20  nvalid..** Thus 
9d90: 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  the program must
9da0: 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
9db0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c  the original wil
9dc0: 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20  l not change.** 
9dd0: 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74  during the lifet
9de0: 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e  ime of the copy.
9df0: 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f    Use OP_Copy to
9e00: 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65   make a complete
9e10: 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73  .** copy..*/.cas
9e20: 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20  e OP_SCopy: {   
9e30: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9e40: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
9e50: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9e60: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9e70: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
9e80: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
9e90: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
9ea0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9eb0: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
9ec0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9ed0: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74  DEBUG.  if( pOut
9ee0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20  ->pScopyFrom==0 
9ef0: 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ) pOut->pScopyFr
9f00: 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69  om = pIn1;.#endi
9f10: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
9f20: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79   Opcode: IntCopy
9f30: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
9f40: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9f50: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  r[P1].**.** Tran
9f60: 73 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72  sfer the integer
9f70: 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72   value held in r
9f80: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
9f90: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
9fa0: 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  ** This is an op
9fb0: 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20  timized version 
9fc0: 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f  of SCopy that wo
9fd0: 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74  rks only for int
9fe0: 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a  eger.** values..
9ff0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f  */.case OP_IntCo
a000: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
a010: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
a020: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
a030: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
a040: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
a050: 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70  M_Int)!=0 );.  p
a060: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a070: 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
a080: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
a090: 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b  Out, pIn1->u.i);
a0a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a0b0: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
a0c0: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
a0d0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70   Synopsis:  outp
a0e0: 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a  ut=r[P1@P2].**.*
a0f0: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
a100: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
a110: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
a120: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
a130: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
a140: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
a150: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
a160: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
a170: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
a180: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
a190: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
a1a0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
a1b0: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
a1c0: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
a1d0: 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28  to the r(P1)..r(
a1e0: 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20  P1+P2-1) values 
a1f0: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
a200: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
a210: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
a220: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
a230: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
a240: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
a250: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
a260: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
a270: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a280: 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d  +pOp->p2<=(p->nM
a290: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
a2a0: 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   );..#ifndef SQL
a2b0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
a2c0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20  S_CALLBACK.  /* 
a2d0: 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73  Run the progress
a2e0: 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65   counter just be
a2f0: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a  fore returning..
a300: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
a310: 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26  Progress!=0.   &
a320: 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67  & nVmStep>=nProg
a330: 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20  ressLimit.   && 
a340: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
a350: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21  ->pProgressArg)!
a360: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d  =0.  ){.    rc =
a370: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
a380: 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65  T;.    goto vdbe
a390: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d  _error_halt;.  }
a3a0: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
a3b0: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20   this statement 
a3c0: 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d  has violated imm
a3d0: 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
a3e0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
a3f0: 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75  do.  ** not retu
a400: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
a410: 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20   rows modified. 
a420: 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41  And do not RELEA
a430: 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  SE the statement
a440: 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
a450: 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62  n. It needs to b
a460: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
a470: 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  */.  if( SQLITE_
a480: 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65  OK!=(rc = sqlite
a490: 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
a4a0: 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  0)) ){.    asser
a4b0: 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  t( db->flags&SQL
a4c0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
a4d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e  .    assert( p->
a4e0: 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
a4f0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
a500: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
a510: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
a520: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
a530: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
a540: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
a550: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
a560: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
a570: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
a580: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
a590: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
a5a0: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
a5b0: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
a5c0: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
a5d0: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
a5e0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a5f0: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
a600: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
a610: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
a620: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
a630: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
a640: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a650: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
a660: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
a670: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
a680: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
a690: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
a6a0: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
a6b0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a6c0: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
a6d0: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
a6e0: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
a6f0: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
a700: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
a710: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
a720: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
a730: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
a740: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
a750: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
a760: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a770: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
a780: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
a790: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
a7a0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
a7b0: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
a7c0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a7d0: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
a7e0: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
a7f0: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
a800: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
a810: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
a820: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
a830: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
a840: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
a850: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
a860: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
a870: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
a880: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
a890: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
a8a0: 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
a8b0: 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20  SQLITE_OK) ){.  
a8c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
a8d0: 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
a8e0: 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  l ephemeral curs
a8f0: 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f  or row caches */
a900: 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d  .  p->cacheCtr =
a910: 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20   (p->cacheCtr + 
a920: 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  2)|1;..  /* Make
a930: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
a940: 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
a950: 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65   row are \000 te
a960: 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e  rminated.  ** an
a970: 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e  d have an assign
a980: 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65  ed type.  The re
a990: 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68  sults are de-eph
a9a0: 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20  emeralized as.  
a9b0: 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74  ** a side effect
a9c0: 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20  ..  */.  pMem = 
a9d0: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
a9e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a9f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70    for(i=0; i<pOp
aa00: 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ->p2; i++){.    
aa10: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
aa20: 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a  id(&pMem[i]) );.
aa30: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
aa40: 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  ze(&pMem[i]);.  
aa50: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b    assert( (pMem[
aa60: 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45  i].flags & MEM_E
aa70: 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20  phem)==0.       
aa80: 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d       || (pMem[i]
aa90: 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  .flags & (MEM_St
aaa0: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
aab0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
aac0: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
aad0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
aae0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
aaf0: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
ab00: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
ab10: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
ab20: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
ab30: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c  .  /* Return SQL
ab40: 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70  ITE_ROW.  */.  p
ab50: 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
ab60: 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72   - aOp) + 1;.  r
ab70: 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a  c = SQLITE_ROW;.
ab80: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
ab90: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
aba0: 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50  : Concat P1 P2 P
abb0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
abc0: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72  s: r[P3]=r[P2]+r
abd0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74  [P1].**.** Add t
abe0: 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73  he text in regis
abf0: 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20  ter P1 onto the 
ac00: 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20  end of the text 
ac10: 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
ac20: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
ac30: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ac40: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
ac50: 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32  her the P1 or P2
ac60: 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74   text are NULL t
ac70: 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69  hen store NULL i
ac80: 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33  n P3..**.**   P3
ac90: 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a   = P2 || P1.**.*
aca0: 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
acb0: 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f  for P1 and P3 to
acc0: 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67   be the same reg
acd0: 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73  ister. Sometimes
ace0: 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68  ,.** if P3 is th
acf0: 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20  e same register 
ad00: 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65  as P2, the imple
ad10: 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c  mentation is abl
ad20: 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20  e.** to avoid a 
ad30: 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73  memcpy()..*/.cas
ad40: 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20  e OP_Concat: {  
ad50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ad60: 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69   as TK_CONCAT, i
ad70: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ad80: 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20  .  i64 nByte;.. 
ad90: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
ada0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
adb0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
adc0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
add0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
ade0: 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29  rt( pIn1!=pOut )
adf0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
ae00: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
ae10: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
ae20: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
ae30: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
ae40: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
ae50: 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c  }.  if( ExpandBl
ae60: 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61  ob(pIn1) || Expa
ae70: 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67  ndBlob(pIn2) ) g
ae80: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74  oto no_mem;.  St
ae90: 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e  ringify(pIn1, en
aea0: 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e  coding);.  Strin
aeb0: 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64  gify(pIn2, encod
aec0: 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20  ing);.  nByte = 
aed0: 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e  pIn1->n + pIn2->
aee0: 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  n;.  if( nByte>d
aef0: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
af00: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
af10: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
af20: 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  ig;.  }.  if( sq
af30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
af40: 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
af50: 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29  e+2, pOut==pIn2)
af60: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
af70: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65  mem;.  }.  MemSe
af80: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
af90: 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20  MEM_Str);.  if( 
afa0: 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20  pOut!=pIn2 ){.  
afb0: 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a    memcpy(pOut->z
afc0: 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d  , pIn2->z, pIn2-
afd0: 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70  >n);.  }.  memcp
afe0: 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d  y(&pOut->z[pIn2-
aff0: 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49  >n], pIn1->z, pI
b000: 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e  n1->n);.  pOut->
b010: 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f  z[nByte]=0;.  pO
b020: 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d  ut->z[nByte+1] =
b030: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   0;.  pOut->flag
b040: 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20  s |= MEM_Term;. 
b050: 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
b060: 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65  nByte;.  pOut->e
b070: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
b080: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
b090: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
b0a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b0b0: 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20  e: Add P1 P2 P3 
b0c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b0d0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b    r[P3]=r[P1]+r[
b0e0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P2].**.** Add th
b0f0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b100: 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  ter P1 to the va
b110: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b120: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b130: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b140: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b150: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b160: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b170: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b180: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
b190: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
b1a0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
b1b0: 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a  3]=r[P1]*r[P2].*
b1c0: 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79  *.**.** Multiply
b1d0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b1e0: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
b1f0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b200: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b210: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b220: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b230: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b240: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b250: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b260: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74  ./* Opcode: Subt
b270: 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20  ract P1 P2 P3 * 
b280: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
b290: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31  r[P3]=r[P2]-r[P1
b2a0: 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74  ].**.** Subtract
b2b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b2c0: 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74  gister P1 from t
b2d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b2e0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b2f0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b300: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b310: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b320: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b330: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b340: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69  */./* Opcode: Di
b350: 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  vide P1 P2 P3 * 
b360: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
b370: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31  r[P3]=r[P2]/r[P1
b380: 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74  ].**.** Divide t
b390: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b3a0: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
b3b0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b3c0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b3d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b3e0: 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50  egister P3 (P3=P
b3f0: 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61  2/P1). If the va
b400: 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73  lue in .** regis
b410: 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20  ter P1 is zero, 
b420: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
b430: 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68  is NULL. If eith
b440: 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20  er input is .** 
b450: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b460: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b470: 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65  Opcode: Remainde
b480: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
b490: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
b4a0: 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a  3]=r[P2]%r[P1].*
b4b0: 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65  *.** Compute the
b4c0: 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72   remainder after
b4d0: 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 65   integer registe
b4e0: 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64 20  r P2 is divided 
b4f0: 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  by .** register 
b500: 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P1 and store the
b510: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b520: 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74  ter P3. .** If t
b530: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b540: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20  ster P1 is zero 
b550: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b560: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
b570: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
b580: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b590: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b5a0: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20  _Add:           
b5b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b5c0: 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c  as TK_PLUS, in1,
b5d0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b5e0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b600: 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53  same as TK_MINUS
b610: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b620: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
b630: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
b640: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b650: 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  _STAR, in1, in2,
b660: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b670: 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20  _Divide:        
b680: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b690: 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31  as TK_SLASH, in1
b6a0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b6b0: 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72  ase OP_Remainder
b6c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
b6d0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c   same as TK_REM,
b6e0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b6f0: 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e  */.  char bIntin
b700: 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20  t;   /* Started 
b710: 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67  out as two integ
b720: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20  er operands */. 
b730: 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20   u16 flags;     
b740: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
b750: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
b760: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75  th inputs */.  u
b770: 31 36 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f  16 type1;      /
b780: 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  * Numeric type o
b790: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
b7a0: 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20 20  /.  u16 type2;  
b7b0: 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74      /* Numeric t
b7c0: 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  ype of right ope
b7d0: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41  rand */.  i64 iA
b7e0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
b7f0: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
b800: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b810: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
b820: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
b830: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
b840: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
b850: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
b860: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
b870: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
b880: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
b890: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
b8a0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
b8b0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
b8c0: 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20  >p1];.  type1 = 
b8d0: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31  numericType(pIn1
b8e0: 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
b8f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79  m[pOp->p2];.  ty
b900: 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70  pe2 = numericTyp
b910: 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20  e(pIn2);.  pOut 
b920: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
b930: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
b940: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
b950: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
b960: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
b970: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b980: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b990: 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65  ull;.  if( (type
b9a0: 31 20 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f  1 & type2 & MEM_
b9b0: 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  Int)!=0 ){.    i
b9c0: 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  A = pIn1->u.i;. 
b9d0: 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e     iB = pIn2->u.
b9e0: 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  i;.    bIntint =
b9f0: 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20   1;.    switch( 
ba00: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
ba10: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
ba20: 3a 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  :       if( sqli
ba30: 74 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c  te3AddInt64(&iB,
ba40: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
ba50: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
ba60: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
ba70: 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ct:  if( sqlite3
ba80: 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29  SubInt64(&iB,iA)
ba90: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
baa0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bab0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
bac0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c    if( sqlite3Mul
bad0: 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20  Int64(&iB,iA) ) 
bae0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62  goto fp_math;  b
baf0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bb00: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
bb10: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
bb20: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
bb30: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bb40: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
bb50: 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c  ==-1 && iB==SMAL
bb60: 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74  LEST_INT64 ) got
bb70: 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20  o fp_math;.     
bb80: 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20     iB /= iA;.   
bb90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bba0: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
bbb0: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  t: {.        if(
bbc0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
bbd0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bbe0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
bbf0: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
bc00: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42   = 1;.        iB
bc10: 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   %= iA;.        
bc20: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
bc30: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
bc40: 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d  .i = iB;.    Mem
bc50: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
bc60: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  , MEM_Int);.  }e
bc70: 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74  lse{.    bIntint
bc80: 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20   = 0;.fp_math:. 
bc90: 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56     rA = sqlite3V
bca0: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
bcb0: 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c  1);.    rB = sql
bcc0: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
bcd0: 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69  e(pIn2);.    swi
bce0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
bcf0: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
bd00: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72  P_Add:         r
bd10: 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B += rA;       b
bd20: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bd30: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
bd40: 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20   rB -= rA;      
bd50: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bd60: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
bd70: 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20     rB *= rA;    
bd80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bd90: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
bda0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f  {.        /* (do
bdb0: 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f  uble)0 In case o
bdc0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
bdd0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20  OATING_POINT... 
bde0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  */.        if( r
bdf0: 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67  A==(double)0 ) g
be00: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
be10: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
be20: 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b         rB /= rA;
be30: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
be40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
be50: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
be60: 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20   iA = (i64)rA;. 
be70: 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34         iB = (i64
be80: 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )rB;.        if(
be90: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
bea0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
beb0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
bec0: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
bed0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42   = 1;.        rB
bee0: 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25   = (double)(iB %
bef0: 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72   iA);.        br
bf00: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bf10: 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
bf20: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
bf30: 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75  OINT.    pOut->u
bf40: 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  .i = rB;.    Mem
bf50: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
bf60: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73  , MEM_Int);.#els
bf70: 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  e.    if( sqlite
bf80: 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20  3IsNaN(rB) ){.  
bf90: 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65      goto arithme
bfa0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
bfb0: 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  ll;.    }.    pO
bfc0: 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20  ut->u.r = rB;.  
bfd0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
bfe0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
bff0: 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79 70 65  ;.    if( ((type
c000: 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61  1|type2)&MEM_Rea
c010: 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e  l)==0 && !bIntin
c020: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
c030: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
c040: 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20  inity(pOut);.   
c050: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
c060: 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74  break;..arithmet
c070: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c080: 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  l:.  sqlite3Vdbe
c090: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
c0a0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c0b0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71   Opcode: CollSeq
c0c0: 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a   P1 * * P4.**.**
c0d0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
c0e0: 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74   to a CollSeq st
c0f0: 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78  ruct. If the nex
c100: 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72  t call to a user
c110: 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20   function.** or 
c120: 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20  aggregate calls 
c130: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
c140: 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f  llSeq(), this co
c150: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c160: 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75   will.** be retu
c170: 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73  rned. This is us
c180: 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d  ed by the built-
c190: 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20  in min(), max() 
c1a0: 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20  and nullif().** 
c1b0: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
c1c0: 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65   If P1 is not ze
c1d0: 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ro, then it is a
c1e0: 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 61   register that a
c1f0: 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28   subsequent min(
c200: 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67  ) or.** max() ag
c210: 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74  gregate will set
c220: 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75 72   to 1 if the cur
c230: 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20  rent row is not 
c240: 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a  the minimum or.*
c250: 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20  * maximum.  The 
c260: 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20 69  P1 register is i
c270: 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20  nitialized to 0 
c280: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
c290: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  ion..**.** The i
c2a0: 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79  nterface used by
c2b0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
c2c0: 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65  ion of the afore
c2d0: 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69  mentioned functi
c2e0: 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65  ons.** to retrie
c2f0: 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  ve the collation
c300: 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
c310: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
c320: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  not available.**
c330: 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79   publicly.  Only
c340: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
c350: 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73 73 20  ons have access 
c360: 74 6f 20 74 68 69 73 20 66 65 61 74 75 72 65 2e  to this feature.
c370: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c  .*/.case OP_Coll
c380: 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  Seq: {.  assert(
c390: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
c3a0: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66  _COLLSEQ );.  if
c3b0: 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
c3c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c3d0: 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
c3e0: 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a  p->p1], 0);.  }.
c3f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c400: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 30  pcode: Function0
c410: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
c420: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
c430: 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d  3]=func(r[P2@P5]
c440: 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  ).**.** Invoke a
c450: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
c460: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
c470: 74 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a  to a FuncDef obj
c480: 65 63 74 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  ect that.** defi
c490: 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  nes the function
c4a0: 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65  ) with P5 argume
c4b0: 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  nts taken from r
c4c0: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a  egister P2 and.*
c4d0: 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54  * successors.  T
c4e0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
c4f0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f   function is sto
c500: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
c510: 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  P3..** Register 
c520: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
c530: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
c540: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
c550: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
c560: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
c570: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
c580: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
c590: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
c5a0: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
c5b0: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
c5c0: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
c5d0: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
c5e0: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
c5f0: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
c600: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
c610: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
c620: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
c630: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
c640: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
c650: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c660: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
c670: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
c680: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
c690: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
c6a0: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
c6b0: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
c6c0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
c6d0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
c6e0: 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c 20 41  lso: Function, A
c6f0: 67 67 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c  ggStep, AggFinal
c700: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .*/./* Opcode: F
c710: 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  unction P1 P2 P3
c720: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
c730: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
c740: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
c750: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
c760: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
c770: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
c780: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
c790: 65 63 74 20 74 68 61 74 0a 2a 2a 20 63 6f 6e 74  ect that.** cont
c7a0: 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ains a pointer t
c7b0: 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  o the function t
c7c0: 6f 20 62 65 20 72 75 6e 29 20 77 69 74 68 20 50  o be run) with P
c7d0: 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65  5 arguments take
c7e0: 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65 67 69 73 74  n.** from regist
c7f0: 65 72 20 50 32 20 61 6e 64 20 73 75 63 63 65 73  er P2 and succes
c800: 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c  sors.  The resul
c810: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
c820: 6e 20 69 73 20 73 74 6f 72 65 64 0a 2a 2a 20 69  n is stored.** i
c830: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
c840: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
c850: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
c860: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
c870: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
c880: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
c890: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
c8a0: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
c8b0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
c8c0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
c8d0: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
c8e0: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
c8f0: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
c900: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
c910: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
c920: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
c930: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
c940: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
c950: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
c960: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
c970: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
c980: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
c990: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
c9a0: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
c9b0: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
c9c0: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
c9d0: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
c9e0: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
c9f0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
ca00: 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  .** SQL function
ca10: 73 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  s are initially 
ca20: 63 6f 64 65 64 20 61 73 20 4f 50 5f 46 75 6e 63  coded as OP_Func
ca30: 74 69 6f 6e 30 20 77 69 74 68 20 50 34 20 70 6f  tion0 with P4 po
ca40: 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 20 61 20 46  inting.** to a F
ca50: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 2e 20 20  uncDef object.  
ca60: 42 75 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61  But on first eva
ca70: 6c 75 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20  luation, the P4 
ca80: 6f 70 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75  operand is.** au
ca90: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76  tomatically conv
caa0: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71  erted into an sq
cab0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62  lite3_context ob
cac0: 6a 65 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65  ject and the ope
cad0: 72 61 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65  ration.** change
cae0: 64 20 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e  d to this OP_Fun
caf0: 63 74 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49  ction opcode.  I
cb00: 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20  n this way, the 
cb10: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f  initialization o
cb20: 66 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33  f.** the sqlite3
cb30: 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
cb40: 6f 63 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65  occurs only once
cb50: 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e  , rather than on
cb60: 63 65 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65  ce for each.** e
cb70: 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
cb80: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
cb90: 20 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74   See also: Funct
cba0: 69 6f 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41  ion0, AggStep, A
cbb0: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
cbc0: 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a  OP_Function0: {.
cbd0: 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74    int n;.  sqlit
cbe0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
cbf0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
cc00: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
cc10: 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f  CDEF );.  n = pO
cc20: 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
cc30: 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
cc40: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
cc50: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
cc60: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
cc70: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
cc80: 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
cc90: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
cca0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
ccb0: 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
ccc0: 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
ccd0: 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d  p2+n );.  pCtx =
cce0: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
ccf0: 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a  Raw(db, sizeof(*
cd00: 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69  pCtx) + (n-1)*si
cd10: 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c  zeof(sqlite3_val
cd20: 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74  ue*));.  if( pCt
cd30: 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
cd40: 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74  em;.  pCtx->pOut
cd50: 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46   = 0;.  pCtx->pF
cd60: 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
cd70: 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70  unc;.  pCtx->iOp
cd80: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
cd90: 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64  Op);.  pCtx->pVd
cda0: 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e  be = p;.  pCtx->
cdb0: 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d  argc = n;.  pOp-
cdc0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e  >p4type = P4_FUN
cdd0: 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e  CCTX;.  pOp->p4.
cde0: 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70  pCtx = pCtx;.  p
cdf0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
ce00: 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46  Function;.  /* F
ce10: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
ce20: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a   OP_Function */.
ce30: 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  }.case OP_Functi
ce40: 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  on: {.  int i;. 
ce50: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
ce60: 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72   *pCtx;..  asser
ce70: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
ce80: 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20  P4_FUNCCTX );.  
ce90: 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pCtx = pOp->p4.p
cea0: 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  Ctx;..  /* If th
ceb0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  is function is i
cec0: 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67  nside of a trigg
ced0: 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72  er, the register
cee0: 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d   array in aMem[]
cef0: 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e  .  ** might chan
cf00: 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c  ge from one eval
cf10: 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65  uation to the ne
cf20: 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c  xt.  The next bl
cf30: 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a  ock of code.  **
cf40: 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
cf50: 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  f the register a
cf60: 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64  rray has changed
cf70: 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20  , and if so it. 
cf80: 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65   ** reinitialize
cf90: 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70  s the relavant p
cfa0: 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  arts of the sqli
cfb0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
cfc0: 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26  ct */.  pOut = &
cfd0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
cfe0: 20 69 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20   if( pCtx->pOut 
cff0: 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70  != pOut ){.    p
d000: 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74  Ctx->pOut = pOut
d010: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78  ;.    for(i=pCtx
d020: 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20  ->argc-1; i>=0; 
d030: 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b  i--) pCtx->argv[
d040: 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  i] = &aMem[pOp->
d050: 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65  p2+i];.  }..  me
d060: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
d070: 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23  , pCtx->pOut);.#
d080: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
d090: 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  UG.  for(i=0; i<
d0a0: 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29  pCtx->argc; i++)
d0b0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
d0c0: 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61  mIsValid(pCtx->a
d0d0: 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52  rgv[i]) );.    R
d0e0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d0f0: 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61  p->p2+i, pCtx->a
d100: 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e  rgv[i]);.  }.#en
d110: 64 69 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  dif.  MemSetType
d120: 46 6c 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c  Flag(pCtx->pOut,
d130: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43   MEM_Null);.  pC
d140: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
d150: 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52  = 0;.  db->lastR
d160: 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
d170: 3b 0a 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e  ;.  (*pCtx->pFun
d180: 63 2d 3e 78 46 75 6e 63 29 28 70 43 74 78 2c 20  c->xFunc)(pCtx, 
d190: 70 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78  pCtx->argc, pCtx
d1a0: 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a  ->argv); /* IMP:
d1b0: 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
d1c0: 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  /.  lastRowid = 
d1d0: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20  db->lastRowid;  
d1e0: 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69  /* Remember rowi
d1f0: 64 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  d changes made b
d200: 79 20 78 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a  y xFunc */..  /*
d210: 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   If the function
d220: 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72   returned an err
d230: 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  or, throw an exc
d240: 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20  eption */.  if( 
d250: 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75  pCtx->fErrorOrAu
d260: 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74  x ){.    if( pCt
d270: 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  x->isError ){.  
d280: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
d290: 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
d2a0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
d2b0: 28 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20  (pCtx->pOut));. 
d2c0: 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e       rc = pCtx->
d2d0: 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  isError;.    }. 
d2e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65     sqlite3VdbeDe
d2f0: 6c 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70  leteAuxData(p, p
d300: 43 74 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70  Ctx->iOp, pOp->p
d310: 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  1);.  }..  /* Co
d320: 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
d330: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
d340: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  to register P3 *
d350: 2f 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c  /.  if( pOut->fl
d360: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
d370: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
d380: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
d390: 65 45 6e 63 6f 64 69 6e 67 28 70 43 74 78 2d 3e  eEncoding(pCtx->
d3a0: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
d3b0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
d3c0: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 43  VdbeMemTooBig(pC
d3d0: 74 78 2d 3e 70 4f 75 74 29 20 29 20 67 6f 74 6f  tx->pOut) ) goto
d3e0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
d3f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
d400: 70 4f 70 2d 3e 70 33 2c 20 70 43 74 78 2d 3e 70  pOp->p3, pCtx->p
d410: 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
d420: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 43 74 78  AX_BLOBSIZE(pCtx
d430: 2d 3e 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  ->pOut);.  break
d440: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d450: 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20  BitAnd P1 P2 P3 
d460: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d470: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b    r[P3]=r[P1]&r[
d480: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d490: 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20  he bit-wise AND 
d4a0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
d4b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
d4c0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
d4d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
d4e0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
d4f0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
d500: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
d510: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
d520: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20  * Opcode: BitOr 
d530: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d540: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d550: 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]|r[P2].**.
d560: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
d570: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
d580: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d590: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
d5a0: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
d5b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d5c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d5d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d5e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d5f0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
d600: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
d610: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
d620: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
d630: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
d640: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
d650: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
d660: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
d670: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
d680: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
d690: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
d6a0: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
d6b0: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
d6c0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
d6d0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
d6e0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
d6f0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
d700: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
d710: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
d720: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
d730: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
d740: 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a  3]=r[P2]>>r[P1].
d750: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
d760: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
d770: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
d780: 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65  the right by the
d790: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
d7a0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
d7b0: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
d7c0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
d7d0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d7e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d7f0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d800: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d810: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d820: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e  */.case OP_BitAn
d830: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
d840: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d850: 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e  _BITAND, in1, in
d860: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
d870: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
d880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d890: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20  me as TK_BITOR, 
d8a0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
d8b0: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c  /.case OP_ShiftL
d8c0: 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  eft:            
d8d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d8e0: 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  LSHIFT, in1, in2
d8f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
d900: 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20  P_ShiftRight: { 
d910: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d920: 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20  e as TK_RSHIFT, 
d930: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
d940: 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36  /.  i64 iA;.  u6
d950: 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a  4 uA;.  i64 iB;.
d960: 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31    u8 op;..  pIn1
d970: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d980: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
d990: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
d9a0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
d9b0: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p3];.  if( (pIn1
d9c0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
d9d0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
d9e0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
d9f0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
da00: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
da10: 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69  .  }.  iA = sqli
da20: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
da30: 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71  pIn2);.  iB = sq
da40: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
da50: 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20  e(pIn1);.  op = 
da60: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69  pOp->opcode;.  i
da70: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64  f( op==OP_BitAnd
da80: 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42   ){.    iA &= iB
da90: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70  ;.  }else if( op
daa0: 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20  ==OP_BitOr ){.  
dab0: 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65    iA |= iB;.  }e
dac0: 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b  lse if( iB!=0 ){
dad0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d  .    assert( op=
dae0: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c  =OP_ShiftRight |
daf0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
db00: 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  ft );..    /* If
db10: 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e   shifting by a n
db20: 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20  egative amount, 
db30: 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68  shift in the oth
db40: 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a  er direction */.
db50: 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a      if( iB<0 ){.
db60: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
db70: 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f  _ShiftRight==OP_
db80: 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20  ShiftLeft+1 );. 
db90: 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53       op = 2*OP_S
dba0: 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f  hiftLeft + 1 - o
dbb0: 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42  p;.      iB = iB
dbc0: 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36  >(-64) ? -iB : 6
dbd0: 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  4;.    }..    if
dbe0: 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20  ( iB>=64 ){.    
dbf0: 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c    iA = (iA>=0 ||
dc00: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
dc10: 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20  t) ? 0 : -1;.   
dc20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
dc30: 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73  mcpy(&uA, &iA, s
dc40: 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20  izeof(uA));.    
dc50: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69    if( op==OP_Shi
dc60: 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20  ftLeft ){.      
dc70: 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20    uA <<= iB;.   
dc80: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
dc90: 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20    uA >>= iB;.   
dca0: 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74       /* Sign-ext
dcb0: 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73  end on a right s
dcc0: 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69  hift of a negati
dcd0: 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  ve number */.   
dce0: 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20       if( iA<0 ) 
dcf0: 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78  uA |= ((((u64)0x
dd00: 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30  ffffffff)<<32)|0
dd10: 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36  xffffffff) << (6
dd20: 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20  4-iB);.      }. 
dd30: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c       memcpy(&iA,
dd40: 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29   &uA, sizeof(iA)
dd50: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  );.    }.  }.  p
dd60: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20  Out->u.i = iA;. 
dd70: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
dd80: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
dd90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
dda0: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
ddb0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
ddc0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72  nopsis:  r[P1]=r
ddd0: 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41  [P1]+P2.** .** A
dde0: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
ddf0: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
de00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
de10: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
de20: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
de30: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
de40: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
de50: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
de60: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
de70: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
de80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
de90: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
dea0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
deb0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
dec0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
ded0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
dee0: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
def0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
df00: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
df10: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
df20: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
df30: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
df40: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
df50: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
df60: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
df70: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
df80: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
df90: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
dfa0: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
dfb0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
dfc0: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
dfd0: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
dfe0: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
dff0: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
e000: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
e010: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
e020: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
e030: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
e040: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
e050: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
e060: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e070: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e080: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
e090: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
e0a0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
e0b0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
e0c0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56  encoding);.    V
e0d0: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28  dbeBranchTaken((
e0e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
e0f0: 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Int)==0, 2);.   
e100: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
e110: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
e120: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
e130: 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
e140: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
e150: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20  ISMATCH;.       
e160: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
e170: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
e180: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67  }else{.        g
e190: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
e1a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
e1b0: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
e1c0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
e1d0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
e1e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
e1f0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
e200: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
e210: 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a  lAffinity P1 * *
e220: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65   * *.**.** If re
e230: 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20  gister P1 holds 
e240: 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  an integer conve
e250: 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20  rt it to a real 
e260: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  value..**.** Thi
e270: 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
e280: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
e290: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
e2a0: 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a  m a column that.
e2b0: 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69  ** has REAL affi
e2c0: 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75  nity.  Such colu
e2d0: 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74  mn values may st
e2e0: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73  ill be stored as
e2f0: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f  .** integers, fo
e300: 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  r space efficien
e310: 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78  cy, but after ex
e320: 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74  traction we want
e330: 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65   them.** to have
e340: 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c   only a real val
e350: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ue..*/.case OP_R
e360: 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20  ealAffinity: {  
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
e390: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
e3a0: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
e3b0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
e3c0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
e3d0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
e3e0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e3f0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
e400: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
e410: 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61  ST./* Opcode: Ca
e420: 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
e430: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
e440: 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a  nity(r[P1]).**.*
e450: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
e460: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
e470: 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20   to be the type 
e480: 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a  defined by P2..*
e490: 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c  * .** <ul>.** <l
e4a0: 69 20 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45  i value="97"> TE
e4b0: 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  XT.** <li value=
e4c0: 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c  "98"> BLOB.** <l
e4d0: 69 20 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55  i value="99"> NU
e4e0: 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c  MERIC.** <li val
e4f0: 75 65 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45  ue="100"> INTEGE
e500: 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  R.** <li value="
e510: 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f  101"> REAL.** </
e520: 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ul>.**.** A NULL
e530: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
e540: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
e550: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
e560: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
e570: 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20   OP_Cast: {     
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e590: 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
e5a0: 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45   pOp->p2>=SQLITE
e5b0: 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70  _AFF_BLOB && pOp
e5c0: 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2<=SQLITE_AFF
e5d0: 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63  _REAL );.  testc
e5e0: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
e5f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b  LITE_AFF_TEXT );
e600: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
e610: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
e620: 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63  _BLOB );.  testc
e630: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
e640: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
e650: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
e660: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
e670: 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20  AFF_INTEGER );. 
e680: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
e690: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2==SQLITE_AFF_R
e6a0: 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  EAL );.  pIn1 = 
e6b0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e6c0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
e6d0: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72  ge(p, pIn1);.  r
e6e0: 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
e6f0: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
e700: 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c  dbeMemCast(pIn1,
e710: 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69   pOp->p2, encodi
e720: 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
e730: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
e740: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
e750: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
e760: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
e770: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
e780: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e790: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72  psis: if r[P1]<r
e7a0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e7b0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
e7c0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
e7d0: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
e7e0: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
e7f0: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
e800: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
e810: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
e820: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
e830: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
e840: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
e850: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
e860: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
e870: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
e880: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
e890: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
e8a0: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
e8b0: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
e8c0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e8d0: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
e8e0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
e8f0: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
e900: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
e910: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
e920: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
e930: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
e940: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
e950: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
e960: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
e970: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
e980: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
e990: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
e9a0: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
e9b0: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
e9c0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
e9d0: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
e9e0: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
e9f0: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
ea00: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
ea10: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
ea20: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
ea30: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
ea40: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
ea50: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
ea60: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
ea70: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
ea80: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
ea90: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
eaa0: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
eab0: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
eac0: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
ead0: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
eae0: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
eaf0: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
eb00: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
eb10: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
eb20: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
eb30: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
eb40: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
eb50: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
eb60: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
eb70: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
eb80: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
eb90: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
eba0: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
ebb0: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
ebc0: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
ebd0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
ebe0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
ebf0: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
ec00: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
ec10: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
ec20: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
ec30: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
ec40: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
ec50: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
ec60: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
ec70: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
ec80: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
ec90: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
eca0: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
ecb0: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
ecc0: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
ecd0: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
ece0: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
ecf0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
ed00: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
ed10: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
ed20: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
ed30: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
ed40: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
ed50: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
ed60: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
ed70: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
ed80: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ed90: 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20  E_NULLEQ bit is 
eda0: 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20  set in P5, then 
edb0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
edc0: 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71  considered.** eq
edd0: 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68  ual to one anoth
ede0: 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61  er, provided tha
edf0: 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61  t they do not ha
ee00: 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65  ve their MEM_Cle
ee10: 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e  ared.** bit set.
ee20: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
ee30: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
ee40: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ee50: 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f   r[P1]!=r[P3] go
ee60: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
ee70: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
ee80: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
ee90: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
eea0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
eeb0: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
eec0: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
eed0: 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65  and P3 are not e
eee0: 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c  qual.  See the L
eef0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20  t opcode for.** 
ef00: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
ef10: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
ef20: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
ef30: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
ef40: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
ef50: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
ef60: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
ef70: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
ef80: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
ef90: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
efa0: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
efb0: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
efc0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61  comparison is fa
efd0: 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  lse.  If either 
efe0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
eff0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f000: 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e  is true..** If n
f010: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f020: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
f030: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
f040: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
f050: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
f060: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
f070: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
f080: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71  */./* Opcode: Eq
f090: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f0a0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
f0b0: 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]==r[P3] got
f0c0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
f0d0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f0e0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f0f0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f100: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f110: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
f120: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
f130: 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e  nd P3 are equal.
f140: 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f  .** See the Lt o
f150: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
f160: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f170: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
f180: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
f190: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
f1a0: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
f1b0: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
f1c0: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
f1d0: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
f1e0: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
f1f0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
f200: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
f210: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
f220: 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49  ison is true.  I
f230: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
f240: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
f250: 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
f260: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
f270: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f280: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
f290: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
f2a0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
f2b0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
f2c0: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
f2d0: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
f2e0: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
f2f0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f300: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c  opsis: if r[P1]<
f310: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
f320: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f330: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
f340: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f350: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f360: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f370: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f380: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
f390: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
f3a0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
f3b0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
f3c0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
f3d0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
f3e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
f3f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
f400: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f410: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f420: 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50  P1]>r[P3] goto P
f430: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
f440: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f450: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
f460: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f470: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f480: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
f490: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
f4a0: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
f4b0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
f4c0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
f4d0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
f4e0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f4f0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
f500: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
f510: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f520: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72  sis: if r[P1]>=r
f530: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f540: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f550: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f560: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f570: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f580: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f590: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f5a0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
f5b0: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
f5c0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
f5d0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
f5e0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f5f0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f600: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f610: 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20  /.case OP_Eq:   
f620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f630: 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75  ame as TK_EQ, ju
f640: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f650: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20  case OP_Ne:     
f660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f670: 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70  e as TK_NE, jump
f680: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f690: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20  se OP_Lt:       
f6a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f6b0: 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20  as TK_LT, jump, 
f6c0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f6d0: 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20   OP_Le:         
f6e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f6f0: 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LE, jump, in
f700: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f710: 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20  P_Gt:           
f720: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f730: 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GT, jump, in1,
f740: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f750: 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Ge: {           
f760: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f770: 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GE, jump, in1, i
f780: 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  n3 */.  int res;
f790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
f7a0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d  esult of the com
f7b0: 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20  parison of pIn1 
f7c0: 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a  against pIn3 */.
f7d0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
f7e0: 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
f7f0: 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d  y to use for com
f800: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36  parison */.  u16
f810: 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20   flags1;        
f820: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
f830: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
f840: 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31  1->flags */.  u1
f850: 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20  6 flags3;       
f860: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
f870: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
f880: 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20  n3->flags */..  
f890: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
f8a0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
f8b0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
f8c0: 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d    flags1 = pIn1-
f8d0: 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33  >flags;.  flags3
f8e0: 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
f8f0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
f900: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c  flags3)&MEM_Null
f910: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f   ){.    /* One o
f920: 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  r both operands 
f930: 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  are NULL */.    
f940: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
f950: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20  LITE_NULLEQ ){. 
f960: 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54       /* If SQLIT
f970: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
f980: 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79  (which will only
f990: 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f   happen if the o
f9a0: 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20  perator is.     
f9b0: 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f   ** OP_Eq or OP_
f9c0: 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68  Ne) then take th
f9d0: 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65  e jump or not de
f9e0: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
f9f0: 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e  er.      ** or n
fa00: 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  ot both operands
fa10: 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20   are null..     
fa20: 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
fa30: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
fa40: 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Eq || pOp->opc
fa50: 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
fa60: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61      assert( (fla
fa70: 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65  gs1 & MEM_Cleare
fa80: 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  d)==0 );.      a
fa90: 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
faa0: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
fab0: 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  ULL)==0 );.     
fac0: 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d   if( (flags1&MEM
fad0: 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
fae0: 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
faf0: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
fb00: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43  && (flags3&MEM_C
fb10: 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20  leared)==0.     
fb20: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20   ){.        res 
fb30: 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73  = 0;  /* Results
fb40: 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
fb50: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
fb60: 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20     res = 1;  /* 
fb70: 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20  Results are not 
fb80: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
fb90: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
fba0: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c    /* SQLITE_NULL
fbb0: 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20  EQ is clear and 
fbc0: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65  at least one ope
fbd0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20  rand is NULL,.  
fbe0: 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
fbf0: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
fc00: 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20   NULL..      ** 
fc10: 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  The jump is take
fc20: 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  n if the SQLITE_
fc30: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69  JUMPIFNULL bit i
fc40: 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a  s set..      */.
fc50: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
fc60: 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
fc70: 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f  P2 ){.        pO
fc80: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
fc90: 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  p2];.        Mem
fca0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
fcb0: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
fcc0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
fcd0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
fce0: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
fcf0: 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61  .        VdbeBra
fd00: 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20  nchTaken(2,3);. 
fd10: 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e         if( pOp->
fd20: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
fd30: 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20  IFNULL ){.      
fd40: 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
fd50: 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  _p2;.        }. 
fd60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
fd70: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ak;.    }.  }els
fd80: 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65  e{.    /* Neithe
fd90: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
fda0: 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69  L.  Do a compari
fdb0: 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69  son. */.    affi
fdc0: 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26  nity = pOp->p5 &
fdd0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
fde0: 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69  ;.    if( affini
fdf0: 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty>=SQLITE_AFF_N
fe00: 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20  UMERIC ){.      
fe10: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
fe20: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
fe30: 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
fe40: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
fe50: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
fe60: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b  ffinity(pIn1,0);
fe70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
fe80: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
fe90: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
fea0: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
feb0: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
fec0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
fed0: 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a  finity(pIn3,0);.
fee0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
fef0: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d  e if( affinity==
ff00: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
ff10: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  ){.      if( (pI
ff20: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
ff30: 53 74 72 29 3d 3d 30 20 26 26 20 28 70 49 6e 31  Str)==0 && (pIn1
ff40: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
ff50: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
ff60: 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
ff70: 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
ff80: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
ff90: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
ffa0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
ffb0: 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
ffc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
ffd0: 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c  mStringify(pIn1,
ffe0: 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
fff0: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10000 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e   (flags1&MEM_Dyn
10010 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ) != (pIn1->flag
10020 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
10030 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28        flags1 = (
10040 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn1->flags & ~M
10050 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
10060 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70  flags1 & MEM_Typ
10070 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  eMask);.      }.
10080 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
10090 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
100a0 29 3d 3d 30 20 26 26 20 28 70 49 6e 33 2d 3e 66  )==0 && (pIn3->f
100b0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
100c0 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b  MEM_Real))!=0 ){
100d0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
100e0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
100f0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
10100 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
10110 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10120 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
10130 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
10140 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e  ringify(pIn3, en
10150 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20  coding, 1);.    
10160 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66      testcase( (f
10170 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21  lags3&MEM_Dyn) !
10180 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  = (pIn3->flags&M
10190 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20  EM_Dyn) );.     
101a0 20 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e     flags3 = (pIn
101b0 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  3->flags & ~MEM_
101c0 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
101d0 67 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61  gs3 & MEM_TypeMa
101e0 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  sk);.      }.   
101f0 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
10200 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
10210 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
10220 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
10230 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
10240 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
10250 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10260 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
10270 49 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67  In1);.      flag
10280 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b  s1 &= ~MEM_Zero;
10290 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
102a0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
102b0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73  _Zero ){.      s
102c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
102d0 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
102e0 20 20 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e       flags3 &= ~
102f0 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a  MEM_Zero;.    }.
10300 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
10310 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
10320 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 72 65 73 20  no_mem;.    res 
10330 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
10340 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
10350 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
10360 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f    }.  switch( pO
10370 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
10380 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20   case OP_Eq:    
10390 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20  res = res==0;   
103a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
103b0 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20  e OP_Ne:    res 
103c0 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72  = res!=0;     br
103d0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
103e0 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Lt:    res = re
103f0 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
10400 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
10410 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30      res = res<=0
10420 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10430 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
10440 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20  res = res>0;    
10450 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
10460 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20  ault:       res 
10470 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
10480 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  eak;.  }..  /* U
10490 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
104a0 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
104b0 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
104c0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
104d0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  */.  assert( (pI
104e0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
104f0 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
10500 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10510 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
10520 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ags1;.  assert( 
10530 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
10540 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10550 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s3 & MEM_Dyn) );
10560 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
10570 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20   flags3;..  if( 
10580 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10590 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
105a0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
105b0 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62  ->p2];.    memAb
105c0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
105d0 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
105e0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
105f0 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
10600 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
10610 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10620 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
10630 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
10640 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
10650 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  s!=0, (pOp->p5 &
10660 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
10670 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
10680 73 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  s ){.      goto 
10690 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
106a0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
106b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
106c0 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
106d0 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
106e0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
106f0 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
10700 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f  pare operator to
10710 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   be the array.**
10720 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
10730 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  P4..**.** The pe
10740 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
10750 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
10760 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
10770 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
10780 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10790 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
107a0 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
107b0 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
107c0 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
107d0 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
107e0 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
107f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65  e..*/.case OP_Pe
10800 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61  rmutation: {.  a
10810 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
10820 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
10830 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
10840 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65  ->p4.ai );.  aPe
10850 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  rmute = pOp->p4.
10860 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ai;.  break;.}..
10870 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
10880 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  re P1 P2 P3 P4 P
10890 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
108a0 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32  [P1@P3] <-> r[P2
108b0 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  @P3].**.** Compa
108c0 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f  re two vectors o
108d0 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72  f registers in r
108e0 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50  eg(P1)..reg(P1+P
108f0 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a  3-1) (call this.
10900 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61  ** vector "A") a
10910 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
10920 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
10930 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
10940 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
10950 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
10960 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
10970 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
10980 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
10990 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
109a0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
109b0 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d  the order of com
109c0 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65  parison is.** de
109d0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
109e0 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50  most recent OP_P
109f0 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61  ermutation opera
10a00 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  tor.  If the.** 
10a10 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
10a20 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  it is clear, the
10a30 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63  n register are c
10a40 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65  ompared in seque
10a50 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a  ntial.** order..
10a60 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
10a70 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
10a80 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
10a90 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
10aa0 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
10ab0 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
10ac0 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
10ad0 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
10ae0 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
10af0 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
10b00 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
10b10 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
10b20 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
10b30 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
10b40 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
10b50 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
10b60 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
10b70 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
10b80 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
10b90 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
10ba0 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
10bb0 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
10bc0 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
10bd0 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
10be0 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
10bf0 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
10c00 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
10c10 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
10c20 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
10c30 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
10c40 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
10c50 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
10c60 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
10c70 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
10c80 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
10c90 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
10ca0 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28  rder */..  if( (
10cb0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
10cc0 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61  _PERMUTE)==0 ) a
10cd0 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e  Permute = 0;.  n
10ce0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b   = pOp->p3;.  pK
10cf0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
10d00 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
10d10 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73  ert( n>0 );.  as
10d20 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d  sert( pKeyInfo!=
10d30 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  0 );.  p1 = pOp-
10d40 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
10d50 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  >p2;.#if SQLITE_
10d60 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72  DEBUG.  if( aPer
10d70 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  mute ){.    int 
10d80 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66  k, mx = 0;.    f
10d90 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b  or(k=0; k<n; k++
10da0 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b  ) if( aPermute[k
10db0 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72  ]>mx ) mx = aPer
10dc0 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73  mute[k];.    ass
10dd0 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
10de0 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  mx<=(p->nMem-p->
10df0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
10e00 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
10e10 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p2+mx<=(p->nMe
10e20 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
10e30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10e40 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
10e50 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p1+n<=(p->nMem-p
10e60 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10e70 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
10e80 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p2+n<=(p->nM
10e90 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
10ea0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f   );.  }.#endif /
10eb0 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
10ec0 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  /.  for(i=0; i<n
10ed0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20  ; i++){.    idx 
10ee0 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65  = aPermute ? aPe
10ef0 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20  rmute[i] : i;.  
10f00 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
10f10 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64  alid(&aMem[p1+id
10f20 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  x]) );.    asser
10f30 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
10f40 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a  Mem[p2+idx]) );.
10f50 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
10f60 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d  CE(p1+idx, &aMem
10f70 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52  [p1+idx]);.    R
10f80 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
10f90 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  +idx, &aMem[p2+i
10fa0 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  dx]);.    assert
10fb0 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  ( i<pKeyInfo->nF
10fc0 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
10fd0 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
10fe0 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
10ff0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
11000 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
11010 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
11020 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d  e3MemCompare(&aM
11030 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65  em[p1+idx], &aMe
11040 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
11050 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
11060 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
11070 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
11080 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
11090 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
110a0 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20  .  }.  aPermute 
110b0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
110c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
110d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
110e0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
110f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
11100 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
11110 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
11120 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
11130 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
11140 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
11150 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
11160 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
11170 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
11180 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
11190 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
111a0 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
111b0 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
111c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
111d0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
111e0 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56  mpare<0 ){.    V
111f0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
11200 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,3); pOp = &aOp[
11210 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20  pOp->p1 - 1];.  
11220 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
11230 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62  re==0 ){.    Vdb
11240 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33  eBranchTaken(1,3
11250 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
11260 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p2 - 1];.  }e
11270 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
11280 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70  nchTaken(2,3); p
11290 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
112a0 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72  3 - 1];.  }.  br
112b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
112c0 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20  e: And P1 P2 P3 
112d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
112e0 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26   r[P3]=(r[P1] &&
112f0 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
11300 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41  ke the logical A
11310 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
11320 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
11330 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77   and P2 and.** w
11340 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20  rite the result 
11350 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
11360 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
11370 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20  r P1 or P2 is 0 
11380 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65  (false) then the
11390 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65   result is 0 eve
113a0 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65  n if.** the othe
113b0 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
113c0 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75    A NULL and tru
113d0 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67  e or two NULLs g
113e0 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75  ive.** a NULL ou
113f0 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tput..*/./* Opco
11400 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20  de: Or P1 P2 P3 
11410 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11420 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c   r[P3]=(r[P1] ||
11430 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
11440 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
11450 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
11460 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
11470 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
11480 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
11490 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
114a0 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
114b0 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
114c0 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
114d0 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
114e0 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
114f0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
11500 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
11510 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
11520 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
11530 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
11540 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
11550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
11560 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
11570 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
11580 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
11590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
115a0 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
115b0 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
115c0 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
115d0 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
115e0 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
115f0 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
11600 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
11610 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
11620 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
11630 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
11640 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
11650 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
11660 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
11670 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
11680 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20  _Null ){.    v1 
11690 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
116a0 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
116b0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
116c0 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20  !=0;.  }.  pIn2 
116d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
116e0 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c  ;.  if( pIn2->fl
116f0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
11700 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20  {.    v2 = 2;.  
11710 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20  }else{.    v2 = 
11720 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
11730 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20  lue(pIn2)!=0;.  
11740 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
11750 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20  ode==OP_And ){. 
11760 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
11770 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e  unsigned char an
11780 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  d_logic[] = { 0,
11790 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20   0, 0, 0, 1, 2, 
117a0 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76  0, 2, 2 };.    v
117b0 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31  1 = and_logic[v1
117c0 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b  *3+v2];.  }else{
117d0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
117e0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
117f0 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  or_logic[] = { 0
11800 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 2, 1, 1, 1,
11810 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20   2, 1, 2 };.    
11820 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31  v1 = or_logic[v1
11830 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f  *3+v2];.  }.  pO
11840 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
11850 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32  p3];.  if( v1==2
11860 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
11870 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
11880 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  _Null);.  }else{
11890 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
118a0 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   v1;.    MemSetT
118b0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
118c0 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
118d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
118e0 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  e: Not P1 P2 * *
118f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11900 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a  r[P2]= !r[P1].**
11910 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
11920 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11930 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
11940 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
11950 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  e the.** boolean
11960 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72   complement in r
11970 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
11980 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11990 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
119a0 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c  NULL, then a NUL
119b0 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  L is stored in P
119c0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  2..*/.case OP_No
119d0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
119e0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
119f0 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  K_NOT, in1, out2
11a00 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
11a10 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
11a20 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
11a30 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
11a40 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
11a50 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ut);.  if( (pIn1
11a60 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11a70 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f  ll)==0 ){.    pO
11a80 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
11a90 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
11aa0 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62  .i = !sqlite3Vdb
11ab0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
11ac0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11ad0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e  ./* Opcode: BitN
11ae0 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
11af0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
11b00 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  ]= ~r[P1].**.** 
11b10 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f  Interpret the co
11b20 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
11b30 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67  r P1 as an integ
11b40 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  er.  Store the.*
11b50 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  * ones-complemen
11b60 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75  t of the P1 valu
11b70 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
11b80 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73  P2.  If P1 holds
11b90 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20  .** a NULL then 
11ba0 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
11bb0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
11bc0 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
11bd0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
11be0 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20  TK_BITNOT, in1, 
11bf0 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
11c00 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
11c10 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
11c20 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
11c30 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
11c40 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28  l(pOut);.  if( (
11c50 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11c60 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
11c70 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
11c80 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
11c90 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65  t->u.i = ~sqlite
11ca0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11cb0 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
11cc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11cd0 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  Once P1 P2 * * *
11ce0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
11cf0 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75 6d   "once" flag num
11d00 62 65 72 20 50 31 2e 20 49 66 20 69 74 20 69 73  ber P1. If it is
11d10 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69 6e   set, jump to in
11d20 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a 2a  struction P2. .*
11d30 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74  * Otherwise, set
11d40 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61   the flag and fa
11d50 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
11d60 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
11d70 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  on..** In other 
11d80 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70 63 6f  words, this opco
11d90 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f  de causes all fo
11da0 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 20  llowing opcodes 
11db0 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a 2a 2a  up through P2.**
11dc0 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64   (but not includ
11dd0 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e 20 6a  ing P2) to run j
11de0 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20  ust once and to 
11df0 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73 75  be skipped on su
11e00 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d 65  bsequent.** time
11e10 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 6f  s through the lo
11e20 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f  op..**.** All "o
11e30 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65 20 69  nce" flags are i
11e40 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72 65 64  nitially cleared
11e50 20 77 68 65 6e 65 76 65 72 20 61 20 70 72 65 70   whenever a prep
11e60 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ared statement.*
11e70 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73 20 74  * first begins t
11e80 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  o run..*/.case O
11e90 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
11ea0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
11eb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
11ec0 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  p1<p->nOnceFlag 
11ed0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
11ee0 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c 61  aken(p->aOnceFla
11ef0 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20 32  g[pOp->p1]!=0, 2
11f00 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63  );.  if( p->aOnc
11f10 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29  eFlag[pOp->p1] )
11f20 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
11f30 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
11f40 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67      p->aOnceFlag
11f50 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20  [pOp->p1] = 1;. 
11f60 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11f70 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
11f80 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
11f90 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
11fa0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11fb0 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
11fc0 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
11fd0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
11fe0 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69   if it is numeri
11ff0 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  c and non-zero. 
12000 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
12010 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
12020 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
12030 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
12040 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
12050 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
12060 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
12070 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
12080 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
12090 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
120a0 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
120b0 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
120c0 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74  ered false if it
120d0 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
120e0 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
120f0 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
12100 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
12110 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
12120 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
12130 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
12140 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20  /.case OP_If:   
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12160 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61   jump, in1 */.ca
12170 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
12180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
12190 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
121a0 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  c;.  pIn1 = &aMe
121b0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
121c0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
121d0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
121e0 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  c = pOp->p3;.  }
121f0 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c  else{.#ifdef SQL
12200 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
12210 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20  G_POINT.    c = 
12220 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
12230 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65  lue(pIn1)!=0;.#e
12240 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  lse.    c = sqli
12250 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
12260 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e  (pIn1)!=0.0;.#en
12270 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  dif.    if( pOp-
12280 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f  >opcode==OP_IfNo
12290 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a  t ) c = !c;.  }.
122a0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
122b0 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  n(c!=0, 2);.  if
122c0 28 20 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ( c ){.    goto 
122d0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
122e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
122f0 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31  pcode: IsNull P1
12300 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
12310 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31 5d  opsis:  if r[P1]
12320 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  ==NULL goto P2.*
12330 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
12340 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
12350 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e  register P1 is N
12360 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
12370 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  IsNull: {       
12380 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12390 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  TK_ISNULL, jump,
123a0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
123b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
123c0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
123d0 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  en( (pIn1->flags
123e0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c   & MEM_Null)!=0,
123f0 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
12400 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
12410 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ll)!=0 ){.    go
12420 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
12430 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
12440 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c  * Opcode: NotNul
12450 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
12460 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
12470 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]!=NULL goto P
12480 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
12490 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
124a0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
124b0 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f  s not NULL.  .*/
124c0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  .case OP_NotNull
124d0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
124e0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
124f0 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
12500 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
12510 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
12520 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
12530 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
12540 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a  M_Null)==0, 2);.
12550 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
12560 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
12570 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
12580 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
12590 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
125a0 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50  ode: Column P1 P
125b0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
125c0 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50  nopsis:  r[P3]=P
125d0 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  X.**.** Interpre
125e0 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
125f0 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
12600 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
12610 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
12620 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
12630 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
12640 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
12650 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
12660 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
12670 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
12680 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
12690 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
126a0 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
126b0 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
126c0 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
126d0 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
126e0 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
126f0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
12700 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
12710 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
12720 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
12730 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
12740 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
12750 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
12760 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
12770 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
12780 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
12790 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
127a0 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
127b0 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
127c0 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
127d0 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
127e0 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
127f0 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
12800 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
12810 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
12820 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
12830 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
12840 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
12850 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
12860 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
12870 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
12880 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
12890 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
128a0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
128b0 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
128c0 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
128d0 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
128e0 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
128f0 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
12900 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
12910 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
12920 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
12930 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
12940 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 when.** the 
12950 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
12960 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
12970 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
12980 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
12990 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
129a0 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
129b0 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
129c0 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
129d0 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
129e0 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
129f0 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
12a00 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
12a10 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
12a20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
12a30 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
12a40 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65   i64 payloadSize
12a50 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  64; /* Number of
12a60 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
12a70 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32  cord */.  int p2
12a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12a90 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
12aa0 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
12ab0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
12ac0 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
12ad0 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73  rsor */.  BtCurs
12ae0 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
12af0 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
12b00 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73   */.  u32 *aOffs
12b10 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66  et;      /* aOff
12b20 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74  set[i] is offset
12b30 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74   to start of dat
12b40 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d  a for i-th colum
12b50 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  n */.  int len; 
12b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
12b70 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
12b80 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66  erialized data f
12b90 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f  or the column */
12ba0 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
12bb0 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
12bc0 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  unter */.  Mem *
12bd0 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pDest;        /*
12be0 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20   Where to write 
12bf0 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61  the extracted va
12c00 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65  lue */.  Mem sMe
12c10 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
12c20 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
12c30 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
12c40 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
12c50 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50  8 *zData;   /* P
12c60 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  art of the recor
12c70 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
12c80 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
12c90 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  Hdr;    /* Next 
12ca0 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66  unparsed byte of
12cb0 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
12cc0 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48   const u8 *zEndH
12cd0 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  dr; /* Pointer t
12ce0 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74  o first byte aft
12cf0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  er the header */
12d00 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20  .  u32 offset;  
12d10 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20        /* Offset 
12d20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f  into the data */
12d30 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b  .  u64 offset64;
12d40 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20        /* 64-bit 
12d50 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20  offset */.  u32 
12d60 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
12d70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
12d80 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
12d90 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20  ata */.  u32 t; 
12da0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
12db0 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20   type code from 
12dc0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
12dd0 72 20 2a 2f 0a 20 20 75 31 36 20 66 78 3b 20 20  r */.  u16 fx;  
12de0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 44 65            /* pDe
12df0 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c 75 65 20  st->flags value 
12e00 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20  */.  Mem *pReg; 
12e10 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64          /* Pseud
12e20 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67  oTable input reg
12e30 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d  ister */..  p2 =
12e40 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
12e50 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
12e60 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
12e70 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
12e80 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
12e90 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
12ea0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
12eb0 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
12ec0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
12ed0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
12ee0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
12ef0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
12f00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
12f10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
12f20 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
12f30 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
12f40 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72  aOffset;.  asser
12f50 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
12f60 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
12f70 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65   /* OP_Column ne
12f80 76 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69  ver called on vi
12f90 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 20  rtual table */. 
12fa0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
12fb0 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50  rType!=CURTYPE_P
12fc0 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c  SEUDO || pC->nul
12fd0 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74  lRow );.  assert
12fe0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
12ff0 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29  CURTYPE_SORTER )
13000 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
13010 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f  uc.pCursor;..  /
13020 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
13030 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20  cache is stale, 
13040 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64  bring it up-to-d
13050 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ate */.  rc = sq
13060 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
13070 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
13080 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
13090 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
130a0 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
130b0 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74  atus!=p->cacheCt
130c0 72 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d  r ){.    if( pC-
130d0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
130e0 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79    if( pC->eCurTy
130f0 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe==CURTYPE_PSEU
13100 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  DO ){.        as
13110 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 73 65  sert( pC->uc.pse
13120 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
13130 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
13140 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70 73 65  &aMem[pC->uc.pse
13150 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20  udoTableReg];.  
13160 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52        assert( pR
13170 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  eg->flags & MEM_
13180 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20  Blob );.        
13190 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
131a0 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
131b0 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
131c0 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20  ize = pC->szRow 
131d0 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e  = avail = pReg->
131e0 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  n;.        pC->a
131f0 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d  Row = (u8*)pReg-
13200 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  >z;.      }else{
13210 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
13220 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
13230 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67  Dest);.        g
13240 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
13250 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
13260 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
13270 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
13280 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
13290 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
132a0 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20   pCrsr );.      
132b0 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  if( pC->isTable=
132c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
132d0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
132e0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
132f0 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
13300 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
13310 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
13320 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
13330 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
13340 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
13350 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a  =SQLITE_OK ); /*
13360 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
13370 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
13380 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
13390 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
133a0 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74  BtreeParseCellPt
133b0 72 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69  r() uses getVari
133c0 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63  nt32() to extrac
133d0 74 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a  t the.        **
133e0 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73   payload size, s
133f0 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  o it is impossib
13400 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69  le for payloadSi
13410 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20  ze64 to be.     
13420 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
13430 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20  n 32 bits. */.  
13440 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
13450 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
13460 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
13470 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
13480 36 34 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  64 );.        pC
13490 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33  ->aRow = sqlite3
134a0 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43  BtreeKeyFetch(pC
134b0 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
134c0 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
134d0 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79  dSize = (u32)pay
134e0 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20  loadSize64;.    
134f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13500 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
13510 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
13520 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
13530 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
13540 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
13550 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
13560 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65  &pC->payloadSize
13570 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
13580 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
13590 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a   );   /* DataSiz
135a0 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
135b0 2a 2f 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  */.        pC->a
135c0 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
135d0 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73  eeDataFetch(pCrs
135e0 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
135f0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
13600 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29  ( avail<=65536 )
13610 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61  ;  /* Maximum pa
13620 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42  ge size is 64KiB
13630 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
13640 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ->payloadSize <=
13650 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
13660 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77         pC->szRow
13670 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   = pC->payloadSi
13680 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  ze;.      }else 
13690 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
136a0 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
136b0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
136c0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
136d0 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
136e0 69 67 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ig;.      }else{
136f0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  .        pC->szR
13700 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20  ow = avail;.    
13710 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43    }.    }.    pC
13720 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
13730 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20  p->cacheCtr;.   
13740 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
13750 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70 43  = getVarint32(pC
13760 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b  ->aRow, offset);
13770 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72  .    pC->nHdrPar
13780 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66  sed = 0;.    aOf
13790 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74  fset[0] = offset
137a0 3b 0a 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69  ;...    if( avai
137b0 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20 20 20  l<offset ){.    
137c0 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f    /* pC->aRow do
137d0 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68  es not have to h
137e0 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72  old the entire r
137f0 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20  ow, but it does 
13800 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a  at least.      *
13810 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20  * need to cover 
13820 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  the header of th
13830 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43  e record.  If pC
13840 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
13850 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a  contain.      **
13860 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
13870 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69  ader, then set i
13880 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69  t to zero, forci
13890 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f  ng the header to
138a0 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e   be.      ** dyn
138b0 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
138c0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d  ed. */.      pC-
138d0 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
138e0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a   pC->szRow = 0;.
138f0 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
13900 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
13910 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
13920 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
13930 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
13940 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
13950 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
13960 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
13970 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a  ocation..      *
13980 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20  *.      ** Type 
13990 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
139a0 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
139b0 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
139c0 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
139d0 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
139e0 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
139f0 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
13a00 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
13a10 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a  nd 32 of.      *
13a20 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
13a30 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
13a40 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
13a50 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
13a60 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79   a.      ** 3-by
13a70 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
13a80 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
13a90 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
13aa0 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
13ab0 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
13ac0 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
13ad0 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
13ae0 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
13af0 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  307..      */.  
13b00 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
13b10 20 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74   98307 || offset
13b20 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
13b30 7a 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  ze ){.        rc
13b40 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
13b50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
13b60 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13b70 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
13b80 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20    }..    /* The 
13b90 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69  following goto i
13ba0 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
13bb0 6e 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d  n.  It can be om
13bc0 69 74 74 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a  itted and.    **
13bd0 20 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c   everything will
13be0 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75   still work.  Bu
13bf0 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d  t OP_Column is m
13c00 65 61 73 75 72 61 62 6c 79 20 66 61 73 74 65 72  easurably faster
13c10 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70  .    ** by skipp
13c20 69 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65  ing the subseque
13c30 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20  nt conditional, 
13c40 77 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20  which is always 
13c50 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  true..    */.   
13c60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64   assert( pC->nHd
13c70 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20  rParsed<=p2 );  
13c80 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74         /* Condit
13c90 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f  ional skipped */
13ca0 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c  .    goto op_col
13cb0 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b  umn_read_header;
13cc0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
13cd0 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68  sure at least th
13ce0 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74  e first p2+1 ent
13cf0 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ries of the head
13d00 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a  er have been.  *
13d10 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c  * parsed and val
13d20 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  id information i
13d30 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61  s in aOffset[] a
13d40 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a  nd pC->aType[]..
13d50 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e    */.  if( pC->n
13d60 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
13d70 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
13d80 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20   is more header 
13d90 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61  available for pa
13da0 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63  rsing in the rec
13db0 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20  ord, try.    ** 
13dc0 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74  to extract addit
13dd0 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20  ional fields up 
13de0 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31  through the p2+1
13df0 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a  -th field .    *
13e00 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f  /.    op_column_
13e10 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20  read_header:.   
13e20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66   if( pC->iHdrOff
13e30 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  set<aOffset[0] )
13e40 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  {.      /* Make 
13e50 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74  sure zData point
13e60 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74  s to enough of t
13e70 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76  he record to cov
13e80 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a  er the header. *
13e90 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  /.      if( pC->
13ea0 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
13eb0 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c     memset(&sMem,
13ec0 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
13ed0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
13ee0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
13ef0 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
13f00 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 21 70  , aOffset[0], !p
13f10 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73 4d 65  C->isTable, &sMe
13f20 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  m);.        if( 
13f30 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
13f40 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13f50 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44  rror;.        zD
13f60 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
13f70 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
13f80 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
13f90 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
13fa0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69  }.  .      /* Fi
13fb0 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b  ll in pC->aType[
13fc0 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  i] and aOffset[i
13fd0 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68  ] values through
13fe0 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64   the p2-th field
13ff0 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20 70  . */.      i = p
14000 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20  C->nHdrParsed;. 
14010 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20       offset64 = 
14020 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20  aOffset[i];.    
14030 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b    zHdr = zData +
14040 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b   pC->iHdrOffset;
14050 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d  .      zEndHdr =
14060 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74   zData + aOffset
14070 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72  [0];.      asser
14080 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72  t( i<=p2 && zHdr
14090 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  <zEndHdr );.    
140a0 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
140b0 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c  ( (t = zHdr[0])<
140c0 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
140d0 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20    zHdr++;.      
140e0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
140f0 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79  sqlite3VdbeOneBy
14100 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  teSerialTypeLen(
14110 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
14120 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
14130 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
14140 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
14150 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  );.          off
14160 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
14170 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
14180 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n(t);.        }.
14190 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70          pC->aTyp
141a0 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20  e[i++] = t;.    
141b0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
141c0 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20   (u32)(offset64 
141d0 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20  & 0xffffffff);. 
141e0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
141f0 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
14200 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  dr );.      pC->
14210 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a  nHdrParsed = i;.
14220 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66        pC->iHdrOf
14230 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64  fset = (u32)(zHd
14240 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20  r - zData);.    
14250 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
14260 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  0 ) sqlite3VdbeM
14270 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
14280 3b 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 54 68  ;.  .      /* Th
14290 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72  e record is corr
142a0 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
142b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
142c0 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28  true:.      ** (
142d0 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66 20  1) the bytes of 
142e0 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65 6e  the header exten
142f0 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c 61  d past the decla
14300 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a  red header size.
14310 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65        ** (2) the
14320 20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20 77   entire header w
14330 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20  as used but not 
14340 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73 65  all data was use
14350 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74  d.      ** (3) t
14360 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61  he end of the da
14370 74 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e  ta extends beyon
14380 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
14390 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
143a0 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64  /.      if( (zHd
143b0 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a  r>=zEndHdr && (z
143c0 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f  Hdr>zEndHdr || o
143d0 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70 61 79  ffset64!=pC->pay
143e0 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20 20 20  loadSize)).     
143f0 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34 20 3e    || (offset64 >
14400 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
14410 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
14420 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
14430 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
14440 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14450 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
14460 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a   }.    }..    /*
14470 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
14480 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
14490 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
144a0 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
144b0 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
144c0 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
144d0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
144e0 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
144f0 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
14500 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
14510 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
14520 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
14530 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
14540 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
14550 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
14560 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14570 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
14580 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
14590 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
145a0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
145b0 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
145c0 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
145d0 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
145e0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
145f0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14600 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
14610 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14620 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
14630 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d 20   }else{.    t = 
14640 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20  pC->aType[p2];. 
14650 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
14660 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
14670 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
14680 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
14690 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
146a0 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
146b0 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
146c0 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
146d0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
146e0 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
146f0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
14700 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
14710 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
14720 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
14730 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
14740 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
14750 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
14760 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
14770 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
14780 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
14790 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
147a0 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e   assert( t==pC->
147b0 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69  aType[p2] );.  i
147c0 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
147d0 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
147e0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
147f0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
14800 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
14810 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
14820 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
14830 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
14840 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
14850 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
14860 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 73  ow page */.    s
14870 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14880 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66  Get(pC->aRow+aOf
14890 66 73 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44 65  fset[p2], t, pDe
148a0 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  st);.  }else{.  
148b0 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
148c0 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
148d0 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
148e0 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
148f0 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  */.    if( ((pOp
14900 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
14910 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
14920 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
14930 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
14940 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
14950 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
14960 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
14970 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
14980 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
14990 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
149a0 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
149b0 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
149c0 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20  irrelevant for. 
149d0 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68       **    1. th
149e0 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
149f0 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20  ion,.      **   
14a00 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58   2. the length(X
14a10 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
14a20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20  is a blob, and. 
14a30 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66       **    3. if
14a40 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
14a50 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20  gth is zero..   
14a60 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68     ** So we migh
14a70 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f  t as well use bo
14a80 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68  gus content rath
14a90 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a  er than reading.
14aa0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
14ab0 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
14ac0 4c 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  L will work for 
14ad0 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74  the value for st
14ae0 72 69 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61  rings.      ** a
14af0 6e 64 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61  nd blobs and wha
14b00 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20  tever is in the 
14b10 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61  payloadSize64 va
14b20 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20  riable.      ** 
14b30 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
14b40 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a  erything else. *
14b50 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
14b60 64 62 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d  dbeSerialGet(t<=
14b70 31 33 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f  13 ? (u8*)&paylo
14b80 61 64 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c  adSize64 : 0, t,
14b90 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
14ba0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
14bb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
14bc0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
14bd0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
14be0 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20  !pC->isTable,.  
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c10 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
14c20 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14c30 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
14c40 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
14c50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
14c60 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14c70 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29  lGet((const u8*)
14c80 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65  pDest->z, t, pDe
14c90 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  st);.      pDest
14ca0 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
14cb0 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d  Ephem;.    }.  }
14cc0 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20  .  pDest->enc = 
14cd0 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f  encoding;..op_co
14ce0 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49  lumn_out:.  /* I
14cf0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  f the column val
14d00 75 65 20 69 73 20 61 6e 20 65 70 68 65 6d 65 72  ue is an ephemer
14d10 61 6c 20 73 74 72 69 6e 67 2c 20 67 6f 20 61 68  al string, go ah
14d20 65 61 64 20 61 6e 64 20 70 65 72 73 69 73 74 0a  ead and persist.
14d30 20 20 2a 2a 20 74 68 61 74 20 73 74 72 69 6e 67    ** that string
14d40 20 69 6e 20 63 61 73 65 20 74 68 65 20 63 75 72   in case the cur
14d50 73 6f 72 20 6d 6f 76 65 73 20 62 65 66 6f 72 65  sor moves before
14d60 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
14d70 65 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e 20  e is.  ** used. 
14d80 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
14d90 6f 64 65 20 64 6f 65 73 20 74 68 65 20 65 71 75  ode does the equ
14da0 69 76 61 6c 65 6e 74 20 6f 66 20 44 65 65 70 68  ivalent of Deeph
14db0 65 6d 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a 2a  emeralize().  **
14dc0 20 62 75 74 20 64 6f 65 73 20 69 74 20 66 61 73   but does it fas
14dd0 74 65 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28 70  ter. */.  if( (p
14de0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
14df0 4d 5f 45 70 68 65 6d 29 21 3d 30 20 26 26 20 70  M_Ephem)!=0 && p
14e00 44 65 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 66  Dest->z ){.    f
14e10 78 20 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  x = pDest->flags
14e20 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
14e30 42 6c 6f 62 29 3b 0a 20 20 20 20 61 73 73 65 72  Blob);.    asser
14e40 74 28 20 66 78 21 3d 30 20 29 3b 0a 20 20 20 20  t( fx!=0 );.    
14e50 7a 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 75  zData = (const u
14e60 38 2a 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20 20  8*)pDest->z;.   
14e70 20 6c 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e 3b   len = pDest->n;
14e80 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
14e90 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
14ea0 65 73 69 7a 65 28 70 44 65 73 74 2c 20 6c 65 6e  esize(pDest, len
14eb0 2b 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  +2) ) goto no_me
14ec0 6d 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 44  m;.    memcpy(pD
14ed0 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c  est->z, zData, l
14ee0 65 6e 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  en);.    pDest->
14ef0 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
14f00 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
14f10 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  = 0;.    pDest->
14f20 66 6c 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f 54  flags = fx|MEM_T
14f30 65 72 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75  erm;.  }.op_colu
14f40 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41  mn_error:.  UPDA
14f50 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
14f60 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
14f70 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
14f80 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
14f90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14fa0 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
14fb0 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
14fc0 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
14fd0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70  1@P2]).**.** App
14fe0 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
14ff0 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
15000 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
15010 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
15020 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
15030 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
15040 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
15050 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
15060 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
15070 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
15080 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
15090 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
150a0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
150b0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
150c0 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
150d0 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
150e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
150f0 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54  Affinity;   /* T
15100 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62  he affinity to b
15110 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63  e applied */.  c
15120 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20  har cAff;       
15130 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e          /* A sin
15140 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66  gle character of
15150 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20   affinity */..  
15160 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
15170 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
15180 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b   zAffinity!=0 );
15190 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
151a0 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
151b0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
151c0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
151d0 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28  hile( (cAff = *(
151e0 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30  zAffinity++))!=0
151f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
15200 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d  pIn1 <= &p->aMem
15210 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
15220 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
15230 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
15240 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70  (pIn1) );.    ap
15250 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
15260 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67  , cAff, encoding
15270 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
15280 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
15290 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
152a0 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
152b0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
152c0 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
152d0 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
152e0 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
152f0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
15300 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
15310 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
15320 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
15330 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
15340 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
15350 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
15360 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
15370 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
15380 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
15390 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
153a0 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
153b0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
153c0 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
153d0 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
153e0 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
153f0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
15400 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
15410 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
15420 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
15430 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
15440 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
15450 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
15460 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
15470 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
15480 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
15490 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
154a0 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
154b0 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
154c0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
154d0 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
154e0 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
154f0 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  BLOB..*/.case OP
15500 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
15510 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
15520 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
15530 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
15540 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
15550 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
15560 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
15570 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
15580 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
15590 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
155a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
155b0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
155c0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
155d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
155e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
155f0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
15600 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
15610 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15620 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
15630 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
15640 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a  cord */.  i64 nZ
15650 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
15660 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
15670 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
15680 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
15690 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
156a0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
156b0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
156c0 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
156d0 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
156e0 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
156f0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
15700 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
15710 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
15720 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
15730 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
15740 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
15750 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15760 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
15770 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
15780 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
15790 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
157a0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
157b0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
157c0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
157d0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
157e0 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
157f0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
15800 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
15810 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
15820 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
15830 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
15840 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
15850 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
15860 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
15870 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e  ] header */.  in
15880 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
15890 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
158a0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
158b0 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  [] content */.  
158c0 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  u32 len;        
158d0 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
158e0 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a   of a field */..
158f0 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
15900 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
15910 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
15920 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
15930 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
15940 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
15950 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15960 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15970 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15980 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15990 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
159a0 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
159b0 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
159c0 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
159d0 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
159e0 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
159f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a30 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
15a40 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
15a50 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
15a60 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
15a70 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
15a80 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
15a90 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  orth..  **.  ** 
15aa0 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
15ab0 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
15ac0 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
15ad0 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
15ae0 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
15af0 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
15b00 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
15b10 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
15b20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
15b30 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
15b40 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
15b50 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
15b60 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
15b70 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
15b80 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
15b90 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
15ba0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15bb0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
15bc0 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
15bd0 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
15be0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
15bf0 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
15c00 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
15c10 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
15c20 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
15c30 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
15c40 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15c50 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
15c60 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
15c70 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
15c80 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
15c90 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
15ca0 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28  Op->p2+nField<=(
15cb0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15cc0 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  or)+1 );.  pData
15cd0 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
15ce0 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
15cf0 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
15d00 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
15d10 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
15d20 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
15d30 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
15d40 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
15d50 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
15d60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15d70 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
15d80 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
15d90 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
15da0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
15db0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
15dc0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
15dd0 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20  .  /* Apply the 
15de0 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69  requested affini
15df0 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73  ty to all inputs
15e00 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
15e10 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
15e20 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79  .  if( zAffinity
15e30 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70   ){.    pRec = p
15e40 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  Data0;.    do{. 
15e50 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
15e60 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66  ty(pRec++, *(zAf
15e70 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64  finity++), encod
15e80 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ing);.      asse
15e90 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  rt( zAffinity[0]
15ea0 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61  ==0 || pRec<=pLa
15eb0 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65  st );.    }while
15ec0 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
15ed0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  ;.  }..  /* Loop
15ee0 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
15ef0 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
15f00 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
15f10 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
15f20 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
15f30 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
15f40 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
15f50 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63  ord..  */.  pRec
15f60 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a   = pLast;.  do{.
15f70 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
15f80 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
15f90 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
15fa0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20  = serial_type = 
15fb0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15fc0 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
15fd0 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a  _format, &len);.
15fe0 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
15ff0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
16000 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74  {.      if( nDat
16010 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  a ){.        if(
16020 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
16030 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20  xpandBlob(pRec) 
16040 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
16050 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16060 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
16070 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
16080 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
16090 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
160a0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
160b0 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
160c0 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
160d0 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
160e0 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
160f0 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
16100 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
16110 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
16120 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
16130 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
16140 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65    }while( (--pRe
16150 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20  c)>=pData0 );.. 
16160 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
16170 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
16180 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
16190 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
161a0 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
161b0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
161c0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
161d0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
161e0 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
161f0 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
16200 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
16210 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
16220 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
16230 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
16240 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
16250 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
16260 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
16270 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
16280 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
16290 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
162a0 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
162b0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
162c0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
162d0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
162e0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
162f0 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
16300 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
16310 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
16320 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
16330 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
16340 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
16350 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
16360 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
16370 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
16380 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
16390 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
163a0 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
163b0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
163c0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
163d0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
163e0 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
163f0 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
16400 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
16410 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
16420 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
16430 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
16440 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
16450 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
16460 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
16470 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
16480 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
16490 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
164a0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
164b0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
164c0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
164d0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
164e0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
164f0 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
16500 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
16510 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
16520 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
16530 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
16540 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
16550 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
16560 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
16570 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
16580 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
16590 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
165a0 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
165b0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
165c0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
165d0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
165e0 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
165f0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
16600 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
16610 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
16620 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
16630 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
16640 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
16650 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
16660 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
16670 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
16680 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
16690 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
166a0 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
166b0 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
166c0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
166d0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
166e0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
166f0 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
16700 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
16710 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
16720 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
16730 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
16740 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
16750 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
16760 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
16770 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
16780 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
16790 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
167a0 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
167b0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
167c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
167d0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
167e0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
167f0 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
16800 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
16810 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
16820 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
16830 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
16840 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
16850 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
16860 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
16870 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
16880 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
16890 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
168a0 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
168b0 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
168c0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
168d0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
168e0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
168f0 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
16900 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16910 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
16920 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
16930 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74  sis: r[P2]=count
16940 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  ().**.** Store t
16950 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
16960 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
16970 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
16980 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
16990 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
169a0 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
169b0 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
169c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
169d0 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
169e0 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
169f0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
16a00 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
16a10 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61  sor *pCrsr;..  a
16a20 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
16a30 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79  pOp->p1]->eCurTy
16a40 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
16a50 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
16a60 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
16a70 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
16a80 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
16a90 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20  .  nEntry = 0;  
16aa0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
16ab0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
16ac0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
16ad0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
16ae0 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73  3BtreeCount(pCrs
16af0 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70  r, &nEntry);.  p
16b00 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
16b10 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
16b20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74  pOut->u.i = nEnt
16b30 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  ry;.  break;.}.#
16b40 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
16b50 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a  : Savepoint P1 *
16b60 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
16b70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72  en, release or r
16b80 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65  ollback the save
16b90 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70  point named by p
16ba0 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70  arameter P4, dep
16bb0 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65  ending.** on the
16bc0 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f   value of P1. To
16bd0 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65   open a new save
16be0 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f  point, P1==0. To
16bf0 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
16c00 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67  ) an.** existing
16c10 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
16c20 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63  1, or to rollbac
16c30 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61  k an existing sa
16c40 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a  vepoint P1==2..*
16c50 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f  /.case OP_Savepo
16c60 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  int: {.  int p1;
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
16c90 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20  e of P1 operand 
16ca0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
16cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16cc0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
16cd0 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69  savepoint */.  i
16ce0 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65  nt nName;.  Save
16cf0 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53  point *pNew;.  S
16d00 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
16d10 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e  oint;.  Savepoin
16d20 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69  t *pTmp;.  int i
16d30 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74  Savepoint;.  int
16d40 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70   ii;..  p1 = pOp
16d50 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20  ->p1;.  zName = 
16d60 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a  pOp->p4.z;..  /*
16d70 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
16d80 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   p1 parameter is
16d90 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61   valid. Also tha
16da0 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  t if there is no
16db0 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73   open.  ** trans
16dc0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  action, then the
16dd0 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79  re cannot be any
16de0 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20   savepoints. .  
16df0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
16e00 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c  >pSavepoint==0 |
16e10 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  | db->autoCommit
16e20 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
16e30 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
16e40 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EGIN||p1==SAVEPO
16e50 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d  INT_RELEASE||p1=
16e60 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16e70 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ACK );.  assert(
16e80 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
16e90 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
16ea0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
16eb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68   );.  assert( ch
16ec0 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
16ed0 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72  t(db) );.  asser
16ee0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
16ef0 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
16f00 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
16f10 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64  .    if( db->nVd
16f20 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
16f30 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
16f40 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
16f50 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
16f60 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
16f70 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
16f80 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
16f90 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
16fa0 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
16fb0 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
16fc0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
16fd0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
16fe0 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
16ff0 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  t - SQL statemen
17000 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17010 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
17020 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
17030 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
17040 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
17050 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e  30(zName);..#ifn
17060 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
17070 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20  VIRTUALTABLE.   
17080 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20     /* This call 
17090 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68  is Ok even if th
170a0 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  is savepoint is 
170b0 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73  actually a trans
170c0 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20  action.      ** 
170d0 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74  savepoint (and t
170e0 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20  herefore should 
170f0 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65  not prompt xSave
17100 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63  point()) callbac
17110 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20  ks..      ** If 
17120 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
17130 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20  ction savepoint 
17140 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74  being opened, it
17150 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20   is guaranteed. 
17160 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65       ** that the
17170 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61   db->aVTrans[] a
17180 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20  rray is empty.  
17190 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
171a0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
171b0 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e  =0 || db->nVTran
171c0 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63  s==0 );.      rc
171d0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
171e0 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
171f0 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20  POINT_BEGIN,.   
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
17220 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e  >nStatement+db->
17230 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  nSavepoint);.   
17240 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17250 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17260 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17270 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a  #endif..      /*
17280 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61   Create a new sa
17290 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72  vepoint structur
172a0 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77  e. */.      pNew
172b0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
172c0 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
172d0 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
172e0 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
172f0 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
17300 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
17310 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
17320 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
17330 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
17340 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
17350 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
17360 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
17370 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
17380 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
17390 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
173a0 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
173b0 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
173c0 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
173d0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
173e0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
173f0 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
17400 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
17410 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
17420 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
17430 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
17440 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
17450 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17460 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
17470 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
17480 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
17490 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
174a0 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
174b0 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
174c0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
174d0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
174e0 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
174f0 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
17500 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
17510 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
17520 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
17530 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
17540 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
17550 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
17560 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
17570 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
17580 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
17590 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
175a0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
175b0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
175c0 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
175d0 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
175e0 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
175f0 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
17600 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
17610 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
17620 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
17630 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
17640 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
17650 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
17660 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
17670 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
17680 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
17690 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
176a0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
176b0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
176c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
176d0 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20  ror(p, "no such 
176e0 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
176f0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
17700 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17710 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
17720 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
17730 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
17740 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
17750 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
17760 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
17770 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
17780 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
17790 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
177a0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
177b0 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f  ements..      */
177c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
177d0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
177e0 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70  ot release savep
177f0 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20  oint - ".       
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17810 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17820 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17830 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
17840 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
17850 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
17860 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
17870 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
17880 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
17890 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
178a0 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
178b0 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
178c0 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
178d0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
178e0 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
178f0 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
17900 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
17910 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
17920 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
17930 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
17940 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
17950 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
17960 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
17970 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
17980 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
17990 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
179a0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
179b0 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
179c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
179d0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
179e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
179f0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17a00 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
17a10 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
17a20 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
17a30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
17a40 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
17a50 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20  - aOp);.        
17a60 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17a70 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
17a80 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
17a90 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
17aa0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
17ab0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
17ac0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
17ad0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
17ae0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nt = 0;.        
17af0 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20  rc = p->rc;.    
17b00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
17b10 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61   int isSchemaCha
17b20 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61  nge;.        iSa
17b30 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53  vepoint = db->nS
17b40 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65  avepoint - iSave
17b50 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20  point - 1;.     
17b60 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
17b70 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b  OINT_ROLLBACK ){
17b80 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
17b90 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d  emaChange = (db-
17ba0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
17bb0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
17bc0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  0;.          for
17bd0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
17be0 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
17bf0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
17c00 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75  e3BtreeTripAllCu
17c10 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69  rsors(db->aDb[ii
17c20 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20  ].pBt,.         
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
17c50 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
17c60 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ACK,.           
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c80 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63              isSc
17c90 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a  hemaChange==0);.
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
17cb0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
17cc0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17cd0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
17ce0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
17cf0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73  se{.          is
17d00 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30  SchemaChange = 0
17d10 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17d20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
17d30 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
17d40 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
17d50 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
17d60 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
17d70 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
17d80 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
17d90 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
17da0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
17db0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
17dc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17dd0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17de0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73  }.        if( is
17df0 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a  SchemaChange ){.
17e00 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
17e10 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
17e20 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
17e30 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
17e40 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
17e50 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
17e60 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
17e70 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
17e80 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
17e90 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
17ea0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
17eb0 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
17ec0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
17ed0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
17ee0 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
17ef0 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
17f00 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
17f10 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
17f20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
17f30 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
17f40 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
17f50 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
17f60 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
17f70 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
17f80 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
17f90 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
17fa0 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
17fb0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
17fc0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
17fd0 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
17fe0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
17ff0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
18000 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
18010 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
18020 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
18030 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
18040 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
18050 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
18060 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
18070 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
18080 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
18090 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
180a0 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
180b0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
180c0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
180d0 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
180e0 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
180f0 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
18100 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
18110 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
18120 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
18130 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
18140 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
18150 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
18160 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
18170 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
18180 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
18190 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
181a0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
181b0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
181c0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
181d0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
181e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
181f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
18200 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
18210 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
18220 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
18230 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
18240 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
18250 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
18260 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
18270 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
18280 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20  sTransaction || 
18290 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
182a0 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
182b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
182c0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
182d0 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
182e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
182f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18300 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18310 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
18320 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b    }.  }..  break
18330 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18340 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
18350 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
18360 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
18370 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
18380 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
18390 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
183a0 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
183b0 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
183c0 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
183d0 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
183e0 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
183f0 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
18400 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61  his one), then a
18410 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e   ROLLBACK fails.
18420 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73    A COMMIT fails
18430 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65   if.** there are
18440 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20   active writing 
18450 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d  VMs or active VM
18460 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65  s that use share
18470 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54  d cache..**.** T
18480 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
18490 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f  causes the VM to
184a0 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   halt..*/.case O
184b0 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a  P_AutoCommit: {.
184c0 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74    int desiredAut
184d0 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69  oCommit;.  int i
184e0 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20  Rollback;.  int 
184f0 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73  turnOnAC;..  des
18500 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d  iredAutoCommit =
18510 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c   pOp->p1;.  iRol
18520 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  lback = pOp->p2;
18530 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65  .  turnOnAC = de
18540 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
18550 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && !db->autoComm
18560 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65  it;.  assert( de
18570 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
18580 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
18590 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
185a0 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
185b0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
185c0 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a  iRollback==0 );.
185d0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56    assert( db->nV
185e0 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20  dbeActive>0 );  
185f0 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
18600 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
18610 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
18620 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
18630 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
18640 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  & !iRollback && 
18650 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
18660 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
18670 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
18680 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
18690 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  IT and other VMs
186a0 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20   are writing.   
186b0 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
186c0 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
186d0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
186e0 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
186f0 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
18700 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
18710 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63  ror(p, "cannot c
18720 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
18730 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  n - ".          
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
18750 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
18760 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
18770 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
18780 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  Y;.  }else if( d
18790 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
187a0 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
187b0 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
187c0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
187d0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
187e0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
187f0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
18800 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49  backAll(db, SQLI
18810 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
18820 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  K);.      db->au
18830 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
18840 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
18850 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
18860 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
18870 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
18880 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
18890 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
188a0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
188b0 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
188c0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d  utoCommit;.    }
188d0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
188e0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
188f0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
18900 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
18910 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
18920 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
18930 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
18940 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
18950 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
18960 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
18970 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
18980 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
18990 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
189a0 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20  tement==0 );.   
189b0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
189c0 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20  epoints(db);.   
189d0 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
189e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
189f0 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  c = SQLITE_DONE;
18a00 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
18a10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
18a20 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  ROR;.    }.    g
18a30 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
18a40 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
18a50 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
18a60 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69  ,.        (!desi
18a70 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22  redAutoCommit)?"
18a80 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74  cannot start a t
18a90 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69  ransaction withi
18aa0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
18ab0 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c  :(.        (iRol
18ac0 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72  lback)?"cannot r
18ad0 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61  ollback - no tra
18ae0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
18af0 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ve":.           
18b00 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
18b10 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e  commit - no tran
18b20 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
18b30 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a  e"));.         .
18b40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18b50 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65  ERROR;.  }.  bre
18b60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
18b70 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
18b80 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
18b90 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73  ** Begin a trans
18ba0 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61  action on databa
18bb0 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73  se P1 if a trans
18bc0 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c  action is not al
18bd0 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e  ready.** active.
18be0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
18bf0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
18c00 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
18c10 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69  is started, or i
18c20 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61  f a .** read-tra
18c30 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65  nsaction is alre
18c40 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69  ady active, it i
18c50 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20  s upgraded to a 
18c60 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
18c70 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  n..** If P2 is z
18c80 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
18c90 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
18ca0 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  started..**.** P
18cb0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
18cc0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
18cd0 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
18ce0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
18cf0 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
18d00 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
18d10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
18d20 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
18d30 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
18d40 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
18d50 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
18d60 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
18d70 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
18d80 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
18d90 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
18da0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
18db0 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
18dc0 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
18dd0 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
18de0 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
18df0 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
18e00 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
18e10 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
18e20 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
18e30 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
18e40 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
18e50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
18e60 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
18e70 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
18e80 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
18e90 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
18ea0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
18eb0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
18ec0 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
18ed0 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
18ee0 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
18ef0 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
18f00 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
18f10 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
18f20 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
18f30 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
18f40 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
18f50 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
18f60 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
18f70 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
18f80 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
18f90 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
18fa0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
18fb0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
18fc0 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
18fd0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
18fe0 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
18ff0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
19000 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
19010 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
19020 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69  f P5!=0 then thi
19030 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68  s opcode also ch
19040 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20  ecks the schema 
19050 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50  cookie against P
19060 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68  3.** and the sch
19070 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
19080 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50  ounter against P
19090 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  4..** The cookie
190a0 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
190b0 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
190c0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
190d0 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
190e0 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
190f0 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
19100 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
19110 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
19120 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
19130 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
19140 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
19150 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68  e schema.  If th
19160 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b  e schema.** cook
19170 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73  ie in P3 differs
19180 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61   from the schema
19190 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64   cookie in the d
191a0 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f  atabase header o
191b0 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65  r.** if the sche
191c0 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
191d0 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66  unter in P4 diff
191e0 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ers from the cur
191f0 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69  rent.** generati
19200 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e  on counter, then
19210 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   an SQLITE_SCHEM
19220 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65  A error is raise
19230 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a  d and execution.
19240 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73  ** halts.  The s
19250 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72  qlite3_step() wr
19260 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d  apper function m
19270 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70  ight then reprep
19280 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65  are the.** state
19290 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69  ment and rerun i
192a0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
192b0 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ning..*/.case OP
192c0 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
192d0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
192e0 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
192f0 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74   iGen;..  assert
19300 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
19310 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
19320 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f  eadOnly==0 || pO
19330 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p2==0 );.  as
19340 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
19350 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
19360 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19370 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
19380 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
19390 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  1) );.  if( pOp-
193a0 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  >p2 && (db->flag
193b0 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79  s & SQLITE_Query
193c0 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20  Only)!=0 ){.    
193d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44  rc = SQLITE_READ
193e0 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61  ONLY;.    goto a
193f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19400 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64  r;.  }.  pBt = d
19410 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19420 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
19430 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
19440 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
19450 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
19460 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
19470 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
19480 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20  SNAPSHOT );.    
19490 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
194a0 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45  LITE_BUSY_RECOVE
194b0 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20 28 72  RY );.    if( (r
194c0 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
194d0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
194e0 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
194f0 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 70 2d  - aOp);.      p-
19500 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20  >rc = rc;.      
19510 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
19520 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
19530 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
19540 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
19550 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19560 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
19570 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
19580 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
19590 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
195a0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
195b0 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
195c0 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
195d0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
195e0 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
195f0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
19600 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
19610 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
19620 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
19630 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
19640 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
19650 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
19660 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
19670 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
19680 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
19690 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
196a0 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
196b0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
196c0 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
196d0 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
196e0 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
196f0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
19700 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
19710 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
19720 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
19730 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
19740 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
19750 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
19760 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
19770 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
19780 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
19790 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
197a0 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
197b0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
197c0 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
197d0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
197e0 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
197f0 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
19800 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
19810 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
19820 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
19830 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
19840 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
19850 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
19860 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
19870 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
19880 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20  ..    /* Gather 
19890 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
198a0 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68  on number for ch
198b0 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49  ecking:.    ** I
198c0 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
198d0 3a 20 52 2d 33 32 31 39 35 2d 31 39 34 36 35 20  : R-32195-19465 
198e0 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  The schema versi
198f0 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 53 51  on is used by SQ
19900 4c 69 74 65 0a 20 20 20 20 2a 2a 20 65 61 63 68  Lite.    ** each
19910 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73   time a query is
19920 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73   executed to ens
19930 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ure that the int
19940 65 72 6e 61 6c 20 63 61 63 68 65 20 6f 66 20 74  ernal cache of t
19950 68 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  he.    ** schema
19960 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
19970 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
19980 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
19990 63 68 65 6d 61 20 6f 66 20 74 68 65 0a 20 20 20  chema of the.   
199a0 20 2a 2a 20 64 61 74 61 62 61 73 65 20 61 67 61   ** database aga
199b0 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63  inst which the c
199c0 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73  ompiled query is
199d0 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74   actually execut
199e0 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ed..    */.    s
199f0 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
19a00 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43  ta(pBt, BTREE_SC
19a10 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75  HEMA_VERSION, (u
19a20 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
19a30 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62    iGen = db->aDb
19a40 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
19a50 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a  a->iGeneration;.
19a60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65    }else{.    iGe
19a70 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20  n = iMeta = 0;. 
19a80 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
19a90 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
19aa0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
19ab0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
19ac0 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70  5 && (iMeta!=pOp
19ad0 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f  ->p3 || iGen!=pO
19ae0 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20  p->p4.i) ){.    
19af0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
19b00 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
19b10 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
19b20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
19b30 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
19b40 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
19b50 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
19b60 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
19b70 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
19b80 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
19b90 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
19ba0 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
19bb0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
19bc0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
19bd0 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
19be0 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
19bf0 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
19c00 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19c10 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
19c20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
19c30 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
19c40 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
19c50 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
19c60 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
19c70 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
19c80 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
19c90 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
19ca0 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
19cb0 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
19cc0 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
19cd0 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
19ce0 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
19cf0 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
19d00 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
19d10 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
19d20 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
19d30 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
19d40 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
19d50 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
19d60 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
19d70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
19d80 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
19d90 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
19da0 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
19db0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
19dc0 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
19dd0 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
19de0 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
19df0 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
19e00 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
19e10 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
19e20 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
19e30 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
19e40 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
19e50 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
19e60 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
19e70 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
19e80 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
19e90 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p1);.    }.    
19ea0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
19eb0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19ec0 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
19ed0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19ee0 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
19ef0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
19f00 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
19f10 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
19f20 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
19f30 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
19f40 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
19f50 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
19f60 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
19f70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
19f80 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
19f90 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
19fa0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
19fb0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
19fc0 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
19fd0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19fe0 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
19ff0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
1a000 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
1a010 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
1a020 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
1a030 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
1a040 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
1a050 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
1a060 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
1a070 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
1a080 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
1a090 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
1a0a0 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
1a0b0 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
1a0c0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
1a0d0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a0f0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
1a100 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62  iMeta;.  int iDb
1a110 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b  ;.  int iCookie;
1a120 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
1a130 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44  IsReader );.  iD
1a140 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  b = pOp->p1;.  i
1a150 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  Cookie = pOp->p3
1a160 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a170 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p3<SQLITE_N_BTR
1a180 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
1a190 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1a1a0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1a1b0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
1a1c0 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20  iDb].pBt!=0 );. 
1a1d0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1a1e0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1a1f0 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c  , iDb) );..  sql
1a200 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
1a210 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
1a220 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
1a230 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
1a240 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
1a250 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
1a260 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
1a270 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1a280 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
1a290 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
1a2a0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
1a2b0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1a2c0 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
1a2d0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
1a2e0 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
1a2f0 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
1a300 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
1a310 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
1a320 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
1a330 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
1a340 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
1a350 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
1a360 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
1a370 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
1a380 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1a390 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
1a3a0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1a3b0 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
1a3c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
1a3d0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
1a3e0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1a3f0 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
1a400 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
1a410 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
1a420 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
1a430 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
1a440 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
1a450 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
1a460 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
1a470 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
1a480 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
1a490 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1a4a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
1a4b0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1a4c0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1a4d0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
1a4e0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
1a4f0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1a500 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1a510 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
1a520 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
1a530 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a540 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1a550 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
1a560 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33  p1, 0) );.  pIn3
1a570 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1a580 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
1a590 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1a5a0 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
1a5b0 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
1a5c0 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
1a5d0 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
1a5e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
1a5f0 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
1a600 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e  Bt, pOp->p2, (in
1a610 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  t)pIn3->u.i);.  
1a620 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1a630 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
1a640 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
1a650 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1a660 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
1a670 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
1a680 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
1a690 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1a6a0 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
1a6b0 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  = (int)pIn3->u.i
1a6c0 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
1a6d0 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
1a6e0 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
1a6f0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1a700 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
1a710 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
1a720 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
1a730 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
1a740 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
1a750 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28  >file_format = (
1a760 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  u8)pIn3->u.i;.  
1a770 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
1a780 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
1a790 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
1a7a0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
1a7b0 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
1a7c0 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
1a7d0 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
1a7e0 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
1a7f0 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
1a800 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
1a810 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
1a820 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1a830 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
1a840 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1a850 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
1a860 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1a870 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1a880 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1a890 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
1a8a0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
1a8b0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
1a8c0 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
1a8d0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
1a8e0 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
1a8f0 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
1a900 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
1a910 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
1a920 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
1a930 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
1a940 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
1a950 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
1a960 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
1a970 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
1a980 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
1a990 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
1a9a0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
1a9b0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
1a9c0 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
1a9d0 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
1a9e0 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
1a9f0 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
1aa00 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
1aa10 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
1aa20 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
1aa30 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
1aa40 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
1aa50 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
1aa60 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1aa70 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
1aa80 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
1aa90 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
1aaa0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
1aab0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
1aac0 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
1aad0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
1aae0 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
1aaf0 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
1ab00 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
1ab10 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
1ab20 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
1ab30 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
1ab40 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
1ab50 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
1ab60 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
1ab70 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
1ab80 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
1ab90 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
1aba0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
1abb0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
1abc0 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
1abd0 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
1abe0 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
1abf0 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
1ac00 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
1ac10 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
1ac20 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
1ac30 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
1ac40 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
1ac50 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
1ac60 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
1ac70 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
1ac80 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
1ac90 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
1aca0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
1acb0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1acc0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1acd0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1ace0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1acf0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1ad00 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1ad10 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1ad20 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1ad30 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1ad40 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1ad50 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1ad60 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1ad70 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1ad80 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1ad90 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1ada0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1adb0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1adc0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1add0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1ade0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1adf0 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
1ae00 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e  * See also: Open
1ae10 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78  Write, ReopenIdx
1ae20 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
1ae30 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50  eopenIdx P1 P2 P
1ae40 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1ae50 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1ae60 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  =P3.**.** The Re
1ae70 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77  openIdx opcode w
1ae80 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1ae90 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70  e ReadOpen excep
1aea0 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a  t that it first.
1aeb0 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
1aec0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f   if the cursor o
1aed0 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20  n P1 is already 
1aee0 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74  open with a root
1aef0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
1af00 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20  of P2 and if it 
1af10 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62  is this opcode b
1af20 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20  ecomes a no-op. 
1af30 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1af40 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
1af50 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  r is already ope
1af60 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e  n, do not reopen
1af70 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52   it..**.** The R
1af80 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1af90 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
1afa0 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20   with P5==0 and 
1afb0 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a  with P4 being.**
1afc0 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62   a P4_KEYINFO ob
1afd0 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f  ject.  Furthermo
1afe0 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65  re, the P3 value
1aff0 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1b000 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74  e as.** every ot
1b010 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72  her ReopenIdx or
1b020 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68   OpenRead for th
1b030 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75  e same cursor nu
1b040 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  mber..**.** See 
1b050 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63  the OpenRead opc
1b060 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  ode documentatio
1b070 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
1b080 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1b090 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1b0a0 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
1b0b0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1b0c0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1b0d0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1b0e0 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1b0f0 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
1b100 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
1b110 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
1b120 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
1b130 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
1b140 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1b150 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
1b160 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
1b170 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1b180 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1b190 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1b1a0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1b1b0 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1b1c0 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1b1d0 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1b1e0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1b1f0 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1b200 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1b210 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1b220 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1b230 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1b240 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1b250 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1b260 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1b270 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1b280 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1b290 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1b2a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1b2b0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1b2c0 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
1b2d0 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
1b2e0 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
1b2f0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
1b300 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
1b310 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1b320 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
1b330 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
1b340 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1b350 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
1b360 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
1b370 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
1b380 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
1b390 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
1b3a0 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
1b3b0 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
1b3c0 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
1b3d0 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
1b3e0 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
1b3f0 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
1b400 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  .case OP_ReopenI
1b410 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65  dx: {.  int nFie
1b420 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  ld;.  KeyInfo *p
1b430 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70  KeyInfo;.  int p
1b440 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  2;.  int iDb;.  
1b450 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74  int wrFlag;.  Bt
1b460 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43  ree *pX;.  VdbeC
1b470 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44  ursor *pCur;.  D
1b480 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72  b *pDb;..  asser
1b490 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1b4a0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1b4b0 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1b4c0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1b4d0 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1b4e0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
1b4f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
1b500 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e  ( pCur && pCur->
1b510 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70  pgnoRoot==(u32)p
1b520 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73  Op->p2 ){.    as
1b530 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d  sert( pCur->iDb=
1b540 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20  =pOp->p3 );     
1b550 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62   /* Guaranteed b
1b560 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  y the code gener
1b570 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ator */.    goto
1b580 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74   open_cursor_set
1b590 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a  _hints;.  }.  /*
1b5a0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
1b5b0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1b5c0 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20  open or is open 
1b5d0 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20  on a different. 
1b5e0 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20   ** index, then 
1b5f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  fall through int
1b600 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f  o OP_OpenRead to
1b610 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20   force a reopen 
1b620 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  */.case OP_OpenR
1b630 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
1b640 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72  nWrite:..  asser
1b650 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1b660 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20  OP_OpenWrite || 
1b670 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1b680 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1b690 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1b6a0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1b6b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b6c0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1b6d0 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Read || pOp->opc
1b6e0 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64  ode==OP_ReopenId
1b6f0 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70  x.          || p
1b700 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
1b710 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  ..  if( p->expir
1b720 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  ed ){.    rc = S
1b730 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
1b740 42 41 43 4b 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BACK;.    break;
1b750 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
1b760 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
1b770 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
1b780 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
1b790 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
1b7a0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1b7b0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1b7c0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1b7d0 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
1b7e0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1b7f0 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
1b800 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
1b810 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
1b820 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1b830 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
1b840 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46  .    assert( OPF
1b850 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42  LAG_FORDELETE==B
1b860 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29  TREE_FORDELETE )
1b870 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42  ;.    wrFlag = B
1b880 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f  TREE_WRCSR | (pO
1b890 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46  p->p5 & OPFLAG_F
1b8a0 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61  ORDELETE);.    a
1b8b0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1b8c0 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1b8d0 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
1b8e0 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
1b8f0 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
1b900 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1b910 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
1b920 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1b930 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
1b940 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1b950 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
1b960 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
1b970 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1b980 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49  >p5 & OPFLAG_P2I
1b990 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65  SREG ){.    asse
1b9a0 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
1b9b0 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e  assert( p2<=(p->
1b9c0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
1b9d0 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
1b9e0 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
1b9f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1ba00 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
1ba10 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
1ba20 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1ba30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
1ba40 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1ba50 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
1ba60 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
1ba70 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
1ba80 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
1ba90 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
1baa0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1bab0 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
1bac0 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
1bad0 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
1bae0 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
1baf0 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
1bb00 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
1bb10 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
1bb20 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
1bb30 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
1bb40 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
1bb50 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
1bb60 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1bb70 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  tion. */.    if(
1bb80 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b   NEVER(p2<2) ) {
1bb90 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1bba0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
1bbb0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1bbc0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1bbd0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
1bbe0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1bbf0 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
1bc00 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1bc10 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
1bc20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1bc30 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1bc40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1bc50 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1bc60 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
1bc70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b  KeyInfo->nField+
1bc80 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c  pKeyInfo->nXFiel
1bc90 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  d;.  }else if( p
1bca0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1bcb0 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
1bcc0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1bcd0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1bce0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1bcf0 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20  sert( nField>=0 
1bd00 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
1bd10 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20  Field==0 );  /* 
1bd20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47  Table with INTEG
1bd30 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ER PRIMARY KEY a
1bd40 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20  nd nothing else 
1bd50 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
1bd60 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1bd70 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69  p->p1, nField, i
1bd80 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  Db, CURTYPE_BTRE
1bd90 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  E);.  if( pCur==
1bda0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1bdb0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
1bdc0 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73   = 1;.  pCur->is
1bdd0 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70  Ordered = 1;.  p
1bde0 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20  Cur->pgnoRoot = 
1bdf0 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  p2;.  rc = sqlit
1be00 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1be10 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1be20 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63  eyInfo, pCur->uc
1be30 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  .pCursor);.  pCu
1be40 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1be50 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1be60 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1be70 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1be80 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1be90 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1bea0 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1beb0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1bec0 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1bed0 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1bee0 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1bef0 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1bf00 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1bf10 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1bf20 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1bf30 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1bf40 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1bf50 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1bf60 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1bf70 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1bf80 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1bf90 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1bfa0 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1bfb0 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1bfc0 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1bfd0 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1bfe0 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1bff0 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
1c000 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1c010 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51  CSR );.#ifdef SQ
1c020 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
1c030 4f 52 5f 48 49 4e 54 0a 20 20 74 65 73 74 63 61  OR_HINT.  testca
1c040 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  se( pOp->p2 & OP
1c050 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23  FLAG_SEEKEQ );.#
1c060 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42  endif.  sqlite3B
1c070 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c  treeCursorHintFl
1c080 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75  ags(pCur->uc.pCu
1c090 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  rsor,.          
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0b0 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
1c0c0 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c  (OPFLAG_BULKCSR|
1c0d0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29  OPFLAG_SEEKEQ)))
1c0e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c0f0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68   Opcode: OpenEph
1c100 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50  emeral P1 P2 * P
1c110 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1c120 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1c130 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1c140 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61  rsor P1 to a tra
1c150 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a  nsient table..**
1c160 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   The cursor is a
1c170 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61  lways opened rea
1c180 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20  d/write even if 
1c190 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1c1a0 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e  abase is read-on
1c1b0 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72  ly.  The ephemer
1c1c0 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64  al.** table is d
1c1d0 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63  eleted automatic
1c1e0 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75  ally when the cu
1c1f0 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a  rsor is closed..
1c200 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
1c210 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1c220 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72  s in the ephemer
1c230 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
1c240 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
1c250 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
1c260 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
1c270 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
1c280 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
1c290 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
1c2a0 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
1c2b0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
1c2c0 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
1c2d0 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
1c2e0 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
1c2f0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  index..**.** The
1c300 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61   P5 parameter ca
1c310 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74  n be a mask of t
1c320 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73  he BTREE_* flags
1c330 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62   defined.** in b
1c340 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66  tree.h.  These f
1c350 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70  lags control asp
1c360 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72  ects of the oper
1c370 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
1c380 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45  btree.  The BTRE
1c390 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61  E_OMIT_JOURNAL a
1c3a0 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20  nd BTREE_SINGLE 
1c3b0 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64  flags are.** add
1c3c0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1c3d0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1c3e0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31  OpenAutoindex P1
1c3f0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
1c400 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1c410 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
1c420 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73  code works the s
1c430 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70  ame as OP_OpenEp
1c440 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73  hemeral.  It has
1c450 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20   a.** different 
1c460 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75  name to distingu
1c470 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61  ish its use.  Ta
1c480 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
1c490 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70  ng.** by this op
1c4a0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1c4b0 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61  d for automatica
1c4c0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e  lly created tran
1c4d0 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73  sient.** indices
1c4e0 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61   in joins..*/.ca
1c4f0 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e  se OP_OpenAutoin
1c500 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70  dex: .case OP_Op
1c510 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
1c520 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1c530 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1c540 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63  yInfo;..  static
1c550 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c   const int vfsFl
1c560 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
1c570 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
1c580 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1c590 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
1c5a0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1c5b0 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
1c5c0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1c5d0 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
1c5e0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1c5f0 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
1c600 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c610 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1c620 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1c630 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1c640 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1c650 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1c660 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1c670 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1c680 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1c690 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1c6a0 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1c6b0 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  al = 1;.  rc = s
1c6c0 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
1c6d0 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c  db->pVfs, 0, db,
1c6e0 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20   &pCx->pBt, .   
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c700 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1c710 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1c720 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1c730 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1c740 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1c750 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1c760 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1c770 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29  ans(pCx->pBt, 1)
1c780 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
1c790 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c7a0 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
1c7b0 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
1c7c0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
1c7d0 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a  by calling.    *
1c7e0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
1c7f0 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
1c800 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b   the BTREE_BLOBK
1c810 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  EY flag before. 
1c820 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
1c830 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
1c840 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
1c850 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
1c860 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
1c870 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
1c880 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
1c890 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e  ge 1 (an BLOB_IN
1c8a0 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
1c8b0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65   */.    if( (pKe
1c8c0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1c8d0 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a  pKeyInfo)!=0 ){.
1c8e0 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
1c8f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1c900 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1c910 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
1c920 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c930 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
1c940 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
1c950 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1c960 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1c970 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1c980 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1c990 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1c9a0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1c9b0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1c9c0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1c9d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1c9e0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1c9f0 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1ca00 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1ca10 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1ca20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ca30 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1ca40 42 74 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f  Bt, pgno, BTREE_
1ca50 57 52 43 53 52 2c 20 70 4b 65 79 49 6e 66 6f 2c  WRCSR, pKeyInfo,
1ca60 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1ca70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1ca80 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1ca90 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1caa0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1cab0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1cac0 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
1cad0 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 20  T, BTREE_WRCSR, 
1cae0 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  0, pCx->uc.pCurs
1caf0 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
1cb00 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1cb10 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73   }.  }.  pCx->is
1cb20 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1cb30 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1cb40 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  RED);.  break;.}
1cb50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
1cb60 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33  terOpen P1 P2 P3
1cb70 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1cb80 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1cb90 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1cba0 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1cbb0 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1cbc0 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1cbd0 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1cbe0 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1cbf0 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1cc00 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1cc10 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1cc20 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a   algorithm..**.*
1cc30 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33  * If argument P3
1cc40 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1cc50 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20  en it indicates 
1cc60 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
1cc70 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68  may.** assume th
1cc80 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74  at a stable sort
1cc90 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65   considering the
1cca0 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73   first P3 fields
1ccb0 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20   of each.** key 
1ccc0 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f  is sufficient to
1ccd0 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71   produce the req
1cce0 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a  uired results..*
1ccf0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1cd00 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1cd10 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1cd20 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1cd30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1cd40 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1cd50 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1cd60 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1cd70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54  Op->p2, -1, CURT
1cd80 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69  YPE_SORTER);.  i
1cd90 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1cda0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1cdb0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1cdc0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
1cdd0 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1cde0 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1cdf0 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1ce00 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1ce10 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20  C(db) );.  rc = 
1ce20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
1ce30 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70  rInit(db, pOp->p
1ce40 33 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b  3, pCx);.  break
1ce50 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1ce60 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20  SequenceTest P1 
1ce70 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1ce80 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72  psis: if( cursor
1ce90 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20  [P1].ctr++ ) pc 
1cea0 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  = P2.**.** P1 is
1ceb0 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
1cec0 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63  . If the sequenc
1ced0 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  e counter is cur
1cee0 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d  rently zero, jum
1cef0 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61  p.** to P2. Rega
1cf00 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
1cf10 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
1cf20 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72  p is taken, incr
1cf30 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65  ement the.** the
1cf40 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e   sequence value.
1cf50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1cf60 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64  enceTest: {.  Vd
1cf70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1cf80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1cf90 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1cfa0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1cfb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1cfc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1cfd0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
1cfe0 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f    if( (pC->seqCo
1cff0 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20  unt++)==0 ){.   
1d000 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1d010 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1d020 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1d030 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1d040 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1d050 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  : P3 columns in 
1d060 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  r[P2].**.** Open
1d070 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1d080 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1d090 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1d0a0 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1d0b0 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1d0c0 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1d0d0 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
1d0e0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1d0f0 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1d100 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
1d110 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
1d120 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
1d130 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
1d140 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
1d150 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
1d160 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1d170 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
1d180 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
1d190 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
1d1a0 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
1d1b0 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
1d1c0 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
1d1d0 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
1d1e0 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
1d1f0 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
1d200 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
1d210 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
1d220 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
1d230 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
1d240 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
1d250 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
1d260 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
1d270 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
1d280 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
1d290 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1d2a0 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
1d2b0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
1d2c0 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
1d2d0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
1d2e0 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
1d2f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1d300 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1d310 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1d320 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29  rt( pOp->p3>=0 )
1d330 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1d340 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1d350 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1d360 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  , CURTYPE_PSEUDO
1d370 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1d380 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1d390 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1d3a0 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73 65  1;.  pCx->uc.pse
1d3b0 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
1d3c0 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1d3d0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73  Table = 1;.  ass
1d3e0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1d3f0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1d400 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
1d410 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1d420 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
1d430 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1d440 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
1d450 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
1d460 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
1d470 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
1d480 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
1d490 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
1d4a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d4b0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d4c0 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
1d4d0 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1d4e0 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
1d4f0 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
1d500 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
1d510 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
1d520 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1d530 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
1d540 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  SK./* Opcode: Co
1d550 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a  lumnsUsed P1 * *
1d560 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1d570 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f   opcode (which o
1d580 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51  nly exists if SQ
1d590 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65  Lite was compile
1d5a0 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  d with.** SQLITE
1d5b0 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55  _ENABLE_COLUMN_U
1d5c0 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69  SED_MASK) identi
1d5d0 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d  fies which colum
1d5e0 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62  ns of the.** tab
1d5f0 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20  le or index for 
1d600 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73  cursor P1 are us
1d610 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d  ed.  P4 is a 64-
1d620 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28  bit integer.** (
1d630 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69  P4_INT64) in whi
1d640 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20  ch the first 63 
1d650 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72  bits are one for
1d660 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20   each of the.** 
1d670 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73  first 63 columns
1d680 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
1d690 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20   index that are 
1d6a0 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a  actually used.**
1d6b0 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20   by the cursor. 
1d6c0 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   The high-order 
1d6d0 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e  bit is set if an
1d6e0 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a  y column after.*
1d6f0 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73  * the 64th is us
1d700 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ed..*/.case OP_C
1d710 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20  olumnsUsed: {.  
1d720 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1d730 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1d740 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1d750 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
1d760 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
1d770 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65  );.  pC->maskUse
1d780 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e  d = *(u64*)pOp->
1d790 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
1d7a0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
1d7b0 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1d7c0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1d7d0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1d7e0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1d7f0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1d800 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1d810 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1d820 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1d830 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1d840 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1d850 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1d860 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1d870 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1d880 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1d890 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1d8a0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1d8b0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1d8c0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1d8d0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1d8e0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1d8f0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1d900 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1d910 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1d920 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1d930 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1d940 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1d950 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1d960 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1d970 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1d980 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1d990 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1d9a0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1d9b0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1d9c0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
1d9d0 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
1d9e0 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
1d9f0 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
1da00 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
1da10 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1da20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
1da30 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
1da40 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
1da50 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
1da60 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1da70 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
1da80 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
1da90 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
1daa0 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
1dab0 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20  wed by an IdxLE 
1dac0 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
1dad0 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
1dae0 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63  ** The IdxLE opc
1daf0 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
1db00 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
1db10 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
1db20 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70   the.** IdxLE op
1db30 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1db40 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
1db50 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
1db60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1db70 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1db80 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1db90 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
1dba0 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
1dbb0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
1dbc0 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
1dbd0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1dbe0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1dbf0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1dc00 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
1dc10 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ev..**.** See al
1dc20 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1dc30 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  und, SeekLt, See
1dc40 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
1dc50 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54  * Opcode: SeekGT
1dc60 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1dc70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1dc80 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1dc90 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1dca0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1dcb0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1dcc0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1dcd0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1dce0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1dcf0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1dd00 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1dd10 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1dd20 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1dd30 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1dd40 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1dd50 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1dd60 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1dd70 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1dd80 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1dd90 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1dda0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1ddb0 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1ddc0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1ddd0 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1dde0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1ddf0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1de00 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65  o records greate
1de10 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  r than .** the k
1de20 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1de30 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1de40 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1de50 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1de60 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1de70 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1de80 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
1de90 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
1dea0 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
1deb0 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
1dec0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1ded0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1dee0 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
1def0 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a   not Prev..**.**
1df00 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1df10 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1df20 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Lt, SeekGe, Seek
1df30 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1df40 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33   SeekLT P1 P2 P3
1df50 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73   P4 * .** Synops
1df60 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1df70 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1df80 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1df90 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1dfa0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1dfb0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1dfc0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1dfd0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1dfe0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1dff0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1e000 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1e010 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1e020 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1e030 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e040 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1e050 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1e060 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1e070 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1e080 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1e090 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1e0a0 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1e0b0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1e0c0 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1e0d0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1e0e0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1e0f0 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1e100 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1e110 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1e120 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1e130 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1e140 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1e150 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1e160 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
1e170 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
1e180 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
1e190 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
1e1a0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1e1b0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1e1c0 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
1e1d0 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a  , not Next..**.*
1e1e0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1e1f0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1e200 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1e210 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1e220 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50  : SeekLE P1 P2 P
1e230 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e240 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e250 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1e260 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1e270 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1e280 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1e290 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1e2a0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1e2b0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1e2c0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1e2d0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1e2e0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1e2f0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1e300 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1e310 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e320 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1e330 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1e340 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1e350 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1e360 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1e370 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1e380 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1e390 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1e3a0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1e3b0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1e3c0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1e3d0 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73   records .** les
1e3e0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1e3f0 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1e400 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1e410 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1e420 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1e430 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1e440 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1e450 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
1e460 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
1e470 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
1e480 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
1e490 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1e4a0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1e4b0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1e4c0 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
1e4d0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
1e4e0 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70  cursor P1 was op
1e4f0 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1e500 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61  PFLAG_SEEKEQ fla
1e510 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  g, then this.** 
1e520 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1e530 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63  ys land on a rec
1e540 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79  ord that equally
1e550 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c   equals the key,
1e560 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70   or.** else jump
1e570 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1e580 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75  P2.  When the cu
1e590 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53  rsor is OPFLAG_S
1e5a0 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f  EEKEQ, this.** o
1e5b0 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f  pcode must be fo
1e5c0 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78  llowed by an Idx
1e5d0 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  GE opcode with t
1e5e0 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74  he same argument
1e5f0 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20  s..** The IdxGE 
1e600 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  opcode will be s
1e610 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f  kipped if this o
1e620 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20  pcode succeeds, 
1e630 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45  but the.** IdxGE
1e640 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1e650 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  used on subseque
1e660 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f  nt loop iteratio
1e670 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ns..**.** See al
1e680 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e690 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1e6a0 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1e6b0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20  ase OP_SeekLT:  
1e6c0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e6d0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e6e0 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f  eekLE:         /
1e6f0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1e700 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
1e710 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e720 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e730 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
1e740 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1e750 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1e760 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
1e770 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e  n result */.  in
1e780 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  t oc;           
1e790 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20   /* Opcode */.  
1e7a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
1e7b0 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72     /* The cursor
1e7c0 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e   to seek */.  Un
1e7d0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20  packedRecord r; 
1e7e0 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73   /* The key to s
1e7f0 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  eek for */.  int
1e800 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
1e810 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
1e820 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69  umns or fields i
1e830 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69  n the key */.  i
1e840 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
1e850 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1e860 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1e870 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79   */.  int eqOnly
1e880 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  ;        /* Only
1e890 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d   interested in =
1e8a0 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20  = results */..  
1e8b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1e8c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1e8d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1e8e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
1e8f0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1e900 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1e910 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1e920 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
1e930 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1e940 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
1e950 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d  rt( OP_SeekLE ==
1e960 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a   OP_SeekLT+1 );.
1e970 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1e980 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGE == OP_SeekLT
1e990 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +2 );.  assert( 
1e9a0 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f  OP_SeekGT == OP_
1e9b0 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73  SeekLT+3 );.  as
1e9c0 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
1e9d0 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
1e9e0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
1e9f0 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70  =0 );.  oc = pOp
1ea00 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e  ->opcode;.  eqOn
1ea10 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75  ly = 0;.  pC->nu
1ea20 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65  llRow = 0;.#ifde
1ea30 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1ea40 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
1ea50 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
1ea60 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  f..  if( pC->isT
1ea70 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
1ea80 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  he BTREE_SEEK_EQ
1ea90 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65   flag is only se
1eaa0 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f  t on index curso
1eab0 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  rs */.    assert
1eac0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1ead0 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e  rsorHasHint(pC->
1eae0 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
1eaf0 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 20 29 3b  E_SEEK_EQ)==0 );
1eb00 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70  ..    /* The inp
1eb10 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
1eb20 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
1eb30 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
1eb40 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
1eb50 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
1eb60 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
1eb70 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
1eb80 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
1eb90 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65  o.    ** the see
1eba0 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74  k, so convert it
1ebb0 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20  . */.    pIn3 = 
1ebc0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1ebd0 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1ebe0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
1ebf0 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
1ec00 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
1ec10 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
1ec20 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  cAffinity(pIn3, 
1ec30 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b  0);.    }.    iK
1ec40 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1ec50 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a  IntValue(pIn3);.
1ec60 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50  .    /* If the P
1ec70 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
1ec80 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1ec90 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
1eca0 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f  ithout.    ** lo
1ecb0 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
1ecc0 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20  n, then special 
1ecd0 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65  processing is re
1ece0 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20  quired... */.   
1ecf0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1ed00 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
1ed10 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  ){.      if( (pI
1ed20 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1ed30 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
1ed40 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1ed50 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65   value cannot be
1ed60 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1ed70 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75  any kind of a nu
1ed80 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a  mber,.        **
1ed90 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69   then the seek i
1eda0 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20  s not possible, 
1edb0 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  so jump to P2 */
1edc0 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61  .        VdbeBra
1edd0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67  nchTaken(1,2); g
1ede0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
1edf0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1ee00 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1ee10 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1ee20 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
1ee30 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
1ee40 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1ee50 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1ee60 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
1ee70 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
1ee80 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
1ee90 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
1eea0 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
1eeb0 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
1eec0 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
1eed0 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
1eee0 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
1eef0 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
1ef00 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
1ef10 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
1ef20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
1ef30 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
1ef40 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f  f( pIn3->u.r<(do
1ef50 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
1ef60 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1ef70 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGE==(OP_Seek
1ef80 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GT-1) );.       
1ef90 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1efa0 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31  LT==(OP_SeekLE-1
1efb0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1efc0 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20  ert( (OP_SeekLE 
1efd0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1efe0 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1eff0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
1f000 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
1f010 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
1f020 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20  1) ) oc--;.     
1f030 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1f040 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1f050 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65  n iKey is smalle
1f060 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1f070 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1f080 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1f090 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c  stitute <= for <
1f0a0 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20   and > for >=.  
1f0b0 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  */.      else if
1f0c0 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75  ( pIn3->u.r>(dou
1f0d0 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1f0e0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1f0f0 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLE==(OP_SeekL
1f100 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T+1) );.        
1f110 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1f120 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29  T==(OP_SeekGE+1)
1f130 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1f140 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26  rt( (OP_SeekLT &
1f150 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1f160 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29  ekGE & 0x0001) )
1f170 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1f180 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1f190 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1f1a0 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20  ) ) oc++;.      
1f1b0 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20  }.    } .    rc 
1f1c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1f1d0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1f1e0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
1f1f0 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
1f200 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76  es);.    pC->mov
1f210 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
1f220 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
1f230 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69  _Delete */.    i
1f240 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1f250 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1f260 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f270 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  r;.    }.  }else
1f280 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63  {.    /* For a c
1f290 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42  ursor with the B
1f2a0 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e  TREE_SEEK_EQ hin
1f2b0 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53  t, only the OP_S
1f2c0 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a  eekGE and.    **
1f2d0 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64   OP_SeekLE opcod
1f2e0 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20  es are allowed, 
1f2f0 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62  and these must b
1f300 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
1f310 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79  llowed.    ** by
1f320 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20   an OP_IdxGT or 
1f330 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c  OP_IdxLT opcode,
1f340 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77   respectively, w
1f350 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
1f360 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
1f370 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1f380 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75  sorHasHint(pC->u
1f390 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  c.pCursor, BTREE
1f3a0 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20  _SEEK_EQ) ){.   
1f3b0 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20     eqOnly = 1;. 
1f3c0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f3d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
1f3e0 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  kGE || pOp->opco
1f3f0 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  de==OP_SeekLE );
1f400 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f410 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
1f420 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d  _IdxLT || pOp[1]
1f430 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  .opcode==OP_IdxG
1f440 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  T );.      asser
1f450 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f  t( pOp[1].p1==pO
1f460 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20  p[0].p1 );.     
1f470 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1f480 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b  p2==pOp[0].p2 );
1f490 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f4a0 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d  Op[1].p3==pOp[0]
1f4b0 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p3 );.      ass
1f4c0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69  ert( pOp[1].p4.i
1f4d0 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b  ==pOp[0].p4.i );
1f4e0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65  .    }..    nFie
1f4f0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1f500 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1f510 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1f520 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  2 );.    assert(
1f530 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
1f540 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1f550 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1f560 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
1f570 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20  nField;..    /* 
1f580 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66  The next line of
1f590 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61   code computes a
1f5a0 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20  s follows, only 
1f5b0 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20  faster:.    **  
1f5c0 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1f5d0 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GT || oc==OP_See
1f5e0 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20  kLE ){.    **   
1f5f0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
1f600 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65   -1;.    **   }e
1f610 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  lse{.    **     
1f620 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b  r.default_rc = +
1f630 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20  1;.    **   }.  
1f640 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75    */.    r.defau
1f650 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f  lt_rc = ((1 & (o
1f660 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20  c - OP_SeekLT)) 
1f670 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20  ? -1 : +1);.    
1f680 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1f690 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekGT || r.defau
1f6a0 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
1f6b0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1f6c0 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61  SeekLE || r.defa
1f6d0 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1f6e0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1f6f0 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66  _SeekGE || r.def
1f700 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20  ault_rc==+1 );. 
1f710 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1f720 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65  P_SeekLT || r.de
1f730 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1f740 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
1f750 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
1f760 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1f770 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
1f780 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
1f790 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
1f7a0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1f7b0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
1f7c0 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  dif.    ExpandBl
1f7d0 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20  ob(r.aMem);.    
1f7e0 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20  r.eqSeen = 0;.  
1f7f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f800 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1f810 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
1f820 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
1f830 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
1f840 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1f850 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1f860 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1f870 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20  .    if( eqOnly 
1f880 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29  && r.eqSeen==0 )
1f890 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1f8a0 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  res!=0 );.      
1f8b0 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f  goto seek_not_fo
1f8c0 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  und;.    }.  }. 
1f8d0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1f8e0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
1f8f0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1f900 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
1f910 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
1f920 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1f930 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
1f940 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1f950 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  E ){  assert( oc
1f960 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f  ==OP_SeekGE || o
1f970 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a  c==OP_SeekGT );.
1f980 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1f990 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1f9a0 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20  OP_SeekGT) ){.  
1f9b0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1f9c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f9d0 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e  treeNext(pC->uc.
1f9e0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1f9f0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1fa00 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1fa10 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1fa20 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
1fa30 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1fa40 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1fa50 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1fa60 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLT || oc==OP_
1fa70 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66  SeekLE );.    if
1fa80 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1fa90 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1faa0 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kLT) ){.      re
1fab0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1fac0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
1fad0 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43  evious(pC->uc.pC
1fae0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1faf0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1fb00 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1fb10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1fb20 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1fb30 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1fb40 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1fb50 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1fb60 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1fb70 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
1fb80 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
1fb90 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
1fba0 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
1fbb0 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70  treeEof(pC->uc.p
1fbc0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
1fbd0 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e   }.seek_not_foun
1fbe0 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  d:.  assert( pOp
1fbf0 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
1fc00 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
1fc10 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
1fc20 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
1fc30 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
1fc40 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20   if( eqOnly ){. 
1fc50 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1fc60 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
1fc70 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
1fc80 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
1fc90 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53  .    pOp++; /* S
1fca0 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74  kip the OP_IdxLt
1fcb0 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61   or OP_IdxGT tha
1fcc0 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d  t follows */.  }
1fcd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1fce0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20  Opcode: Seek P1 
1fcf0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1fd00 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b  psis:  intkey=r[
1fd10 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P2].**.** P1 is 
1fd20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75  an open table cu
1fd30 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61  rsor and P2 is a
1fd40 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20   rowid integer. 
1fd50 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20   Arrange.** for 
1fd60 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68  P1 to move so th
1fd70 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1fd80 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20  the rowid given 
1fd90 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  by P2..**.** Thi
1fda0 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  s is actually a 
1fdb0 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
1fdc0 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
1fdd0 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
1fde0 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
1fdf0 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
1fe00 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
1fe10 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
1fe20 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
1fe30 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
1fe40 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ns..*/.case OP_S
1fe50 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32  eek: {    /* in2
1fe60 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1fe70 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1fe80 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1fe90 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1fea0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1feb0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1fec0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1fed0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1fee0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1fef0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
1ff00 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
1ff10 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
1ff20 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1ff30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
1ff40 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26   = 0;.  pIn2 = &
1ff50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
1ff60 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1ff70 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  t = sqlite3VdbeI
1ff80 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
1ff90 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1ffa0 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b  eto = 1;.  break
1ffb0 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64  ;.}.  ../* Opcod
1ffc0 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
1ffd0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1ffe0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1fff0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
20000 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
20010 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
20020 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
20030 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
20040 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
20050 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
20060 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
20070 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
20080 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
20090 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
200a0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
200b0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
200c0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
200d0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
200e0 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
200f0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
20100 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
20110 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
20120 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
20130 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
20140 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
20150 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
20160 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
20170 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
20180 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65   where it can be
20190 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
201a0 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72 65  the forward dire
201b0 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74  ction.  The Next
201c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
201d0 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e  l work,.** but n
201e0 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73 74  ot the Prev inst
201f0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ruction..**.** S
20200 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
20210 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e  d, NoConflict, N
20220 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65  otExists. SeekGe
20230 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
20240 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
20250 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
20260 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
20270 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
20280 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
20290 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
202a0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
202b0 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
202c0 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
202d0 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
202e0 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
202f0 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
20300 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
20310 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
20320 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
20330 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
20340 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
20350 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
20360 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70  .** is not the p
20370 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
20380 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
20390 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
203a0 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64  P2.  If P1 .** d
203b0 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65  oes contain an e
203c0 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69  ntry whose prefi
203d0 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33  x matches the P3
203e0 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20  /P4 record then 
203f0 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
20400 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
20410 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
20420 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20   and P1 is left 
20430 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
20440 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  ** matching entr
20450 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
20460 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
20470 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
20480 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
20490 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e  nnot be.** advan
204a0 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69  ced in either di
204b0 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
204c0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
204d0 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f  xt and Prev.** o
204e0 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f  pcodes do not wo
204f0 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70  rk after this op
20500 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  eration..**.** S
20510 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
20520 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e  NotExists, NoCon
20530 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  flict.*/./* Opco
20540 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
20550 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
20560 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20570 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20580 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
20590 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
205a0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
205b0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
205c0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
205d0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
205e0 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
205f0 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
20600 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
20610 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
20620 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
20630 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
20640 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
20650 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
20660 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
20670 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
20680 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
20690 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
206a0 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
206b0 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
206c0 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
206d0 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
206e0 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
206f0 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
20700 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
20710 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
20720 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
20730 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
20740 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
20750 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
20760 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
20770 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
20780 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
20790 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
207a0 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
207b0 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
207c0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
207d0 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
207e0 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
207f0 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
20800 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
20810 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
20820 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
20830 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
20840 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
20850 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
20860 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
20870 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
20880 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
20890 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
208a0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
208b0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
208c0 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
208d0 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
208e0 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
208f0 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
20900 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20910 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c  NotFound, Found,
20920 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61   NotExists.*/.ca
20930 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  se OP_NoConflict
20940 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  :     /* jump, i
20950 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  n3 */.case OP_No
20960 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
20970 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
20980 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
20990 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
209a0 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
209b0 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74  adyExists;.  int
209c0 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74   takeJump;.  int
209d0 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
209e0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
209f0 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b  ;.  char *pFree;
20a00 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
20a10 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
20a20 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
20a30 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b    char aTempRec[
20a40 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
20a50 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b  packedRecord)) +
20a60 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b   sizeof(Mem)*4 +
20a70 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   7];..#ifdef SQL
20a80 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70  ITE_TEST.  if( p
20a90 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
20aa0 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69  oConflict ) sqli
20ab0 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b  te3_found_count+
20ac0 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73  +;.#endif..  ass
20ad0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
20ae0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
20af0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
20b00 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
20b10 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43  P4_INT32 );.  pC
20b20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20b30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
20b40 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  pC!=0 );.#ifdef 
20b50 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
20b60 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
20b70 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
20b80 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
20b90 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
20ba0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
20bb0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
20bc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20bd0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
20be0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
20bf0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70  sTable==0 );.  p
20c00 46 72 65 65 20 3d 20 30 3b 0a 20 20 69 66 28 20  Free = 0;.  if( 
20c10 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20  pOp->p4.i>0 ){. 
20c20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
20c30 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
20c40 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
20c50 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
20c60 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a   r.aMem = pIn3;.
20c70 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
20c80 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  <r.nField; ii++)
20c90 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
20ca0 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
20cb0 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20  em[ii]) );.     
20cc0 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61   ExpandBlob(&r.a
20cd0 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66  Mem[ii]);.#ifdef
20ce0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
20cf0 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47      if( ii ) REG
20d00 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
20d10 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b  >p3+ii, &r.aMem[
20d20 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  ii]);.#endif.   
20d30 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d   }.    pIdxKey =
20d40 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   &r;.  }else{.  
20d50 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69    pIdxKey = sqli
20d60 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61  te3VdbeAllocUnpa
20d70 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20  ckedRecord(.    
20d80 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f      pC->pKeyInfo
20d90 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65  , aTempRec, size
20da0 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70  of(aTempRec), &p
20db0 46 72 65 65 0a 20 20 20 20 29 3b 0a 20 20 20 20  Free.    );.    
20dc0 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
20dd0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
20de0 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
20df0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
20e00 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c   );.    ExpandBl
20e10 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73 71  ob(pIn3);.    sq
20e20 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55  lite3VdbeRecordU
20e30 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e  npack(pC->pKeyIn
20e40 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e  fo, pIn3->n, pIn
20e50 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a  3->z, pIdxKey);.
20e60 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64    }.  pIdxKey->d
20e70 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
20e80 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a 20   takeJump = 0;. 
20e90 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
20ea0 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20  ==OP_NoConflict 
20eb0 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68  ){.    /* For th
20ec0 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20  e OP_NoConflict 
20ed0 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65  opcode, take the
20ee0 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20   jump if any of 
20ef0 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74  the.    ** input
20f00 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c   fields are NULL
20f10 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20  , since any key 
20f20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c  with a NULL will
20f30 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66   not.    ** conf
20f40 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28  lict */.    for(
20f50 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79  ii=0; ii<pIdxKey
20f60 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  ->nField; ii++){
20f70 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78 4b  .      if( pIdxK
20f80 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61  ey->aMem[ii].fla
20f90 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
20fa0 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a 75 6d  .        takeJum
20fb0 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  p = 1;.        b
20fc0 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
20fd0 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73    }.  }.  rc = s
20fe0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
20ff0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
21000 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65  .pCursor, pIdxKe
21010 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
21020 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
21030 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69 66  db, pFree);.  if
21040 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
21050 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
21060 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  }.  pC->seekResu
21070 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65  lt = res;.  alre
21080 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73  adyExists = (res
21090 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ==0);.  pC->null
210a0 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45  Row = 1-alreadyE
210b0 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66  xists;.  pC->def
210c0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
210d0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
210e0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
210f0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
21100 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
21110 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
21120 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73  aken(alreadyExis
21130 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
21140 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
21150 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
21160 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
21170 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
21180 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64  takeJump||alread
21190 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20  yExists==0,2);. 
211a0 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20     if( takeJump 
211b0 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69 73 74  || !alreadyExist
211c0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
211d0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
211e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
211f0 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20  NotExists P1 P2 
21200 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
21210 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
21220 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
21230 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73   index of a curs
21240 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51  or open on an SQ
21250 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77  L table btree (w
21260 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b  ith integer.** k
21270 65 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20  eys).  P3 is an 
21280 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20  integer rowid.  
21290 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63  If P1 does not c
212a0 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20  ontain a record 
212b0 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33  with.** rowid P3
212c0 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
212d0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f  iately to P2.  O
212e0 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72  r, if P2 is 0, r
212f0 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  aise an.** SQLIT
21300 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e  E_CORRUPT error.
21310 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74   If P1 does cont
21320 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
21330 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
21340 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75  .** leave the cu
21350 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74  rsor pointing at
21360 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64   that record and
21370 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
21380 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
21390 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
213a0 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
213b0 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
213c0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
213d0 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
213e0 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
213f0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
21400 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
21410 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
21420 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
21430 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
21440 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
21450 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
21460 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
21470 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
21480 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
21490 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
214a0 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
214b0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
214c0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
214d0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
214e0 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61  NoConflict.*/.ca
214f0 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
21500 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
21510 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
21520 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
21530 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
21540 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
21550 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
21560 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
21570 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
21580 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
21590 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
215a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
215b0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
215c0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
215d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
215e0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
215f0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
21600 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
21610 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73   0;.#endif.  ass
21620 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21630 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
21640 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
21650 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
21660 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
21670 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
21680 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
21690 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d  es = 0;.  iKey =
216a0 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63   pIn3->u.i;.  rc
216b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
216c0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
216d0 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
216e0 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74   &res);.  assert
216f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21700 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70  || res==0 );.  p
21710 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
21720 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
21730 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
21740 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
21750 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
21760 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21770 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  ALE;.  pC->defer
21780 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
21790 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
217a0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43  (res!=0,2);.  pC
217b0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
217c0 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30  es;.  if( res!=0
217d0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
217e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
217f0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
21800 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
21810 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
21820 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65  _BKPT;.    }else
21830 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  {.      goto jum
21840 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
21850 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21860 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
21870 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
21880 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
21890 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ]=cursor[P1].ctr
218a0 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68  ++.**.** Find th
218b0 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  e next available
218c0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
218d0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
218e0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71  ** Write the seq
218f0 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74  uence number int
21900 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
21910 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e  * The sequence n
21920 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72  umber on the cur
21930 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  sor is increment
21940 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a  ed after this.**
21950 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a   instruction.  .
21960 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
21970 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
21980 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
21990 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
219a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
219b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
219c0 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
219d0 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73  ->p1]!=0 );.  as
219e0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
219f0 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70  Op->p1]->eCurTyp
21a00 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e!=CURTYPE_VTAB 
21a10 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
21a20 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
21a30 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
21a40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21a50 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
21a60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
21a70 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
21a80 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
21a90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
21aa0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65  ]=rowid.**.** Ge
21ab0 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20  t a new integer 
21ac0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61  record number (a
21ad0 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73  .k.a "rowid") us
21ae0 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f  ed as the key to
21af0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65   a table..** The
21b00 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
21b10 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
21b20 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69   used as a key i
21b30 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
21b40 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72  * table that cur
21b50 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
21b60 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  .  The new recor
21b70 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74  d number is writ
21b80 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74  ten.** written t
21b90 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
21ba0 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65  *.** If P3>0 the
21bb0 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74  n P3 is a regist
21bc0 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
21bd0 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42  rame of this VDB
21be0 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a  E that holds .**
21bf0 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65   the largest pre
21c00 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65  viously generate
21c10 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
21c20 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e   No new record n
21c30 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c  umbers are.** al
21c40 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
21c50 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65   than this value
21c60 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75  . When this valu
21c70 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61  e reaches its ma
21c80 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51  ximum, .** an SQ
21c90 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20  LITE_FULL error 
21ca0 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68  is generated. Th
21cb0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73  e P3 register is
21cc0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
21cd0 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  e '.** generated
21ce0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
21cf0 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73  This P3 mechanis
21d00 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
21d10 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
21d20 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
21d30 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
21d40 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
21d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
21d60 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20  t2 */.  i64 v;  
21d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21d80 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20  * The new rowid 
21d90 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
21da0 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  *pC;        /* C
21db0 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74  ursor of table t
21dc0 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f  o get the new ro
21dd0 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  wid */.  int res
21de0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21df0 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20  /* Result of an 
21e00 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
21e10 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  () */.  int cnt;
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21e30 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d  * Counter to lim
21e40 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
21e50 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d   searches */.  M
21e60 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
21e70 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
21e80 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73  r holding larges
21e90 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f  t rowid for AUTO
21ea0 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56  INCREMENT */.  V
21eb0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
21ec0 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72  ;     /* Root fr
21ed0 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a  ame of VDBE */..
21ee0 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d    v = 0;.  res =
21ef0 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   0;.  pOut = out
21f00 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
21f10 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
21f20 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21f30 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21f40 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21f50 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21f60 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21f70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
21f80 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
21f90 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
21fa0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
21fb0 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20  r!=0 );.  {.    
21fc0 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
21fd0 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
21fe0 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
21ff0 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
22000 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
22010 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
22020 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
22030 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
22040 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
22050 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
22060 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
22070 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
22080 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
22090 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
220a0 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
220b0 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
220c0 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
220d0 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
220e0 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
220f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
22100 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
22110 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
22120 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
22130 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
22140 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
22150 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
22160 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
22170 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
22180 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
22190 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
221a0 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
221b0 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
221c0 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
221d0 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
221e0 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
221f0 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
22200 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
22210 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
22220 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
22230 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
22240 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69  ->isTable );..#i
22250 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49  fdef SQLITE_32BI
22260 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69  T_ROWID.#   defi
22270 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37  ne MAX_ROWID 0x7
22280 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20  fffffff.#else.  
22290 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c    /* Some compil
222a0 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
222b0 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20  ut constants of 
222c0 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66  the form 0x7ffff
222d0 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20  fffffffffff..   
222e0 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c   ** Others compl
222f0 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66  ain about 0x7fff
22300 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e  fffffffffffffLL.
22310 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
22320 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20  macro seems.    
22330 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68  ** to provide th
22340 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65  e constant while
22350 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70   making all comp
22360 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20  ilers happy..   
22370 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d   */.#   define M
22380 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28  AX_ROWID  (i64)(
22390 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66   (((u64)0x7fffff
223a0 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29  ff)<<32) | (u64)
223b0 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e  0xffffffff ).#en
223c0 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43  dif..    if( !pC
223d0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
223e0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
223f0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
22400 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
22410 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
22420 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
22430 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
22440 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
22450 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
22460 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
22470 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
22480 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
22490 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  74 */.      }els
224a0 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
224b0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
224c0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d  ursorIsValid(pC-
224d0 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a  >uc.pCursor) );.
224e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
224f0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
22500 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
22510 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73   &v);.        as
22520 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
22530 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e  _OK );   /* Cann
22540 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e  ot fail followin
22550 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  g BtreeLast() */
22560 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d  .        if( v>=
22570 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
22580 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
22590 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
225a0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
225b0 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f          v++;   /
225c0 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33  * IMP: R-29538-3
225d0 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20  4987 */.        
225e0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
225f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22600 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
22610 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  NT.    if( pOp->
22620 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  p3 ){.      /* A
22630 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
22640 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
22650 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61  cell. */.      a
22660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
22670 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
22680 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
22690 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
226a0 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
226b0 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
226c0 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
226d0 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  );.        /* As
226e0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
226f0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
22700 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
22710 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
22720 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b  =pFrame->nMem );
22730 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
22740 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
22750 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65  p->p3];.      }e
22760 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
22770 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
22780 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
22790 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
227a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
227b0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
227c0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
227d0 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b     pMem = &aMem[
227e0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
227f0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
22800 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ge(p, pMem);.   
22810 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
22820 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d  t( memIsValid(pM
22830 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45  em) );..      RE
22840 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
22850 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ->p3, pMem);.   
22860 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
22870 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
22880 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
22890 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
228a0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
228b0 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
228c0 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
228d0 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75       if( pMem->u
228e0 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c  .i==MAX_ROWID ||
228f0 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
22900 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72  wid ){.        r
22910 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
22920 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32     /* IMP: R-122
22930 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20  75-61338 */.    
22940 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
22950 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
22960 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76     }.      if( v
22970 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
22980 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
22990 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
229a0 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75   }.      pMem->u
229b0 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65  .i = v;.    }.#e
229c0 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d  ndif.    if( pC-
229d0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
229e0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c  ){.      /* IMPL
229f0 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
22a00 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20  -07677-41881 If 
22a10 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49  the largest ROWI
22a20 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  D is equal to th
22a30 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65  e.      ** large
22a40 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65  st possible inte
22a50 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38  ger (92233720368
22a60 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
22a70 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
22a80 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72    ** engine star
22a90 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74  ts picking posit
22aa0 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f  ive candidate RO
22ab0 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75  WIDs at random u
22ac0 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74  ntil.      ** it
22ad0 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20   finds one that 
22ae0 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
22af0 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20  y used. */.     
22b00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
22b10 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61  ==0 );  /* We ca
22b20 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f  nnot be in rando
22b30 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20  m rowid mode if 
22b40 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20  this is.        
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b60 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49       ** an AUTOI
22b70 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20  NCREMENT table. 
22b80 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30  */.      cnt = 0
22b90 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
22ba0 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
22bb0 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
22bc0 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76  , &v);.        v
22bd0 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
22be0 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73  1); v++;  /* Ens
22bf0 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72  ure that v is gr
22c00 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20  eater than zero 
22c10 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  */.      }while(
22c20 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33    ((rc = sqlite3
22c30 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
22c40 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
22c50 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20  or, 0, (u64)v,. 
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c90 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54  0, &res))==SQLIT
22ca0 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20  E_OK).          
22cb0 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20    && (res==0).  
22cc0 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b            && (++
22cd0 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20  cnt<100));.     
22ce0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
22cf0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
22d00 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
22d10 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
22d20 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
22d30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
22d40 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
22d50 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
22d60 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
22d70 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
22d80 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
22d90 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
22da0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
22db0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22dc0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22dd0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
22de0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
22df0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
22e00 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
22e10 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
22e20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
22e30 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
22e40 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
22e50 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
22e60 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
22e70 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
22e80 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
22e90 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
22ea0 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
22eb0 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
22ec0 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
22ed0 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
22ee0 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
22ef0 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
22f00 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
22f10 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
22f20 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
22f30 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
22f40 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
22f50 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
22f60 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
22f70 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
22f80 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
22f90 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
22fa0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
22fb0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
22fc0 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
22fd0 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
22fe0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
22ff0 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
23000 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
23010 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
23020 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
23030 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
23040 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
23050 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
23060 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
23070 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
23080 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
23090 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
230a0 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
230b0 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
230c0 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
230d0 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
230e0 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
230f0 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
23100 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
23110 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
23120 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
23130 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
23140 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
23150 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
23160 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
23170 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
23180 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
23190 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
231a0 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
231b0 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
231c0 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
231d0 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
231e0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
231f0 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
23200 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
23210 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
23220 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
23230 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
23240 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
23250 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
23260 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
23270 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
23280 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
23290 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
232a0 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
232b0 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
232c0 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
232d0 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
232e0 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
232f0 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
23300 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
23310 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
23320 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
23330 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
23340 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
23350 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
23360 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
23370 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
23380 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
23390 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
233a0 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
233b0 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
233c0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
233d0 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
233e0 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
233f0 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
23400 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
23410 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
23420 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
23430 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
23440 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
23450 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
23460 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
23470 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
23480 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
23490 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
234a0 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
234b0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
234c0 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
234d0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
234e0 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
234f0 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
23500 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
23510 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
23520 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
23530 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
23540 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
23550 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
23560 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
23570 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
23580 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
23590 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
235a0 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
235b0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
235c0 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  s:  intkey=P3 da
235d0 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
235e0 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
235f0 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
23600 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
23610 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
23620 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
23630 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
23640 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
23650 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
23660 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
23670 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
23680 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
23690 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
236a0 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
236b0 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
236c0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
236d0 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
236e0 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
236f0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
23700 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
23710 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
23720 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f   iKey;         /
23730 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f  * The integer RO
23740 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74  WID or key for t
23750 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
23760 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64  inserted */.  Vd
23770 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
23780 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
23790 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
237a0 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
237b0 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
237c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
237d0 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74   of zero-bytes t
237e0 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e  o append */.  in
237f0 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
23800 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
23810 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
23820 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
23830 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
23840 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
23850 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
23860 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
23870 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e  te hook */.  con
23880 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f  st char *zTbl; /
23890 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75  * Table name - u
238a0 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74  sed by the opdat
238b0 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20  e hook */.  int 
238c0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
238d0 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
238e0 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
238f0 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
23900 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44  _INSERT */..  pD
23910 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
23920 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
23930 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23940 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23950 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
23960 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
23970 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23980 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23990 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
239a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
239b0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
239c0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
239d0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
239e0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
239f0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
23a00 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
23a10 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
23a20 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
23a30 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
23a40 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
23a50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
23a60 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
23a70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
23a80 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
23a90 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
23aa0 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
23ab0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
23ac0 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20  pKey);.    iKey 
23ad0 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
23ae0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
23af0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23b00 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
23b10 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70     iKey = pOp->p
23b20 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f  3;.  }..  if( pO
23b30 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
23b40 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
23b50 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
23b60 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
23b70 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
23b80 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
23b90 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66  wid = iKey;.  if
23ba0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
23bb0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
23bc0 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20   pData->z = 0;. 
23bd0 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b     pData->n = 0;
23be0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
23bf0 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
23c00 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
23c10 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20  EM_Str) );.  }. 
23c20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28   seekResult = ((
23c30 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
23c40 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
23c50 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
23c60 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61   : 0);.  if( pDa
23c70 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
23c80 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72  Zero ){.    nZer
23c90 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65  o = pData->u.nZe
23ca0 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ro;.  }else{.   
23cb0 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a   nZero = 0;.  }.
23cc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
23cd0 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63  reeInsert(pC->uc
23ce0 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  .pCursor, 0, iKe
23cf0 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
23d10 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
23d20 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
23d50 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20  LAG_APPEND)!=0, 
23d60 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
23d70 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
23d80 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
23d90 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23da0 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
23db0 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
23dc0 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
23dd0 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
23de0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
23df0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
23e00 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
23e10 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  ){.    zDb = db-
23e20 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
23e30 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20  ame;.    zTbl = 
23e40 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f  pOp->p4.z;.    o
23e50 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
23e60 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
23e70 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
23e80 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
23e90 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
23ea0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
23eb0 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
23ec0 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
23ed0 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
23ee0 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
23ef0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
23f00 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
23f10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23f20 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
23f30 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P4 P5.**.** Dele
23f40 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
23f50 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
23f60 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
23f70 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
23f80 2a 20 49 66 20 74 68 65 20 50 35 20 70 61 72 61  * If the P5 para
23f90 6d 65 74 65 72 20 69 73 20 6e 6f 6e 2d 7a 65 72  meter is non-zer
23fa0 6f 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  o, the cursor wi
23fb0 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  ll be left point
23fc0 69 6e 67 20 61 74 20 0a 2a 2a 20 65 69 74 68 65  ing at .** eithe
23fd0 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
23fe0 65 20 70 72 65 76 69 6f 75 73 20 72 65 63 6f 72  e previous recor
23ff0 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  d in the table. 
24000 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 0a 2a  If it is left .*
24010 2a 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  * pointing at th
24020 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
24030 68 65 6e 20 74 68 65 20 6e 65 78 74 20 4e 65 78  hen the next Nex
24040 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
24050 6c 6c 20 62 65 20 61 20 0a 2a 2a 20 6e 6f 2d 6f  ll be a .** no-o
24060 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20  p. As a result, 
24070 69 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20  in this case it 
24080 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 20  is OK to delete 
24090 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
240a0 74 68 69 6e 20 61 0a 2a 2a 20 4e 65 78 74 20 6c  thin a.** Next l
240b0 6f 6f 70 2e 20 49 66 20 50 35 20 69 73 20 7a 65  oop. If P5 is ze
240c0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  ro, then the cur
240d0 73 6f 72 20 69 73 20 6c 65 66 74 20 69 6e 20 61  sor is left in a
240e0 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74  n undefined stat
240f0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
24100 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
24110 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74  lag of P2 is set
24120 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
24130 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
24140 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
24150 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
24160 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
24170 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
24180 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
24190 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
241a0 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
241b0 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
241c0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
241d0 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65  n it is the name
241e0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
241f0 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e  at P1 is.** poin
24200 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70  ting to.  The up
24210 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62  date hook will b
24220 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74  e invoked, if it
24230 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50   exists..** If P
24240 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
24250 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  en the P1 cursor
24260 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
24270 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73  positioned.** us
24280 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
24290 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
242a0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
242b0 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
242c0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
242d0 20 2a 70 43 3b 0a 20 20 75 38 20 68 61 73 55 70   *pC;.  u8 hasUp
242e0 64 61 74 65 43 61 6c 6c 62 61 63 6b 3b 0a 0a 20  dateCallback;.. 
242f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24300 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24310 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
24320 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24330 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24340 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
24350 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
24360 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
24370 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24380 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
24390 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
243a0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
243b0 30 20 29 3b 0a 0a 20 20 68 61 73 55 70 64 61 74  0 );..  hasUpdat
243c0 65 43 61 6c 6c 62 61 63 6b 20 3d 20 64 62 2d 3e  eCallback = db->
243d0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
243e0 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20  && pOp->p4.z && 
243f0 70 43 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 69  pC->isTable;.  i
24400 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 68 61  f( pOp->p5 && ha
24410 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  sUpdateCallback 
24420 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
24430 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75  reeKeySize(pC->u
24440 63 2e 70 43 75 72 73 6f 72 2c 20 26 70 43 2d 3e  c.pCursor, &pC->
24450 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20  movetoTarget);. 
24460 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
24470 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54 68 65  E_DEBUG.  /* The
24480 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
24490 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20  that positioned 
244a0 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72  the cursor prior
244b0 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20 77 69   to OP_Delete wi
244c0 6c 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61 6c 73  ll.  ** have als
244d0 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f  o set the pC->mo
244e0 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64  vetoTarget field
244f0 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
24500 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 20 20   the row that.  
24510 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65  ** is being dele
24520 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ted */.  if( pOp
24530 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73  ->p4.z && pC->is
24540 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70 35  Table && pOp->p5
24550 3d 3d 30 20 29 7b 0a 20 20 20 20 69 36 34 20 69  ==0 ){.    i64 i
24560 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  Key = 0;.    sql
24570 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
24580 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
24590 20 26 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73   &iKey);.    ass
245a0 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  ert( pC->movetoT
245b0 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 20 0a  arget==iKey ); .
245c0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20 72    }.#endif. .  r
245d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
245e0 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
245f0 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
24600 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
24610 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24620 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
24630 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
24640 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
24650 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
24660 4f 4b 20 26 26 20 68 61 73 55 70 64 61 74 65 43  OK && hasUpdateC
24670 61 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 64  allback ){.    d
24680 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
24690 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
246a0 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
246b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
246c0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44            db->aD
246d0 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
246e0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d  , pOp->p4.z, pC-
246f0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a  >movetoTarget);.
24700 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24710 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
24720 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
24730 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
24740 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
24750 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
24760 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
24770 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
24780 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
24790 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
247a0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
247b0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
247c0 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
247d0 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
247e0 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
247f0 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
24800 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
24810 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
24820 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
24830 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
24840 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
24850 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
24860 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
24870 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
24880 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
24890 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
248a0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
248b0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
248c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
248d0 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
248e0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
248f0 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74  :  if key(P1)!=t
24900 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f  rim(r[P3],P4) go
24910 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69  to P2.**.** P1 i
24920 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
24930 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
24940 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70  ion compares a p
24950 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20  refix of the.** 
24960 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72  record blob in r
24970 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e  egister P3 again
24980 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
24990 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  he entry that .*
249a0 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72  * the sorter cur
249b0 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  sor currently po
249c0 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74  ints to.  Only t
249d0 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c  he first P4 fiel
249e0 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61  ds.** of r[P3] a
249f0 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65  nd the sorter re
24a00 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65  cord are compare
24a10 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  d..**.** If eith
24a20 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72  er P3 or the sor
24a30 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e  ter contains a N
24a40 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68  ULL in one of th
24a50 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  eir significant.
24a60 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63  ** fields (not c
24a70 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66  ounting the P4 f
24a80 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
24a90 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72   which are ignor
24aa0 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ed) then.** the 
24ab0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73  comparison is as
24ac0 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61  sumed to be equa
24ad0 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68  l..**.** Fall th
24ae0 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e  rough to next in
24af0 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65  struction if the
24b00 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d   two records com
24b10 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a  pare equal to.**
24b20 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75   each other.  Ju
24b30 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79  mp to P2 if they
24b40 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a   are different..
24b50 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24b60 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
24b70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
24b80 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e  int res;.  int n
24b90 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20  KeyCol;..  pC = 
24ba0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24bb0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
24bc0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61  orter(pC) );.  a
24bd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
24be0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
24bf0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
24c00 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43  Op->p3];.  nKeyC
24c10 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ol = pOp->p4.i;.
24c20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
24c30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24c40 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70  terCompare(pC, p
24c50 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72  In3, nKeyCol, &r
24c60 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  es);.  VdbeBranc
24c70 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
24c80 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
24c90 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
24ca0 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
24cb0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
24cc0 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  a P1 P2 P3 * *.*
24cd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
24ce0 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
24cf0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
24d00 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20   P2 the current 
24d10 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20  sorter data for 
24d20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31  sorter cursor P1
24d30 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20  ..** Then clear 
24d40 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65  the column heade
24d50 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f  r cache on curso
24d60 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P3..**.** This
24d70 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61   opcode is norma
24d80 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20  lly use to move 
24d90 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20  a record out of 
24da0 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69  the sorter and i
24db0 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65  nto.** a registe
24dc0 72 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  r that is the so
24dd0 75 72 63 65 20 66 6f 72 20 61 20 70 73 65 75 64  urce for a pseud
24de0 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63  o-table cursor c
24df0 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
24e00 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61  OpenPseudo.  Tha
24e10 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  t pseudo-table c
24e20 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65  ursor is the one
24e30 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 66   that is identif
24e40 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65  ied by.** parame
24e50 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e  ter P3.  Clearin
24e60 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20  g the P3 column 
24e70 63 61 63 68 65 20 61 73 20 70 61 72 74 20 6f 66  cache as part of
24e80 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76   this opcode sav
24e90 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61  es.** us from ha
24ea0 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20  ving to issue a 
24eb0 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77  separate NullRow
24ec0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
24ed0 63 6c 65 61 72 20 74 68 61 74 20 63 61 63 68 65  clear that cache
24ee0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
24ef0 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  terData: {.  Vdb
24f00 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
24f10 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
24f20 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d  ->p2];.  pC = p-
24f30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24f40 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
24f50 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20  ter(pC) );.  rc 
24f60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24f70 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f  terRowkey(pC, pO
24f80 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  ut);.  assert( r
24f90 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
24fa0 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d  (pOut->flags & M
24fb0 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73  EM_Blob) );.  as
24fc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24fd0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24fe0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 2d 3e 61  Cursor );.  p->a
24ff0 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63  pCsr[pOp->p3]->c
25000 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25010 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61  HE_STALE;.  brea
25020 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25030 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a   RowData P1 P2 *
25040 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
25050 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
25060 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
25070 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
25080 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20  mplete row data 
25090 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
250a0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
250b0 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
250c0 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
250d0 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
250e0 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
250f0 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
25100 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
25110 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
25120 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
25130 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
25140 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
25150 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
25160 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
25170 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
25180 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
25190 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  table..*/./* Opc
251a0 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50  ode: RowKey P1 P
251b0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
251c0 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a  sis: r[P2]=key.*
251d0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
251e0 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
251f0 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79  complete row key
25200 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
25210 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
25220 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
25230 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
25240 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65  The key is copie
25250 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
25260 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
25270 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
25280 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
25290 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
252a0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
252b0 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
252c0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
252d0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
252e0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
252f0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
25300 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
25310 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20  OP_RowKey:.case 
25320 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
25330 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
25340 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
25350 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36  r;.  u32 n;.  i6
25360 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d  4 n64;..  pOut =
25370 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
25380 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
25390 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
253a0 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f   /* Note that Ro
253b0 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61  wKey and RowData
253c0 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63   are really exac
253d0 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73  tly the same ins
253e0 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
253f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25400 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25410 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
25420 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25430 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25440 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
25450 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
25460 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
25470 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
25480 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
25490 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
254a0 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  le || pOp->opcod
254b0 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e!=OP_RowData );
254c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
254d0 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70  sTable==0 || pOp
254e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
254f0 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
25500 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
25510 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25520 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
25530 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
25540 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  >uc.pCursor;..  
25550 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79  /* The OP_RowKey
25560 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20   and OP_RowData 
25570 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66  opcodes always f
25580 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73  ollow OP_NotExis
25590 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65  ts or.  ** OP_Re
255a0 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74  wind/Op_Next wit
255b0 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67  h no intervening
255c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68   instructions th
255d0 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
255e0 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72  ate.  ** the cur
255f0 73 6f 72 2e 20 20 49 66 20 74 68 69 73 20 77 68  sor.  If this wh
25600 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65  ere not the case
25610 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c  , on of the foll
25620 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a  owing assert()s.
25630 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e    ** would fail.
25640 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76    Should this ev
25650 65 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75  er change (becau
25660 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e  se of changes in
25670 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67   the code.  ** g
25680 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74  enerator) then t
25690 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20  he fix would be 
256a0 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c  to insert a call
256b0 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
256c0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
256d0 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ()..  */.  asser
256e0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
256f0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
25700 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
25710 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
25720 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20  pCrsr) );.#if 0 
25730 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64   /* Not required
25740 20 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76   due to the prev
25750 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29  ious to assert()
25760 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20   statements */. 
25770 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
25780 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
25790 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
257a0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
257b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
257c0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  ;.#endif..  if( 
257d0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
257e0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
257f0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
25800 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
25810 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
25820 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
25830 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
25840 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
25850 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
25860 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
25870 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
25880 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
25890 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
258a0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
258b0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
258c0 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
258d0 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
258e0 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f  }else{.    VVA_O
258f0 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
25900 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
25910 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61  Crsr, &n);.    a
25920 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
25930 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61  E_OK );    /* Da
25940 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
25950 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20  fail */.    if( 
25960 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
25970 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
25980 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
25990 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
259a0 20 20 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63 61    }.  }.  testca
259b0 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66  se( n==0 );.  if
259c0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
259d0 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
259e0 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20  Out, MAX(n,32)) 
259f0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
25a00 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  em;.  }.  pOut->
25a10 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54  n = n;.  MemSetT
25a20 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
25a30 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70  M_Blob);.  if( p
25a40 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
25a50 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
25a60 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
25a70 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
25a80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
25a90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
25aa0 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
25ab0 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
25ac0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
25ad0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
25ae0 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
25af0 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74  s ever cast to t
25b00 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f  ext */.  UPDATE_
25b10 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
25b20 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
25b30 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
25b40 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
25b50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
25b60 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
25b70 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
25b80 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f  =rowid.**.** Sto
25b90 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
25ba0 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
25bb0 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
25bc0 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
25bd0 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
25be0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
25bf0 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
25c00 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
25c10 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
25c20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
25c30 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
25c40 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
25c50 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
25c60 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
25c70 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
25c80 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
25c90 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
25ca0 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
25cb0 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
25cc0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
25cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
25ce0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
25cf0 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
25d00 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
25d10 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
25d20 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
25d30 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d  odule;..  pOut =
25d40 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
25d50 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
25d60 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25d70 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25d80 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25d90 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25da0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25db0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25dc0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
25dd0 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43  YPE_PSEUDO || pC
25de0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
25df0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
25e00 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
25e10 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
25e20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
25e30 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
25e40 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
25e50 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
25e60 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
25e70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
25e80 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
25e90 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
25ea0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a  CURTYPE_VTAB ){.
25eb0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
25ec0 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20  uc.pVCur!=0 );. 
25ed0 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75     pVtab = pC->u
25ee0 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
25ef0 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56      pModule = pV
25f00 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
25f10 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
25f20 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  e->xRowid );.   
25f30 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
25f40 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43  Rowid(pC->uc.pVC
25f50 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  ur, &v);.    sql
25f60 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
25f70 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
25f80 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
25f90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25fa0 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
25fb0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
25fc0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
25fd0 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73  _BTREE );.    as
25fe0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
25ff0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
26000 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
26010 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
26020 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
26030 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
26040 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
26050 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
26060 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
26070 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
26080 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
26090 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
260a0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
260b0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 76 29  >uc.pCursor, &v)
260c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
260d0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
260e0 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63  /* Always so bec
260f0 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52 65  ause of CursorRe
26100 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a 2f  store() above */
26110 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
26120 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
26130 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
26140 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
26150 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
26160 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
26170 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
26180 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
26190 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
261a0 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
261b0 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
261c0 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
261d0 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
261e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
261f0 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
26200 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
26210 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26220 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26230 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
26240 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26250 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26260 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
26270 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61  ow = 1;.  pC->ca
26280 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26290 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
262a0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
262b0 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20  TYPE_BTREE ){.  
262c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
262d0 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
262e0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
262f0 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75  learCursor(pC->u
26300 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  c.pCursor);.  }.
26310 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26320 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50  pcode: Last P1 P
26330 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
26340 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
26350 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
26360 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
26370 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
26380 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
26390 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
263a0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
263b0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
263c0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
263d0 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
263e0 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
263f0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
26400 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
26410 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
26420 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
26430 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
26440 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
26450 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
26460 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
26470 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
26480 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
26490 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
264a0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
264b0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
264c0 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
264d0 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
264e0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
264f0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
26500 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
26510 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
26520 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b  .case OP_Last: {
26530 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
26540 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26550 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
26560 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
26570 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
26580 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26590 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
265a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
265b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
265c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
265d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
265e0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
265f0 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
26600 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
26610 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
26620 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
26630 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
26640 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72  3BtreeLast(pCrsr
26650 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e  , &res);.  pC->n
26660 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
26670 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
26680 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
26690 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
266a0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
266b0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
266c0 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20  pOp->p3;.#ifdef 
266d0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
266e0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c  C->seekOp = OP_L
266f0 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ast;.#endif.  if
26700 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
26710 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
26720 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
26730 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
26740 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
26750 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
26760 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
26770 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26780 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
26790 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
267a0 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
267b0 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
267c0 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
267d0 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
267e0 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
267f0 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
26800 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
26810 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
26820 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
26830 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
26840 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
26850 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
26860 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
26870 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
26880 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
26890 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
268a0 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
268b0 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
268c0 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
268d0 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
268e0 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
268f0 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
26900 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
26910 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
26920 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
26930 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
26940 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
26950 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
26960 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
26970 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
26980 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
26990 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
269a0 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
269b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
269c0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
269d0 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
269e0 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
269f0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
26a00 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
26a10 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
26a20 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b  MTSTATUS_SORT]++
26a30 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
26a40 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
26a50 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
26a60 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
26a70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
26a80 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
26a90 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
26aa0 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
26ab0 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
26ac0 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
26ad0 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
26ae0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
26af0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
26b00 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
26b10 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20  index is empty, 
26b20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
26b30 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68   to P2..** If th
26b40 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
26b50 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
26b60 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
26b70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a  he following .**
26b80 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
26b90 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
26ba0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
26bb0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
26bc0 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
26bd0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
26be0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
26bf0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
26c00 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
26c10 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
26c20 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
26c30 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
26c40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
26c50 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
26c60 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
26c70 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
26c80 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
26c90 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
26ca0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
26cb0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26cc0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
26cd0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26ce0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26cf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
26d00 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
26d10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
26d20 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
26d30 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
26d40 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
26d50 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
26d60 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
26d70 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
26d80 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
26d90 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
26da0 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  nd(pC, &res);.  
26db0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
26dc0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
26dd0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
26de0 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  ;.    pCrsr = pC
26df0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
26e00 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
26e10 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
26e20 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
26e30 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
26e40 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
26e50 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
26e60 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26e70 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
26e80 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
26e90 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
26ea0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
26eb0 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
26ec0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
26ed0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
26ee0 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
26ef0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
26f00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26f10 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
26f20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
26f30 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
26f40 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
26f50 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
26f60 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
26f70 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
26f80 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
26f90 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
26fa0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
26fb0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
26fc0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
26fd0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
26fe0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
26ff0 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
27000 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
27010 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
27020 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
27030 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
27040 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
27050 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
27060 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
27070 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
27080 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
27090 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
270a0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
270b0 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
270c0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
270d0 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
270e0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
270f0 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
27100 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
27110 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
27120 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
27130 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
27140 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
27150 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
27160 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
27170 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
27180 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
27190 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
271a0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
271b0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
271c0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
271d0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
271e0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
271f0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
27200 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
27210 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
27220 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
27230 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
27240 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
27250 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
27260 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
27270 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
27280 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
27290 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
272a0 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
272b0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
272c0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
272d0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
272e0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
272f0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
27300 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
27310 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
27320 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
27330 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c   See also: Prev,
27340 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f   NextIfOpen.*/./
27350 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66  * Opcode: NextIf
27360 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
27370 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
27380 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
27390 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70   like Next excep
273a0 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
273b0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
273c0 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
273d0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
273e0 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
273f0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
27400 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
27410 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
27420 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
27430 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
27440 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
27450 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
27460 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
27470 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
27480 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
27490 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
274a0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
274b0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
274c0 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
274d0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
274e0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
274f0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
27500 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
27510 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
27520 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
27530 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
27540 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
27550 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
27560 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
27570 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
27580 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
27590 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
275a0 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
275b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
275c0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
275d0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
275e0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
275f0 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
27600 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
27610 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
27620 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
27630 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
27640 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
27650 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
27660 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
27670 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
27680 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
27690 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
276a0 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
276b0 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
276c0 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
276d0 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
276e0 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
276f0 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
27700 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
27710 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
27720 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
27730 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
27740 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
27750 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
27760 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
27770 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
27780 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
27790 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
277a0 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
277b0 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
277c0 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
277d0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
277e0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
277f0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
27800 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
27810 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
27820 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
27830 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20   just like Prev 
27840 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
27850 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
27860 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
27870 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  es a no-op..*/.c
27880 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78  ase OP_SorterNex
27890 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t: {  /* jump */
278a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
278b0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  C;.  int res;.. 
278c0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
278d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
278e0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
278f0 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
27900 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27910 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70  SorterNext(db, p
27920 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f  C, &res);.  goto
27930 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65   next_tail;.case
27940 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20   OP_PrevIfOpen: 
27950 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
27960 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  se OP_NextIfOpen
27970 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
27980 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
27990 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65  Op->p1]==0 ) bre
279a0 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
279b0 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50  rough */.case OP
279c0 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
279d0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
279e0 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
279f0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
27a00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27a10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27a20 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
27a30 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
27a40 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
27a50 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
27a60 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
27a70 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33  .  res = pOp->p3
27a80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27a90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27aa0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27ab0 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
27ac0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27ad0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27ae0 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d  .  assert( res==
27af0 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20  0 || (res==1 && 
27b00 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20  pC->isTable==0) 
27b10 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72  );.  testcase( r
27b20 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  es==1 );.  asser
27b30 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
27b40 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
27b50 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
27b60 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
27b70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27b80 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
27b90 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
27ba0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
27bb0 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
27bc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
27bd0 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
27be0 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
27bf0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
27c00 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
27c10 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27c20 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
27c30 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
27c40 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
27c50 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
27c60 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
27c70 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
27c80 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
27c90 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
27ca0 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
27cb0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
27cc0 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
27cd0 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
27ce0 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
27cf0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
27d00 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
27d10 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
27d20 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
27d30 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
27d40 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
27d50 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
27d60 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
27d70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
27d80 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
27d90 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
27da0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
27db0 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
27dc0 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
27dd0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
27de0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
27df0 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
27e00 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
27e10 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
27e20 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
27e30 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
27e40 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75  vance(pC->uc.pCu
27e50 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78  rsor, &res);.nex
27e60 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61  t_tail:.  pC->ca
27e70 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27e80 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42  E_STALE;.  VdbeB
27e90 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d  ranchTaken(res==
27ea0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d  0,2);.  if( res=
27eb0 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
27ec0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
27ed0 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
27ee0 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
27ef0 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
27f00 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
27f10 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
27f20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
27f30 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
27f40 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
27f50 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
27f60 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  ow = 1;.  }.  go
27f70 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
27f80 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
27f90 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
27fa0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
27fb0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
27fc0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
27fd0 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
27fe0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
27ff0 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
28000 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
28010 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
28020 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
28030 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
28040 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
28050 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
28060 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
28070 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
28080 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
28090 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
280a0 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
280b0 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
280c0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
280d0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
280e0 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  as the OPFLAG_NC
280f0 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74  HANGE bit set, t
28100 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
28110 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63  ounter is.** inc
28120 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73  remented by this
28130 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
28140 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
28150 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61  ANGE bit is clea
28160 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
28170 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
28180 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a   unchanged..**.*
28190 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
281a0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
281b0 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68  SULT bit set, th
281c0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
281d0 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20  st have.** just 
281e0 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74  done a seek to t
281f0 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68  he spot where th
28200 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74  e new entry is t
28210 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a  o be inserted..*
28220 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69  * This flag avoi
28230 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72  ds doing an extr
28240 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68  a seek..**.** Th
28250 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
28260 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
28270 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
28280 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
28290 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
282a0 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
282b0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
282c0 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a  Insert:       /*
282d0 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in2 */.case OP_
282e0 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
282f0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
28300 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
28310 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
28320 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
28330 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28340 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
28350 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
28360 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
28370 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28380 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
28390 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
283a0 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
283b0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
283c0 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
283d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
283e0 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
283f0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
28400 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  );.  if( pOp->p5
28410 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
28420 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
28430 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28440 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
28450 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e  E_BTREE || pOp->
28460 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
28470 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73  rInsert );.  ass
28480 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
28490 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78  ==0 );.  rc = Ex
284a0 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
284b0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
284c0 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 70  _OK ){.    if( p
284d0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
284e0 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20  orterInsert ){. 
284f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
28500 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
28510 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20  (pC, pIn2);.    
28520 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65  }else{.      nKe
28530 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
28540 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
28550 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
28560 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
28570 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
28580 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c   zKey, nKey, "",
28590 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20   0, 0, pOp->p3, 
285a0 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70  .          ((pOp
285b0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
285c0 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
285d0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
285e0 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a  0).          );.
285f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
28600 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
28610 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  ==0 );.      pC-
28620 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28630 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
28640 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
28650 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
28660 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
28670 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
28680 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a   key=r[P2@P3].**
28690 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
286a0 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
286b0 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
286c0 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
286d0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
286e0 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
286f0 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
28700 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
28710 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
28720 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
28730 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
28740 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
28750 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
28760 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
28770 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
28780 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
28790 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
287a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
287b0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
287c0 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d  +pOp->p3<=(p->nM
287d0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
287e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
287f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28800 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
28810 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
28820 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28830 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
28840 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
28850 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
28860 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
28870 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
28880 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
28890 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
288a0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
288b0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
288c0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
288d0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
288e0 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61  Op->p3;.  r.defa
288f0 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e  ult_rc = 0;.  r.
28900 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
28910 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p2];.#ifdef SQ
28920 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69  LITE_DEBUG.  { i
28930 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
28940 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
28950 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
28960 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
28970 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20  ; }.#endif.  rc 
28980 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
28990 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
289a0 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
289b0 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  es);.  if( rc==S
289c0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
289d0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
289e0 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
289f0 65 28 70 43 72 73 72 2c 20 30 29 3b 0a 20 20 7d  e(pCrsr, 0);.  }
28a00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
28a10 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
28a20 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   );.  pC->cacheS
28a30 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
28a40 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
28a50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
28a60 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
28a70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
28a80 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
28a90 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
28aa0 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
28ab0 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
28ac0 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
28ad0 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
28ae0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
28af0 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
28b00 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
28b10 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
28b20 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
28b30 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
28b40 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
28b50 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
28b60 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
28b70 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
28b80 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
28b90 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
28ba0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
28bb0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74   /* out2 */.  Bt
28bc0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
28bd0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
28be0 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20  .  i64 rowid;.. 
28bf0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
28c00 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
28c10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28c20 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28c30 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
28c40 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28c50 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28c60 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
28c70 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
28c80 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
28c90 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
28ca0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
28cb0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
28cc0 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
28cd0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
28ce0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
28cf0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ble==0 );.  asse
28d00 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
28d10 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20  Moveto==0 );..  
28d20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72  /* sqlite3VbeCur
28d30 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e  sorRestore() can
28d40 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68   only fail if th
28d50 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65  e record has bee
28d60 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f  n deleted.  ** o
28d70 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68  ut from under th
28d80 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20  e cursor.  That 
28d90 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65  will never happe
28da0 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77  nd for an IdxRow
28db0 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20  id.  ** opcode, 
28dc0 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28  hence the NEVER(
28dd0 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68  ) arround the ch
28de0 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72  eck of the retur
28df0 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20  n value..  */.  
28e00 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
28e10 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
28e20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
28e30 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
28e40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
28e50 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
28e60 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
28e70 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20      rowid = 0;  
28e80 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
28e90 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
28ea0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
28eb0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
28ec0 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
28ed0 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69  db, pCrsr, &rowi
28ee0 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  d);.    if( rc!=
28ef0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
28f00 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
28f10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
28f20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  }.    pOut->u.i 
28f30 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75  = rowid;.    pOu
28f40 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
28f50 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  nt;.  }.  break;
28f60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
28f70 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
28f80 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
28f90 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
28fa0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
28fb0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
28fc0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
28fd0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
28fe0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
28ff0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
29000 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
29010 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
29020 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
29030 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
29040 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
29050 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
29060 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
29070 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
29080 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
29090 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
290a0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
290b0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
290c0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
290d0 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
290e0 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
290f0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
29100 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
29110 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
29120 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20  * Opcode: IdxGT 
29130 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
29140 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
29150 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
29160 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
29170 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
29180 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
29190 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
291a0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
291b0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
291c0 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
291d0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
291e0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
291f0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
29200 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
29210 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
29220 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
29230 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
29240 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
29250 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
29260 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
29270 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
29280 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
29290 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
292a0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
292b0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
292c0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
292d0 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
292e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
292f0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
29300 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
29310 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
29320 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
29330 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
29340 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
29350 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
29360 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
29370 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
29380 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
29390 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
293a0 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
293b0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
293c0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
293d0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
293e0 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
293f0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
29400 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
29410 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
29420 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
29430 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
29440 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
29450 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
29460 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
29470 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
29480 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50   Opcode: IdxLE P
29490 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
294a0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
294b0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
294c0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
294d0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
294e0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
294f0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
29500 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
29510 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
29520 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
29530 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
29540 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
29550 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
29560 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
29570 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
29580 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
29590 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
295a0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
295b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
295c0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
295d0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
295e0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
295f0 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ue then jump.** 
29600 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
29610 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
29620 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
29630 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
29640 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20  P_IdxLE:        
29650 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
29660 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20  e OP_IdxGT:     
29670 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
29680 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
29690 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
296a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
296b0 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  :  {       /* ju
296c0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
296d0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
296e0 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
296f0 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
29700 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29710 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29720 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
29730 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29740 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29750 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
29760 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
29770 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
29780 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
29790 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
297a0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
297b0 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
297c0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
297d0 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
297e0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
297f0 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
29800 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
29810 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
29820 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
29830 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
29840 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
29850 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
29860 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f   pOp->opcode<OP_
29870 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73  IdxLT ){.    ass
29880 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
29890 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
298a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
298b0 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xGT );.    r.def
298c0 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
298d0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
298e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
298f0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
29900 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
29910 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
29920 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20  lt_rc = 0;.  }. 
29930 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
29940 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
29950 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
29960 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
29970 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
29980 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
29990 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
299a0 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
299b0 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  res = 0;  /* Not
299c0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
299d0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
299e0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
299f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
29a00 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c  dxKeyCompare(db,
29a10 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a   pC, &r, &res);.
29a20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64    assert( (OP_Id
29a30 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  xLE&1)==(OP_IdxL
29a40 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47  T&1) && (OP_IdxG
29a50 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26  E&1)==(OP_IdxGT&
29a60 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70  1) );.  if( (pOp
29a70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50  ->opcode&1)==(OP
29a80 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20  _IdxLT&1) ){.   
29a90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
29aa0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
29ab0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
29ac0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
29ad0 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c  es = -res;.  }el
29ae0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
29af0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
29b00 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
29b10 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
29b20 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
29b30 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
29b40 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69  en(res>0,2);.  i
29b50 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20  f( res>0 ) goto 
29b60 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
29b70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
29b80 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32  e: Destroy P1 P2
29b90 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   P3 * *.**.** De
29ba0 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64  lete an entire d
29bb0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
29bc0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
29bd0 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61  t page in the da
29be0 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69  tabase.** file i
29bf0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a  s given by P1..*
29c00 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
29c10 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69  eing destroyed i
29c20 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
29c30 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
29c40 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d  3==0.  If.** P3=
29c50 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
29c60 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
29c70 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
29c80 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
29c90 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
29ca0 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
29cb0 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
29cc0 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
29cd0 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55  BLE..**.** If AU
29ce0 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62  TOVACUUM is enab
29cf0 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70  led then it is p
29d00 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
29d10 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a  ther root page.*
29d20 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64  * might be moved
29d30 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20   into the newly 
29d40 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67  deleted root pag
29d50 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  e in order to ke
29d60 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70  ep all.** root p
29d70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20  ages contiguous 
29d80 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
29d90 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
29da0 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a  .  The former.**
29db0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
29dc0 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76  ot page that mov
29dd0 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62  ed - its value b
29de0 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f  efore the move o
29df0 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20  ccurred -.** is 
29e00 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
29e10 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61  er P2.  If no pa
29e20 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20  ge .** movement 
29e30 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
29e40 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
29e50 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61  being dropped wa
29e60 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68  s already .** th
29e70 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68  e last one in th
29e80 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e  e database) then
29e90 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
29ea0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
29eb0 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  ..** If AUTOVACU
29ec0 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
29ed0 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
29ee0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
29ef0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
29f00 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61  lso: Clear.*/.ca
29f10 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b  se OP_Destroy: {
29f20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
29f30 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20    int iMoved;.  
29f40 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65  int iDb;..  asse
29f50 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
29f60 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  =0 );.  pOut = o
29f70 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
29f80 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
29f90 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
29fa0 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  .  if( db->nVdbe
29fb0 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73  Read > db->nVDes
29fc0 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63  troy+1 ){.    rc
29fd0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
29fe0 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
29ff0 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
2a000 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
2a010 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
2a020 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2a030 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2a040 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d  , iDb) );.    iM
2a050 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  oved = 0;  /* No
2a060 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2a070 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
2a080 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
2a090 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
2a0a0 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
2a0b0 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
2a0c0 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
2a0d0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2a0e0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
2a0f0 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
2a100 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a110 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
2a120 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2a130 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d  E_OK && iMoved!=
2a140 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
2a150 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2a160 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
2a170 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
2a180 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
2a190 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
2a1a0 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
2a1b0 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
2a1c0 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
2a1d0 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
2a1e0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2a1f0 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
2a200 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
2a210 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
2a220 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
2a230 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2a240 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
2a250 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
2a260 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2a270 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2a280 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2a290 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
2a2a0 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
2a2b0 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
2a2c0 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
2a2d0 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
2a2e0 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
2a2f0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2a300 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
2a310 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2a320 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2a330 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
2a340 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2a350 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
2a360 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
2a370 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2a380 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2a390 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2a3a0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2a3b0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2a3c0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2a3d0 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2a3e0 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2a3f0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
2a400 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2a410 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
2a420 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
2a430 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
2a440 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
2a450 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
2a460 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
2a470 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
2a480 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
2a490 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2a4a0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2a4b0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2a4c0 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
2a4d0 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
2a4e0 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
2a4f0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
2a500 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
2a510 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
2a520 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2a530 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2a540 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2a550 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
2a560 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
2a570 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
2a580 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
2a590 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
2a5a0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
2a5b0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2a5c0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2a5d0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2a5e0 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20  , pOp->p2) );.  
2a5f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2a600 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
2a610 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
2a620 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
2a630 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
2a640 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
2a650 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
2a660 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
2a670 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2a680 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
2a690 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2a6a0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
2a6b0 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
2a6c0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2a6d0 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
2a6e0 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
2a6f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
2a700 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2a710 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2a720 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
2a730 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
2a740 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2a750 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
2a760 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
2a770 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
2a780 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
2a790 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
2a7a0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2a7b0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2a7c0 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
2a7d0 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
2a7e0 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
2a7f0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
2a800 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
2a810 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
2a820 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
2a830 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
2a840 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a850 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a860 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a870 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a880 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a890 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73  C!=0 );.  if( is
2a8a0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2a8b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
2a8c0 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
2a8d0 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20  >uc.pSorter);.  
2a8e0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2a8f0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2a900 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2a910 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2a920 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
2a930 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2a940 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2a950 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  OfCursor(pC->uc.
2a960 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
2a970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a980 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
2a990 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2a9a0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
2a9b0 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a  root iDb=P1.**.*
2a9c0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
2a9d0 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61   table in the ma
2a9e0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2a9f0 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
2aa00 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
2aa10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2aa20 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
2aa30 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
2aa40 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
2aa50 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
2aa60 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
2aa70 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
2aa80 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a  .** register P2.
2aa90 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
2aaa0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74  ence between a t
2aab0 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65  able and an inde
2aac0 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61  x is this:  A ta
2aad0 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65  ble must.** have
2aae0 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65   a 4-byte intege
2aaf0 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61  r key and can ha
2ab00 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74  ve arbitrary dat
2ab10 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20  a.  An index.** 
2ab20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79  has an arbitrary
2ab30 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61   key but no data
2ab40 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2ab50 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f  : CreateIndex.*/
2ab60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
2ab70 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20  teIndex P1 P2 * 
2ab80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2ab90 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
2aba0 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P1.**.** Allocat
2abb0 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e  e a new index in
2abc0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2abd0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
2abe0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
2abf0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2ac00 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
2ac10 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
2ac20 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
2ac30 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
2ac40 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2ac50 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
2ac60 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
2ac70 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
2ac80 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
2ac90 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  on OP_CreateTabl
2aca0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
2acb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
2acc0 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49  .case OP_CreateI
2acd0 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20  ndex:           
2ace0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65   /* out2 */.case
2acf0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
2ad00 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
2ad10 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e  ut2 */.  int pgn
2ad20 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  o;.  int flags;.
2ad30 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f    Db *pDb;..  pO
2ad40 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2ad50 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2ad60 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  gno = 0;.  asser
2ad70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2ad80 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2ad90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2ada0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2adb0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
2adc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2add0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2ade0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
2adf0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2ae00 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
2ae10 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
2ae20 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54  code==OP_CreateT
2ae30 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66  able ){.    /* f
2ae40 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54  lags = BTREE_INT
2ae50 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67  KEY; */.    flag
2ae60 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
2ae70 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
2ae80 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f  lags = BTREE_BLO
2ae90 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  BKEY;.  }.  rc =
2aea0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
2aeb0 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
2aec0 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29  t, &pgno, flags)
2aed0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
2aee0 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pgno;.  break;.}
2aef0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
2af00 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20  seSchema P1 * * 
2af10 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
2af20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
2af30 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
2af40 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
2af50 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
2af60 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
2af70 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2af80 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4. .**.** This
2af90 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2afa0 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
2afb0 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
2afc0 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
2afd0 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
2afe0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2aff0 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
2b000 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
2b010 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
2b020 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69  rseSchema: {.  i
2b030 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20  nt iDb;.  const 
2b040 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20  char *zMaster;. 
2b050 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49   char *zSql;.  I
2b060 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
2b070 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70  ;..  /* Any prep
2b080 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74  ared statement t
2b090 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  hat invokes this
2b0a0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c   opcode will hol
2b0b0 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f  d mutexes.  ** o
2b0c0 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20  n every btree.  
2b0d0 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71  This is a prereq
2b0e0 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b  uisite for invok
2b0f0 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  ing .  ** sqlite
2b100 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e  3InitCallback().
2b110 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
2b120 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
2b130 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e  iDb=0; iDb<db->n
2b140 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  Db; iDb++){.    
2b150 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c  assert( iDb==1 |
2b160 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  | sqlite3BtreeHo
2b170 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
2b180 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
2b190 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20  }.#endif..  iDb 
2b1a0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
2b1b0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
2b1c0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
2b1d0 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f  assert( DbHasPro
2b1e0 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
2b1f0 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
2b200 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20  );.  /* Used to 
2b210 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  be a conditional
2b220 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65   */ {.    zMaste
2b230 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  r = SCHEMA_TABLE
2b240 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44  (iDb);.    initD
2b250 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
2b260 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
2b270 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
2b280 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
2b290 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
2b2a0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
2b2b0 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
2b2c0 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
2b2d0 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
2b2e0 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
2b2f0 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
2b300 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
2b310 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
2b320 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70   zMaster, pOp->p
2b330 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53  4.z);.    if( zS
2b340 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ql==0 ){.      r
2b350 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
2b360 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2b370 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
2b380 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
2b390 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
2b3a0 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
2b3b0 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
2b3c0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
2b3d0 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
2b3e0 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
2b3f0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
2b400 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
2b410 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
2b420 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
2b430 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2b440 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
2b450 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
2b460 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2b470 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
2b480 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2b490 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
2b4a0 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33  if( rc ) sqlite3
2b4b0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
2b4c0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
2b4d0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2b4e0 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
2b4f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2b500 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
2b510 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2b520 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
2b530 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
2b540 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
2b550 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
2b560 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
2b570 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
2b580 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
2b590 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
2b5a0 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
2b5b0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
2b5c0 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
2b5d0 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
2b5e0 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
2b5f0 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
2b600 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
2b610 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
2b620 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
2b630 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
2b640 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2b650 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2b660 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
2b670 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2b680 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
2b690 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
2b6a0 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
2b6b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2b6c0 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
2b6d0 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
2b6e0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2b6f0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2b700 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2b710 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2b720 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2b730 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
2b740 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2b750 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2b760 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
2b770 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
2b780 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2b790 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2b7a0 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
2b7b0 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
2b7c0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2b7d0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2b7e0 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2b7f0 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2b800 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2b810 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
2b820 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2b830 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
2b840 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2b850 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2b860 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2b870 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
2b880 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2b890 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2b8a0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2b8b0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2b8c0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2b8d0 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
2b8e0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2b8f0 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2b900 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
2b910 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2b920 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2b930 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2b940 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
2b950 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
2b960 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2b970 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2b980 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2b990 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2b9a0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2b9b0 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
2b9c0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2b9d0 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
2b9e0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2b9f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ba00 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
2ba10 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
2ba20 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2ba30 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2ba40 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2ba50 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2ba60 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
2ba70 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
2ba80 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2ba90 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2baa0 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
2bab0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2bac0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2bad0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2bae0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2baf0 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2bb00 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2bb10 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2bb20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2bb30 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2bb40 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2bb50 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
2bb60 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2bb70 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
2bb80 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2bb90 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2bba0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2bbb0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2bbc0 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
2bbd0 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
2bbe0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
2bbf0 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73  * Do an analysis
2bc00 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c   of the currentl
2bc10 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e  y open database.
2bc20 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65    Store in.** re
2bc30 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65  gister P1 the te
2bc40 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d  xt of an error m
2bc50 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e  essage describin
2bc60 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a  g any problems..
2bc70 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d  ** If no problem
2bc80 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f  s are found, sto
2bc90 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67  re a NULL in reg
2bca0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2bcb0 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20  The register P3 
2bcc0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78  contains the max
2bcd0 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61  imum number of a
2bce0 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a  llowed errors..*
2bcf0 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33  * At most reg(P3
2bd00 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65  ) errors will be
2bd10 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e   reported..** In
2bd20 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
2bd30 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73  e analysis stops
2bd40 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28   as soon as reg(
2bd50 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a  P1) errors are .
2bd60 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31  ** seen.  Reg(P1
2bd70 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  ) is updated wit
2bd80 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
2bd90 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
2bda0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ..**.** The root
2bdb0 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66   page numbers of
2bdc0 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74   all tables in t
2bdd0 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
2bde0 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65  integer.** store
2bdf0 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65  d in reg(P1), re
2be00 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b  g(P1+1), reg(P1+
2be10 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20  2), ....  There 
2be20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a  are P2 tables.**
2be30 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66   total..**.** If
2be40 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
2be50 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
2be60 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
2be70 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
2be80 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
2be90 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2bea0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2beb0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
2bec0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
2bed0 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
2bee0 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
2bef0 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
2bf00 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
2bf10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
2bf20 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
2bf30 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
2bf40 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
2bf50 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
2bf60 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
2bf70 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
2bf80 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
2bf90 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  ed */.  int j;  
2bfa0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
2bfb0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
2bfc0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
2bfd0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
2bfe0 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
2bff0 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
2c000 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
2c010 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
2c020 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
2c030 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
2c040 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
2c050 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
2c060 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
2c070 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52  IsReader );.  nR
2c080 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
2c090 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
2c0a0 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71   );.  aRoot = sq
2c0b0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
2c0c0 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  (db, sizeof(int)
2c0d0 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20  *(nRoot+1) );.  
2c0e0 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67  if( aRoot==0 ) g
2c0f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73  oto no_mem;.  as
2c100 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2c110 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
2c120 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
2c130 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61   );.  pnErr = &a
2c140 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2c150 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
2c160 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2c170 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2c180 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
2c190 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2c1a0 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
2c1b0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2c1c0 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  1];.  for(j=0; j
2c1d0 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20  <nRoot; j++){.  
2c1e0 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e    aRoot[j] = (in
2c1f0 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  t)sqlite3VdbeInt
2c200 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b  Value(&pIn1[j]);
2c210 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20  .  }.  aRoot[j] 
2c220 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
2c230 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
2c240 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2c250 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2c260 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b  ask, pOp->p5) );
2c270 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
2c280 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
2c290 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
2c2a0 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
2c2b0 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
2c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2d0 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
2c2e0 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
2c2f0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2c300 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
2c310 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
2c320 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2c330 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2c340 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
2c350 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
2c360 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
2c370 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
2c380 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
2c390 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
2c3a0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
2c3b0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
2c3c0 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
2c3d0 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
2c3e0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2c3f0 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
2c400 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2c410 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
2c420 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2c430 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2c440 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2c450 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
2c460 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
2c470 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2c480 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50  opsis:  rowset(P
2c490 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49  1)=r[P2].**.** I
2c4a0 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65  nsert the intege
2c4b0 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20  r value held by 
2c4c0 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f  register P2 into
2c4d0 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78   a boolean index
2c4e0 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69  .** held in regi
2c4f0 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41  ster P1..**.** A
2c500 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c  n assertion fail
2c510 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61  s if P2 is not a
2c520 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
2c530 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a  se OP_RowSetAdd:
2c540 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c   {       /* in1,
2c550 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in2 */.  pIn1 =
2c560 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2c570 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2c580 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2c590 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
2c5a0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
2c5b0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2c5c0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2c5d0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2c5e0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2c5f0 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2c600 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2c610 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2c620 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2c630 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
2c640 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2c650 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32  >u.pRowSet, pIn2
2c660 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
2c670 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2c680 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
2c690 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2c6a0 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65  is:  r[P3]=rowse
2c6b0 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2c6c0 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2c6d0 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
2c6e0 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
2c6f0 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
2c700 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2c710 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
2c720 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
2c730 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
2c740 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
2c750 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
2c760 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2c770 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
2c780 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
2c790 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2c7a0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
2c7b0 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
2c7c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2c7d0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2c7e0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2c7f0 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
2c800 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
2c810 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
2c820 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
2c830 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
2c840 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
2c850 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2c860 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2c870 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2c880 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f  ken(1,2);.    go
2c890 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
2c8a0 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
2c8b0 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
2c8c0 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
2c8d0 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
2c8e0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
2c8f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2c900 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  0,2);.    sqlite
2c910 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2c920 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
2c930 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74   val);.  }.  got
2c940 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2c950 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2c960 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
2c970 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
2c980 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
2c990 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
2c9a0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2c9b0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
2c9c0 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
2c9d0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
2c9e0 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
2c9f0 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
2ca00 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
2ca10 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
2ca20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
2ca30 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
2ca40 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
2ca50 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
2ca60 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
2ca70 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
2ca80 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
2ca90 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
2caa0 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
2cab0 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
2cac0 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
2cad0 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
2cae0 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
2caf0 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
2cb00 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
2cb10 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
2cb20 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
2cb30 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
2cb40 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
2cb50 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2cb60 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
2cb70 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
2cb80 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
2cb90 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
2cba0 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
2cbb0 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
2cbc0 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
2cbd0 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
2cbe0 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
2cbf0 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
2cc00 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
2cc10 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
2cc20 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
2cc30 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
2cc40 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
2cc50 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2cc60 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
2cc70 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
2cc80 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
2cc90 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
2cca0 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
2ccb0 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
2ccc0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2ccd0 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
2cce0 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
2ccf0 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
2cd00 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
2cd10 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
2cd20 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
2cd30 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
2cd40 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
2cd50 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
2cd60 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
2cd70 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
2cd80 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
2cd90 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
2cda0 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
2cdb0 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
2cdc0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2cdd0 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
2cde0 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
2cdf0 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
2ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce10 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2ce20 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
2ce30 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
2ce40 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2ce50 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2ce60 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
2ce70 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
2ce80 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
2ce90 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
2cea0 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
2ceb0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
2cec0 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
2ced0 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
2cee0 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
2cef0 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
2cf00 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
2cf10 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
2cf20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
2cf30 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
2cf40 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2cf50 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2cf60 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2cf70 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2cf80 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2cf90 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2cfa0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2cfb0 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
2cfc0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2cfd0 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
2cfe0 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
2cff0 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
2d000 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
2d010 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
2d020 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
2d030 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49  RowSet, iSet, pI
2d040 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64  n3->u.i);.    Vd
2d050 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78  beBranchTaken(ex
2d060 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
2d070 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f 74  if( exists ) got
2d080 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2d090 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
2d0a0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
2d0b0 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2d0c0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
2d0d0 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
2d0e0 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2d0f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2d100 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
2d110 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
2d120 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2d130 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
2d140 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
2d150 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
2d160 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
2d170 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
2d180 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
2d190 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
2d1a0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
2d1b0 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
2d1c0 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
2d1d0 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
2d1e0 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
2d1f0 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
2d200 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
2d210 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
2d220 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
2d230 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
2d240 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
2d250 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
2d260 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
2d270 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
2d280 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2d290 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
2d2a0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
2d2b0 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
2d2c0 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
2d2d0 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
2d2e0 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
2d2f0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
2d300 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
2d310 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
2d320 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2d330 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
2d340 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2d350 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
2d360 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2d370 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
2d380 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
2d390 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
2d3a0 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
2d3b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2d3c0 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2d3e0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2d3f0 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
2d400 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
2d410 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
2d420 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2d430 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
2d440 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
2d450 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
2d460 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
2d470 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
2d480 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
2d490 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
2d4a0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2d4b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2d4c0 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
2d4d0 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
2d4e0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
2d4f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2d500 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
2d510 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
2d520 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2d530 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
2d540 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
2d550 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
2d560 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
2d570 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
2d580 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
2d590 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
2d5a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2d5b0 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
2d5c0 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
2d5d0 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
2d5e0 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
2d5f0 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
2d600 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2d610 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
2d620 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
2d630 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
2d640 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
2d650 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2d660 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
2d670 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
2d680 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
2d690 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
2d6a0 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
2d6b0 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
2d6c0 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
2d6d0 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
2d6e0 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
2d6f0 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
2d700 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
2d710 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
2d720 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
2d730 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
2d740 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
2d750 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
2d760 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2d770 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
2d780 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
2d790 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2d7a0 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
2d7b0 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
2d7c0 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
2d7d0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
2d7e0 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
2d7f0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
2d800 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
2d810 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
2d820 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
2d830 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
2d840 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
2d850 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
2d860 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
2d870 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
2d880 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
2d890 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
2d8a0 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
2d8b0 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
2d8c0 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
2d8d0 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
2d8e0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2d8f0 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
2d900 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2d910 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
2d920 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
2d930 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2d940 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
2d950 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
2d960 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
2d970 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
2d980 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
2d990 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
2d9a0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2d9b0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2d9c0 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d  eError(p, "too m
2d9d0 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
2d9e0 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
2d9f0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2da00 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
2da10 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
2da20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
2da30 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
2da40 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
2da50 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
2da60 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
2da70 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2da80 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
2da90 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
2daa0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
2dab0 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
2dac0 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
2dad0 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
2dae0 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
2daf0 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
2db00 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
2db10 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
2db20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
2db30 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29  flags&MEM_Frame)
2db40 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
2db50 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
2db60 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
2db70 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
2db80 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
2db90 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
2dba0 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
2dbb0 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
2dbc0 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
2dbd0 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
2dbe0 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
2dbf0 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
2dc00 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
2dc10 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
2dc20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
2dc30 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
2dc40 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
2dc50 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
2dc60 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
2dc70 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
2dc80 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
2dc90 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d  Csr;.    nByte =
2dca0 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
2dcb0 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20  dbeFrame)).     
2dcc0 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20           + nMem 
2dcd0 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20  * sizeof(Mem).  
2dce0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
2dcf0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73  rogram->nCsr * s
2dd00 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2dd10 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   *).            
2dd20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f    + pProgram->nO
2dd30 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29  nce * sizeof(u8)
2dd40 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
2dd50 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
2dd60 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
2dd70 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
2dd80 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2dd90 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
2dda0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2ddb0 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
2ddc0 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
2ddd0 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
2dde0 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
2ddf0 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
2de00 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
2de10 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
2de20 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2de30 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
2de40 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2de50 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69   pFrame->pc = (i
2de60 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
2de70 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
2de80 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
2de90 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
2dea0 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
2deb0 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
2dec0 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
2ded0 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
2dee0 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
2def0 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
2df00 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2df10 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
2df20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
2df30 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2df40 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e  .    pFrame->aOn
2df50 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63  ceFlag = p->aOnc
2df60 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d  eFlag;.    pFram
2df70 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->nOnceFlag = p
2df80 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66  ->nOnceFlag;.#if
2df90 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2dfa0 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
2dfb0 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e  S.    pFrame->an
2dfc0 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63  Exec = p->anExec
2dfd0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45  ;.#endif..    pE
2dfe0 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  nd = &VdbeFrameM
2dff0 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d  em(pFrame)[pFram
2e000 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20  e->nChildMem];. 
2e010 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65     for(pMem=Vdbe
2e020 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2e030 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d  ; pMem!=pEnd; pM
2e040 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65  em++){.      pMe
2e050 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  m->flags = MEM_U
2e060 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20  ndefined;.      
2e070 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
2e080 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2e090 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
2e0a0 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
2e0b0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2e0c0 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
2e0d0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
2e0e0 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73  ildMem );.    as
2e0f0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2e100 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2e110 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
2e120 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70  ssert( (int)(pOp
2e130 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d   - aOp)==pFrame-
2e140 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
2e150 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
2e160 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
2e170 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
2e180 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
2e190 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
2e1a0 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
2e1b0 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72  ->nChange;.  pFr
2e1c0 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d  ame->nDbChange =
2e1d0 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b   p->db->nChange;
2e1e0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
2e1f0 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
2e200 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
2e210 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62  em = aMem = &Vdb
2e220 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2e230 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  )[-1];.  p->nMem
2e240 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
2e250 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
2e260 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
2e270 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
2e280 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
2e290 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
2e2a0 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e  ->nMem+1];.  p->
2e2b0 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
2e2c0 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
2e2d0 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
2e2e0 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46  nOp;.  p->aOnceF
2e2f0 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e  lag = (u8 *)&p->
2e300 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72  apCsr[p->nCursor
2e310 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ];.  p->nOnceFla
2e320 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  g = pProgram->nO
2e330 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nce;.#ifdef SQLI
2e340 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2e350 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61  CANSTATUS.  p->a
2e360 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69  nExec = 0;.#endi
2e370 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d  f.  pOp = &aOp[-
2e380 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e  1];.  memset(p->
2e390 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d  aOnceFlag, 0, p-
2e3a0 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20  >nOnceFlag);..  
2e3b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e3c0 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
2e3d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
2e3e0 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
2e3f0 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
2e400 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
2e410 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
2e420 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2e430 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
2e440 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
2e450 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
2e460 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
2e470 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
2e480 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
2e490 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
2e4a0 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
2e4b0 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
2e4c0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
2e4d0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
2e4e0 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
2e4f0 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
2e500 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
2e510 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2e520 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
2e530 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
2e540 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
2e550 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
2e560 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2e570 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
2e580 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2e590 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
2e5a0 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
2e5b0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2e5c0 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
2e5d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2e5e0 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  t2 */.  VdbeFram
2e5f0 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
2e600 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20   *pIn;.  pOut = 
2e610 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2e620 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65  , pOp);.  pFrame
2e630 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2e640 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
2e650 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
2e660 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
2e670 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
2e680 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
2e690 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
2e6a0 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
2e6b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
2e6c0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2e6d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2e6e0 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
2e6f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2e700 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
2e710 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
2e720 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2e730 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
2e740 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
2e750 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
2e760 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
2e770 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
2e780 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
2e790 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
2e7a0 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
2e7b0 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
2e7c0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
2e7d0 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
2e7e0 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
2e7f0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
2e800 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
2e810 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
2e820 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
2e830 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
2e840 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
2e850 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2e860 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
2e870 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
2e880 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
2e890 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
2e8a0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2e8b0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
2e8c0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
2e8d0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
2e8e0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
2e8f0 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
2e900 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2e910 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
2e920 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
2e930 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2e940 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
2e950 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2e960 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
2e970 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
2e980 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2e990 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
2e9a0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2e9b0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2e9c0 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
2e9d0 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
2e9e0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2e9f0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
2ea00 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2ea10 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
2ea20 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
2ea30 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
2ea40 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
2ea50 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
2ea60 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
2ea70 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
2ea80 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
2ea90 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
2eaa0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
2eab0 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
2eac0 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
2ead0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
2eae0 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
2eaf0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2eb00 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
2eb10 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2eb20 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
2eb30 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
2eb40 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
2eb50 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
2eb60 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
2eb70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
2eb80 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
2eb90 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
2eba0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2ebb0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
2ebc0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
2ebd0 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
2ebe0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2ebf0 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
2ec00 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
2ec10 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
2ec20 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
2ec30 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
2ec40 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2ec50 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
2ec60 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
2ec70 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
2ec80 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2ec90 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
2eca0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
2ecb0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2ecc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ecd0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2ece0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2ecf0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2ed00 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
2ed10 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
2ed20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2ed30 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d   r[P1]=max(r[P1]
2ed40 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31  ,r[P2]).**.** P1
2ed50 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
2ed60 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
2ed70 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
2ed80 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
2ed90 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
2eda0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
2edb0 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
2edc0 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
2edd0 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
2ede0 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
2edf0 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
2ee00 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2ee10 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
2ee20 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
2ee30 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
2ee40 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2ee50 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
2ee60 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
2ee70 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
2ee80 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2ee90 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
2eea0 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
2eeb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
2eec0 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
2eed0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  n2 */.  VdbeFram
2eee0 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
2eef0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
2ef00 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
2ef10 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
2ef20 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
2ef30 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
2ef40 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
2ef50 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2ef60 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
2ef70 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2ef80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
2ef90 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2efa0 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
2efb0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2efc0 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
2efd0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
2efe0 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
2eff0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
2f000 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
2f010 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
2f020 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
2f030 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
2f040 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f050 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2f060 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
2f070 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
2f080 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20   IfPos P1 P2 P3 
2f090 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f0a0 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
2f0b0 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
2f0c0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
2f0d0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2f0e0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
2f0f0 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
2f100 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2f110 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73   1 or greater, s
2f120 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20  ubtract P3 from 
2f130 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
2f140 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  P1 and jump to P
2f150 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
2f160 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
2f170 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2f180 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
2f190 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
2f1a0 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
2f1b0 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
2f1c0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2f1d0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2f1e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
2f1f0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2f200 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2f210 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2f220 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2f230 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2f240 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2f250 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
2f260 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
2f270 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
2f280 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
2f290 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f  Op->p3;.    goto
2f2a0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
2f2b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f2c0 4f 70 63 6f 64 65 3a 20 53 65 74 49 66 4e 6f 74  Opcode: SetIfNot
2f2d0 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Pos P1 P2 P3 * *
2f2e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2f2f0 20 72 5b 50 31 5d 3c 3d 30 20 74 68 65 6e 20 72   r[P1]<=0 then r
2f300 5b 50 32 5d 3d 50 33 0a 2a 2a 0a 2a 2a 20 52 65  [P2]=P3.**.** Re
2f310 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
2f320 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2f330 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  r..** If the val
2f340 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2f350 31 20 69 73 20 6e 6f 74 20 70 6f 73 69 74 69 76  1 is not positiv
2f360 65 20 28 69 66 20 69 74 20 69 73 20 6c 65 73 73  e (if it is less
2f370 20 74 68 61 6e 20 31 29 20 74 68 65 6e 0a 2a 2a   than 1) then.**
2f380 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
2f390 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
2f3a0 20 62 65 20 74 68 65 20 69 6e 74 65 67 65 72 20   be the integer 
2f3b0 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P3..*/.case OP_S
2f3c0 65 74 49 66 4e 6f 74 50 6f 73 3a 20 7b 20 20 20  etIfNotPos: {   
2f3d0 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32       /* in1, in2
2f3e0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2f3f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2f400 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2f410 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2f420 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30  if( pIn1->u.i<=0
2f430 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 6f   ){.    pOut = o
2f440 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2f450 20 70 4f 70 29 3b 0a 20 20 20 20 70 4f 75 74 2d   pOp);.    pOut-
2f460 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  >u.i = pOp->p3;.
2f470 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2f480 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
2f490 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20  Zero P1 P2 P3 * 
2f4a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2f4b0 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
2f4c0 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20  r[P1]-=P3, goto 
2f4d0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2f4e0 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
2f4f0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
2f500 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
2f510 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a   register P1 is.
2f520 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e  ** initially non
2f530 7a 65 72 6f 2c 20 74 68 65 6e 20 73 75 62 74 72  zero, then subtr
2f540 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 20  act P3 from the 
2f550 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2f560 72 20 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70  r P1 and.** jump
2f570 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69   to P2.  If regi
2f580 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69  ster P1 is initi
2f590 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65  ally zero, leave
2f5a0 20 69 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a 2a   it unchanged.**
2f5b0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
2f5c0 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
2f5d0 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
2f5e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2f5f0 2f 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 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2f620 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
2f630 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
2f640 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
2f650 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
2f660 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  {.     pIn1->u.i
2f670 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20   -= pOp->p3;.   
2f680 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
2f690 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
2f6a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
2f6b0 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32  crJumpZero P1 P2
2f6c0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2f6d0 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29  is: if (--r[P1])
2f6e0 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
2f6f0 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
2f700 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67  st hold an integ
2f710 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74  er.  Decrement t
2f720 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
2f730 73 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20  ster P1.** then 
2f740 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  jump to P2 if th
2f750 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65  e new value is e
2f760 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a  xactly zero..*/.
2f770 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70  case OP_DecrJump
2f780 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Zero: {      /* 
2f790 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2f7a0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2f7b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2f7c0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2f7d0 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  Int );.  pIn1->u
2f7e0 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e  .i--;.  VdbeBran
2f7f0 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
2f800 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  i==0, 2);.  if( 
2f810 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67  pIn1->u.i==0 ) g
2f820 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2f830 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
2f840 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f  Opcode: JumpZero
2f850 49 6e 63 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  Incr P1 P2 * * *
2f860 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2f870 20 28 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20   (r[P1]++)==0 ) 
2f880 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2f890 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
2f8a0 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2f8b0 74 65 67 65 72 2e 20 20 49 66 20 72 65 67 69 73  teger.  If regis
2f8c0 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61  ter P1 is initia
2f8d0 6c 6c 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65  lly.** zero, the
2f8e0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  n jump to P2.  I
2f8f0 6e 63 72 65 6d 65 6e 74 20 72 65 67 69 73 74 65  ncrement registe
2f900 72 20 50 31 20 72 65 67 61 72 64 6c 65 73 73 20  r P1 regardless 
2f910 6f 66 20 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a  of whether or.**
2f920 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
2f930 20 74 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20   taken..*/.case 
2f940 4f 50 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a  OP_JumpZeroIncr:
2f950 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2f960 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2f970 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2f980 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2f990 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2f9a0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
2f9b0 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
2f9c0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
2f9d0 49 6e 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29  In1->u.i++)==0 )
2f9e0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2f9f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2fa00 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
2fa10 30 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  0 * P2 P3 P4 P5.
2fa20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
2fa30 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
2fa40 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
2fa50 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
2fa60 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2fa70 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
2fa80 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
2fa90 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
2faa0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2fab0 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
2fac0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
2fad0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
2fae0 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65  nction.  Registe
2faf0 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61  r P3 is the.** a
2fb00 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
2fb10 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
2fb20 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
2fb30 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
2fb40 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
2fb50 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ors..*/./* Opcod
2fb60 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
2fb70 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2fb80 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
2fb90 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
2fba0 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2fbb0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2fbc0 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2fbd0 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
2fbe0 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
2fbf0 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
2fc00 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71  pointer to an sq
2fc10 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a  lite3_context.**
2fc20 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73 20   object that is 
2fc30 75 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20  used to run the 
2fc40 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73  function.  Regis
2fc50 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20  ter P3 is.** as 
2fc60 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  the accumulator.
2fc70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
2fc80 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
2fc90 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
2fca0 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
2fcb0 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20  ccessors..**.** 
2fcc0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69  This opcode is i
2fcd0 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61  nitially coded a
2fce0 73 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20  s OP_AggStep0.  
2fcf0 4f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74  On first evaluat
2fd00 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63  ion,.** the Func
2fd10 44 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34  Def stored in P4
2fd20 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   is converted in
2fd30 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
2fd40 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65  ntext and.** the
2fd50 20 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67   opcode is chang
2fd60 65 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79  ed.  In this way
2fd70 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  , the initializa
2fd80 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2fd90 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
2fda0 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65  nly happens once
2fdb0 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20  , instead of on 
2fdc0 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65  each call to the
2fdd0 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f  .** step functio
2fde0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  n..*/.case OP_Ag
2fdf0 67 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20  gStep0: {.  int 
2fe00 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  n;.  sqlite3_con
2fe10 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61  text *pCtx;..  a
2fe20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2fe30 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
2fe40 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ;.  n = pOp->p5;
2fe50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2fe60 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2fe70 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2fe80 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
2fe90 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d  t( n==0 || (pOp-
2fea0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
2feb0 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
2fec0 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20  nCursor)+1) );. 
2fed0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2fee0 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
2fef0 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
2ff00 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74  ;.  pCtx = sqlit
2ff10 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
2ff20 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20  , sizeof(*pCtx) 
2ff30 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73  + (n-1)*sizeof(s
2ff40 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b  qlite3_value*));
2ff50 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29  .  if( pCtx==0 )
2ff60 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2ff70 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a  pCtx->pMem = 0;.
2ff80 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20    pCtx->pFunc = 
2ff90 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
2ffa0 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e   pCtx->iOp = (in
2ffb0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
2ffc0 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70   pCtx->pVdbe = p
2ffd0 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d  ;.  pCtx->argc =
2ffe0 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70   n;.  pOp->p4typ
2fff0 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a  e = P4_FUNCCTX;.
30000 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d    pOp->p4.pCtx =
30010 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70   pCtx;.  pOp->op
30020 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65  code = OP_AggSte
30030 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  p;.  /* Fall thr
30040 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67  ough into OP_Agg
30050 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f  Step */.}.case O
30060 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
30070 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt i;.  sqlite3_
30080 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20  context *pCtx;. 
30090 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
300a0 6d 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  m t;..  assert( 
300b0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
300c0 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74  FUNCCTX );.  pCt
300d0 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  x = pOp->p4.pCtx
300e0 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
300f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a  [pOp->p3];..  /*
30100 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f   If this functio
30110 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61  n is inside of a
30120 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65   trigger, the re
30130 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20  gister array in 
30140 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68  aMem[].  ** migh
30150 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e  t change from on
30160 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20  e evaluation to 
30170 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e  the next.  The n
30180 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
30190 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f  e.  ** checks to
301a0 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69   see if the regi
301b0 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63  ster array has c
301c0 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73  hanged, and if s
301d0 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74  o it.  ** reinit
301e0 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61  ializes the rela
301f0 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68  vant parts of th
30200 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
30210 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66  t object */.  if
30220 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20  ( pCtx->pMem != 
30230 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78  pMem ){.    pCtx
30240 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20  ->pMem = pMem;. 
30250 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61     for(i=pCtx->a
30260 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d  rgc-1; i>=0; i--
30270 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20  ) pCtx->argv[i] 
30280 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b  = &aMem[pOp->p2+
30290 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20  i];.  }..#ifdef 
302a0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66  SQLITE_DEBUG.  f
302b0 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e  or(i=0; i<pCtx->
302c0 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
302d0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
302e0 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  id(pCtx->argv[i]
302f0 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
30300 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
30310 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  i, pCtx->argv[i]
30320 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
30330 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71   pMem->n++;.  sq
30340 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74  lite3VdbeMemInit
30350 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c  (&t, db, MEM_Nul
30360 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74  l);.  pCtx->pOut
30370 20 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66   = &t;.  pCtx->f
30380 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a  ErrorOrAux = 0;.
30390 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67    pCtx->skipFlag
303a0 20 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70   = 0;.  (pCtx->p
303b0 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 70 43 74  Func->xStep)(pCt
303c0 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
303d0 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
303e0 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
303f0 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66  */.  if( pCtx->f
30400 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
30410 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
30420 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
30430 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
30440 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
30450 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a  alue_text(&t));.
30460 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d        rc = pCtx-
30470 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  >isError;.    }.
30480 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
30490 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20  emRelease(&t);. 
304a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
304b0 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d  rt( t.flags==MEM
304c0 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69  _Null );.  }.  i
304d0 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  f( pCtx->skipFla
304e0 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
304f0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
30500 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
30510 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
30520 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
30530 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
30540 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
30550 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
30560 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
30570 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
30580 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
30590 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
305a0 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P2.**.** Execute
305b0 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
305c0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
305d0 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
305e0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
305f0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
30600 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
30610 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
30620 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
30630 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
30640 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
30650 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
30660 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
30670 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
30680 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
30690 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
306a0 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
306b0 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
306c0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
306d0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
306e0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
306f0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
30700 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
30710 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
30720 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
30730 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
30740 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
30750 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
30760 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
30770 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
30780 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
30790 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
307a0 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
307b0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
307c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
307d0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
307e0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
307f0 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  ) );.  pMem = &a
30800 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
30810 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
30820 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
30830 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
30840 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
30850 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28  VdbeMemFinalize(
30860 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46  pMem, pOp->p4.pF
30870 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29  unc);.  if( rc )
30880 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
30890 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
308a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
308b0 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20  xt(pMem));.  }. 
308c0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
308d0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
308e0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
308f0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
30900 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
30910 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
30920 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
30930 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
30940 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
30950 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30960 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
30970 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
30980 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
30990 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
309a0 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
309b0 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
309c0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
309d0 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
309e0 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
309f0 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
30a00 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
30a10 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52   FULL,.** RESTAR
30a20 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20  T, or TRUNCATE. 
30a30 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
30a40 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
30a50 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
30a60 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
30a70 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
30a80 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
30a90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
30aa0 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
30ab0 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
30ac0 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
30ad0 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
30ae0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
30af0 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
30b00 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
30b10 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
30b20 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
30b30 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
30b40 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
30b50 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
30b60 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
30b70 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
30b80 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
30b90 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
30ba0 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
30bb0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
30bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30bd0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
30be0 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c00 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
30c10 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c30 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
30c40 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
30c50 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
30c60 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b  ly==0 );.  aRes[
30c70 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31  0] = 0;.  aRes[1
30c80 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31  ] = aRes[2] = -1
30c90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
30ca0 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
30cb0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20  KPOINT_PASSIVE. 
30cc0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
30cd0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
30ce0 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20  INT_FULL.       
30cf0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
30d00 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
30d10 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20  START.       || 
30d20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
30d30 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
30d40 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ATE.  );.  rc = 
30d50 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
30d60 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
30d70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
30d80 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
30d90 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
30da0 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  SY ){.    rc = S
30db0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
30dc0 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
30dd0 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
30de0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
30df0 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
30e00 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
30e10 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
30e20 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
30e30 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
30e40 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
30e50 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
30e60 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
30e70 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
30e80 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
30e90 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
30ea0 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
30eb0 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
30ec0 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
30ed0 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
30ee0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30ef0 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
30f00 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
30f10 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
30f20 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
30f30 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
30f40 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
30f50 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
30f60 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
30f70 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
30f80 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
30f90 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
30fa0 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
30fb0 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
30fc0 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
30fd0 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
30fe0 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
30ff0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
31000 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
31010 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
31020 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
31030 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
31040 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65   out2 */.  Btree
31050 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
31060 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
31070 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
31080 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
31090 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
310a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
310b0 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
310c0 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
310d0 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
310e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310f0 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
31100 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
31110 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
31120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
31130 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
31140 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66   mode */.#ifndef
31150 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
31160 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
31170 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
31180 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
31190 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
311a0 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66  pPager */.#endif
311b0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
311c0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
311d0 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  );.  eNew = pOp-
311e0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
311f0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
31200 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
31210 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
31220 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
31230 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
31240 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
31250 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
31260 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
31270 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
31280 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
31290 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
312a0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
312b0 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
312c0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
312d0 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
312e0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
312f0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
31300 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
31310 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
31320 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
31330 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
31340 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
31350 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
31360 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
31370 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
31380 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b  BtreePager(pBt);
31390 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65  .  eOld = sqlite
313a0 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c  3PagerGetJournal
313b0 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20  Mode(pPager);.  
313c0 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
313d0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
313e0 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  Y ) eNew = eOld;
313f0 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50  .  if( !sqlite3P
31400 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f  agerOkToChangeJo
31410 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
31420 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  ) ) eNew = eOld;
31430 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
31440 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c  _OMIT_WAL.  zFil
31450 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50  ename = sqlite3P
31460 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61  agerFilename(pPa
31470 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44  ger, 1);..  /* D
31480 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
31490 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
314a0 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
314b0 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
314c0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
314d0 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
314e0 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
314f0 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
31500 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
31510 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
31520 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
31530 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33   (sqlite3Strlen3
31540 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20  0(zFilename)==0 
31550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
31560 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
31570 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
31580 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
31590 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
315a0 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
315b0 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
315c0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
315d0 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
315e0 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
315f0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
31600 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
31610 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
31620 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
31630 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
31640 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64  ommit || db->nVd
31650 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20  beRead>1 ){.    
31660 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
31670 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
31680 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
31690 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
316a0 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d   change %s wal m
316b0 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ode from within 
316c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  a transaction",.
316d0 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d            (eNew=
316e0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
316f0 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20  DE_WAL ? "into" 
31700 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20  : "out of").    
31710 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b    );.      break
31720 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20  ;.    }else{. . 
31730 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50       if( eOld==P
31740 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
31750 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  _WAL ){.        
31760 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41  /* If leaving WA
31770 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68  L mode, close th
31780 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73  e log file. If s
31790 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63  uccessful, the c
317a0 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  all.        ** t
317b0 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  o PagerCloseWal(
317c0 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e  ) checkpoints an
317d0 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72  d deletes the wr
317e0 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20  ite-ahead-log . 
317f0 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20         ** file. 
31800 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63  An EXCLUSIVE loc
31810 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68  k may still be h
31820 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  eld on the datab
31830 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20  ase file .      
31840 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63    ** after a suc
31850 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20  cessful return. 
31860 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
31870 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
31880 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50  PagerCloseWal(pP
31890 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69  ager);.        i
318a0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
318b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
318c0 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
318d0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
318e0 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20   eNew);.        
318f0 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  }.      }else if
31900 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
31910 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
31920 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43   ){.        /* C
31930 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e  annot transition
31940 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d   directly from M
31950 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55  EMORY to WAL.  U
31960 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20  se mode OFF.    
31970 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74      ** as an int
31980 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20  ermediate */.   
31990 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
319a0 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
319b0 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f  pPager, PAGER_JO
319c0 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a  URNALMODE_OFF);.
319d0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
319e0 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73   /* Open a trans
319f0 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61  action on the da
31a00 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67  tabase file. Reg
31a10 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a  ardless of the j
31a20 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20  ournal.      ** 
31a30 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73  mode, this trans
31a40 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73  action always us
31a50 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
31a60 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a  urnal..      */.
31a70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
31a80 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
31a90 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20  ans(pBt)==0 );. 
31aa0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
31ab0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
31ac0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
31ad0 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42  reeSetVersion(pB
31ae0 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f  t, (eNew==PAGER_
31af0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
31b00 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20  ? 2 : 1));.     
31b10 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e   }.    }.  }.#en
31b20 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51  dif /* ifndef SQ
31b30 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f  LITE_OMIT_WAL */
31b40 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ..  if( rc ){.  
31b50 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
31b60 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69   }.  eNew = sqli
31b70 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
31b80 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
31b90 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66  New);..  pOut->f
31ba0 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
31bb0 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
31bc0 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
31bd0 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
31be0 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
31bf0 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
31c00 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31c10 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
31c20 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
31c30 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
31c40 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
31c50 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
31c60 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  g);.  break;.};.
31c70 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
31c80 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.
31c90 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
31ca0 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
31cb0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
31cc0 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
31cd0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
31ce0 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  uum * * * * *.**
31cf0 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
31d00 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
31d10 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   This opcode wil
31d20 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69  l cause other vi
31d30 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
31d40 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20  s to be created 
31d50 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79  and run.  It may
31d60 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66   not be called f
31d70 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20  rom within.** a 
31d80 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  transaction..*/.
31d90 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20  case OP_Vacuum: 
31da0 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  {.  assert( p->r
31db0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
31dc0 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
31dd0 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
31de0 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
31df0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
31e00 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
31e10 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
31e20 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
31e30 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
31e40 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
31e50 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
31e60 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
31e70 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
31e80 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
31e90 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
31ea0 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
31eb0 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
31ec0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
31ed0 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
31ee0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
31ef0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
31f00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
31f10 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
31f20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
31f30 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
31f40 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
31f50 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
31f60 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
31f70 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
31f80 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
31f90 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
31fa0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
31fb0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
31fc0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
31fd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
31fe0 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74  eeIncrVacuum(pBt
31ff0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
32000 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
32010 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72  DONE,2);.  if( r
32020 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
32030 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
32040 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  E_OK;.    goto j
32050 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
32060 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
32070 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
32080 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
32090 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
320a0 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
320b0 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68  s to expire.  Wh
320c0 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74  en an expired st
320d0 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78  atement.** is ex
320e0 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c  ecuted using sql
320f0 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77  ite3_step() it w
32100 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d  ill either autom
32110 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72  atically.** repr
32120 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66  epare itself (if
32130 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c   it was original
32140 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ly created using
32150 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
32160 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20  _v2()).** or it 
32170 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53  will fail with S
32180 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a  QLITE_SCHEMA..**
32190 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
321a0 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
321b0 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
321c0 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
321d0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
321e0 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
321f0 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
32200 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
32210 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pired..*/.case O
32220 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66  P_Expire: {.  if
32230 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  ( !pOp->p1 ){.  
32240 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
32250 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
32260 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s(db);.  }else{.
32270 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
32280 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
32290 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
322a0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
322b0 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
322c0 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
322d0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
322e0 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
322f0 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
32300 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
32310 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
32320 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
32330 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
32340 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
32350 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
32360 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
32370 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
32380 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
32390 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
323a0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
323b0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
323c0 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
323d0 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
323e0 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
323f0 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
32400 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
32410 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
32420 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
32430 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
32440 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
32450 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
32460 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
32470 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
32480 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
32490 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
324a0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
324b0 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
324c0 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
324d0 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
324e0 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
324f0 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
32500 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
32510 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
32520 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
32530 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
32540 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
32550 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20  mmitted) ){.    
32560 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
32570 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ; .    assert( p
32580 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
32590 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
325a0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
325b0 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29  btreeMask, p1) )
325c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73  ;.    assert( is
325d0 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
325e0 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
325f0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
32600 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
32610 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
32620 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
32630 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28  teLock);.    if(
32640 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
32650 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
32660 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
32670 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
32680 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
32690 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73  rror(p, "databas
326a0 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
326b0 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  d: %s", z);.    
326c0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
326d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
326e0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
326f0 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  CHE */..#ifndef 
32700 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
32710 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
32720 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a  de: VBegin * * *
32730 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d   P4 *.**.** P4 m
32740 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  ay be a pointer 
32750 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  to an sqlite3_vt
32760 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66  ab structure. If
32770 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a   so, call the .*
32780 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  * xBegin method 
32790 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
327a0 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74  **.** Also, whet
327b0 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73  her or not P4 is
327c0 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74   set, check that
327d0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69   this is not bei
327e0 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a  ng called from.*
327f0 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62  * within a callb
32800 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ack to a virtual
32810 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d   table xSync() m
32820 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c  ethod. If it is,
32830 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f   the error.** co
32840 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  de will be set t
32850 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e  o SQLITE_LOCKED.
32860 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67  .*/.case OP_VBeg
32870 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a  in: {.  VTable *
32880 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d  pVTab;.  pVTab =
32890 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
328a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
328b0 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61  abBegin(db, pVTa
328c0 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20  b);.  if( pVTab 
328d0 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  ) sqlite3VtabImp
328e0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54  ortErrmsg(p, pVT
328f0 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72  ab->pVtab);.  br
32900 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
32910 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32920 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
32930 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32940 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
32950 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
32960 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
32970 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67 69  .** P2 is a regi
32980 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ster that holds 
32990 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
329a0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
329b0 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20  atabase .** P1. 
329c0 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
329d0 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74   method for that
329e0 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
329f0 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20  OP_VCreate: {.  
32a00 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
32a10 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
32a20 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
32a30 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
32a40 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
32a50 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
32a60 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
32a70 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d  */..  memset(&sM
32a80 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
32a90 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20  em));.  sMem.db 
32aa0 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75  = db;.  /* Becau
32ab0 73 65 20 50 32 20 69 73 20 61 6c 77 61 79 73 20  se P2 is always 
32ac0 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c  a static string,
32ad0 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c   it is impossibl
32ae0 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  e for the.  ** s
32af0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
32b00 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20  y() to fail */. 
32b10 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70   assert( (aMem[p
32b20 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20  Op->p2].flags & 
32b30 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20  MEM_Str)!=0 );. 
32b40 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70   assert( (aMem[p
32b50 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20  Op->p2].flags & 
32b60 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29  MEM_Static)!=0 )
32b70 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
32b80 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65  VdbeMemCopy(&sMe
32b90 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  m, &aMem[pOp->p2
32ba0 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  ]);.  assert( rc
32bb0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
32bc0 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63   zTab = (const c
32bd0 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
32be0 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a  ue_text(&sMem);.
32bf0 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c    assert( zTab |
32c00 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
32c10 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62  ed );.  if( zTab
32c20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
32c30 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
32c40 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
32c50 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  zTab, &p->zErrMs
32c60 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  g);.  }.  sqlite
32c70 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
32c80 26 73 4d 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  &sMem);.  break;
32c90 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
32ca0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
32cb0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
32cc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
32cd0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
32ce0 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
32cf0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
32d00 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
32d10 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
32d20 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
32d30 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
32d40 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
32d50 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
32d60 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
32d70 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65  oy: {.  db->nVDe
32d80 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20  stroy++;.  rc = 
32d90 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
32da0 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
32db0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
32dc0 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d    db->nVDestroy-
32dd0 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  -;.  break;.}.#e
32de0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
32df0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
32e00 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
32e10 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
32e20 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
32e30 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
32e40 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
32e50 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
32e60 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
32e70 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
32e80 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
32e90 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
32ea0 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
32eb0 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
32ec0 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
32ed0 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
32ee0 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
32ef0 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
32f00 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
32f10 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
32f20 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
32f30 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b  b_cursor *pVCur;
32f40 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
32f50 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
32f60 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
32f70 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
32f80 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
32f90 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a   );.  pCur = 0;.
32fa0 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70    pVCur = 0;.  p
32fb0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
32fc0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69  Vtab->pVtab;.  i
32fd0 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e  f( pVtab==0 || N
32fe0 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64  EVER(pVtab->pMod
32ff0 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  ule==0) ){.    r
33000 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
33010 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  D;.    break;.  
33020 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  }.  pModule = pV
33030 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
33040 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
33050 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75  pen(pVtab, &pVCu
33060 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  r);.  sqlite3Vta
33070 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
33080 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
33090 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
330a0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
330b0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
330c0 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
330d0 20 2a 2f 0a 20 20 20 20 70 56 43 75 72 2d 3e 70   */.    pVCur->p
330e0 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20  Vtab = pVtab;.. 
330f0 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
33100 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a   vdbe cursor obj
33110 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20  ect */.    pCur 
33120 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
33130 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  (p, pOp->p1, 0, 
33140 2d 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42  -1, CURTYPE_VTAB
33150 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20  );.    if( pCur 
33160 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 75  ){.      pCur->u
33170 63 2e 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b  c.pVCur = pVCur;
33180 0a 20 20 20 20 20 20 70 56 74 61 62 2d 3e 6e 52  .      pVtab->nR
33190 65 66 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ef++;.    }else{
331a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
331b0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
331c0 29 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65  );.      pModule
331d0 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b  ->xClose(pVCur);
331e0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
331f0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  em;.    }.  }.  
33200 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
33210 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
33220 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
33230 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
33240 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
33250 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c  ./* Opcode: VFil
33260 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20  ter P1 P2 P3 P4 
33270 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
33280 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e  plan=r[P3] zplan
33290 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ='P4'.**.** P1 i
332a0 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
332b0 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20  d using VOpen.  
332c0 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73  P2 is an address
332d0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a   to jump to if.*
332e0 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72  * the filtered r
332f0 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
33300 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ty..**.** P4 is 
33310 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
33320 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73   string that was
33330 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
33340 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20  e xBestIndex.** 
33350 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
33360 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72  dule.  The inter
33370 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
33380 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65   P4 string is le
33390 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64  ft.** to the mod
333a0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
333b0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
333c0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
333d0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
333e0 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
333f0 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a  table specified.
33400 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69  ** by P1.  The i
33410 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61  nteger query pla
33420 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78  n parameter to x
33430 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64  Filter is stored
33440 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
33450 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  P3. Register P3+
33460 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67  1 stores the arg
33470 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  c parameter to b
33480 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a  e passed to the.
33490 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  ** xFilter metho
334a0 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b  d. Registers P3+
334b0 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65  2..P3+1+argc are
334c0 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64   the argc.** add
334d0 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  itional paramete
334e0 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73  rs which are pas
334f0 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65  sed to.** xFilte
33500 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73  r as argv. Regis
33510 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73  ter P3+2 becomes
33520 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61   argv[0] when pa
33530 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e  ssed to xFilter.
33540 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73  .**.** A jump is
33550 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74   made to P2 if t
33560 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66  he result set af
33570 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f  ter filtering wo
33580 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f  uld be empty..*/
33590 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72  .case OP_VFilter
335a0 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
335b0 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
335c0 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e  nt iQuery;.  con
335d0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
335e0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
335f0 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d  m *pQuery;.  Mem
33600 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74   *pArgc;.  sqlit
33610 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
33620 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  pVCur;.  sqlite3
33630 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
33640 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
33650 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
33660 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  nt i;.  Mem **ap
33670 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d  Arg;..  pQuery =
33680 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
33690 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65  .  pArgc = &pQue
336a0 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20  ry[1];.  pCur = 
336b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
336c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  ];.  assert( mem
336d0 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20  IsValid(pQuery) 
336e0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
336f0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75  ACE(pOp->p3, pQu
33700 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ery);.  assert( 
33710 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  pCur->eCurType==
33720 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
33730 20 20 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e    pVCur = pCur->
33740 75 63 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61  uc.pVCur;.  pVta
33750 62 20 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62  b = pVCur->pVtab
33760 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
33770 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
33780 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64   /* Grab the ind
33790 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72  ex number and ar
337a0 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  gc parameters */
337b0 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65  .  assert( (pQue
337c0 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  ry->flags&MEM_In
337d0 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e  t)!=0 && pArgc->
337e0 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
337f0 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29  ;.  nArg = (int)
33800 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51  pArgc->u.i;.  iQ
33810 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65  uery = (int)pQue
33820 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49  ry->u.i;..  /* I
33830 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
33840 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65  r method */.  re
33850 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d  s = 0;.  apArg =
33860 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72   p->apArg;.  for
33870 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
33880 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b  i++){.    apArg[
33890 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d  i] = &pArgc[i+1]
338a0 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f  ;.  }.  rc = pMo
338b0 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
338c0 43 75 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  Cur, iQuery, pOp
338d0 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
338e0 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Arg);.  sqlite3V
338f0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
33900 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
33910 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
33920 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
33930 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29  ule->xEof(pVCur)
33940 3b 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  ;.  }.  pCur->nu
33950 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62  llRow = 0;.  Vdb
33960 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
33970 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
33980 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
33990 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
339a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
339b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
339c0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
339d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
339e0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
339f0 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
33a00 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
33a10 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75  sis: r[P3]=vcolu
33a20 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  mn(P2).**.** Sto
33a30 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  re the value of 
33a40 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
33a50 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f   of.** the row o
33a60 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61  f the virtual-ta
33a70 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a  ble that the .**
33a80 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f   P1 cursor is po
33a90 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72  inting to into r
33aa0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
33ab0 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20  ase OP_VColumn: 
33ac0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
33ad0 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
33ae0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
33af0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
33b00 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65  *pDest;.  sqlite
33b10 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65  3_context sConte
33b20 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f  xt;..  VdbeCurso
33b30 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  r *pCur = p->apC
33b40 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
33b50 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75  ssert( pCur->eCu
33b60 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
33b70 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28  TAB );.  assert(
33b80 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
33b90 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
33ba0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
33bb0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
33bc0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
33bd0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
33be0 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
33bf0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
33c00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
33c10 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
33c20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
33c30 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75   pVtab = pCur->u
33c40 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
33c50 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
33c60 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
33c70 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
33c80 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
33c90 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
33ca0 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
33cb0 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70  ));.  sContext.p
33cc0 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d  Out = pDest;.  M
33cd0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
33ce0 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
33cf0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
33d00 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63  xColumn(pCur->uc
33d10 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78  .pVCur, &sContex
33d20 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73  t, pOp->p2);.  s
33d30 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
33d40 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
33d50 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74  ;.  if( sContext
33d60 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
33d70 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73  rc = sContext.is
33d80 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  Error;.  }.  sql
33d90 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
33da0 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e  coding(pDest, en
33db0 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53  coding);.  REGIS
33dc0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
33dd0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
33de0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
33df0 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
33e00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
33e10 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
33e20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
33e30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
33e40 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33e50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
33e60 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
33e70 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
33e80 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
33e90 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
33ea0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
33eb0 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
33ec0 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
33ed0 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
33ee0 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
33ef0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
33f00 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
33f10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
33f20 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
33f30 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
33f40 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
33f50 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
33f60 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
33f70 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
33f80 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
33f90 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
33fa0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
33fb0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
33fc0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
33fd0 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
33fe0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
33ff0 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
34000 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
34010 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
34020 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
34030 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
34040 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
34050 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
34060 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
34070 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56  ur->uc.pVCur->pV
34080 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
34090 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
340a0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
340b0 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
340c0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
340d0 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
340e0 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
340f0 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
34100 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
34110 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
34120 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
34130 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
34140 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
34150 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
34160 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
34170 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
34180 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
34190 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
341a0 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
341b0 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
341c0 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
341d0 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
341e0 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
341f0 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
34200 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
34210 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
34220 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20  rsor..  */.  rc 
34230 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  = pModule->xNext
34240 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29  (pCur->uc.pVCur)
34250 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
34260 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
34270 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  Vtab);.  if( rc=
34280 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
34290 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
342a0 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70  >xEof(pCur->uc.p
342b0 56 43 75 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62  VCur);.  }.  Vdb
342c0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65  eBranchTaken(!re
342d0 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73  s,2);.  if( !res
342e0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
342f0 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
34300 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67  p to P2 */.    g
34310 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
34320 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
34330 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f  errupt;.  }.  go
34340 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
34350 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66  errupt;.}.#endif
34360 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
34370 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
34380 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34390 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
343a0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
343b0 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
343c0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
343d0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
343e0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
343f0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
34400 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
34410 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
34420 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
34430 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
34440 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
34450 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
34460 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
34470 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
34480 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
34490 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
344a0 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
344b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
344c0 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
344d0 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
344e0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
344f0 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
34500 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34510 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
34520 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
34530 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
34540 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
34550 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
34560 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
34570 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
34580 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
34590 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
345a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
345b0 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
345c0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
345d0 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
345e0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
345f0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
34600 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
34610 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
34620 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
34630 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
34640 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
34650 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
34660 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
34670 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
34680 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
34690 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
346a0 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
346b0 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
346c0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
346d0 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
346e0 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
346f0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34700 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
34710 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
34720 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
34730 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
34740 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
34750 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a  : data=r[P3@P2].
34760 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
34770 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
34780 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
34790 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
347a0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
347b0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
347c0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
347d0 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
347e0 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
347f0 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
34800 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
34810 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
34820 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
34830 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
34840 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
34850 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
34860 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
34870 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
34880 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
34890 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
348a0 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
348b0 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
348c0 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
348d0 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
348e0 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
348f0 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
34900 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
34910 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
34920 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
34930 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
34940 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
34950 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
34960 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
34970 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
34980 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
34990 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
349a0 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
349b0 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
349c0 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
349d0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
349e0 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
349f0 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
34a00 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
34a10 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
34a20 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
34a30 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
34a40 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
34a50 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
34a60 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
34a70 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
34a80 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
34a90 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
34aa0 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
34ab0 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
34ac0 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
34ad0 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
34ae0 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
34af0 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
34b00 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
34b10 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
34b20 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
34b30 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
34b40 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
34b50 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
34b60 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
34b70 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
34b80 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68  ..**.** P5 is th
34b90 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20  e error actions 
34ba0 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f  (OE_Replace, OE_
34bb0 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  Fail, OE_Ignore,
34bc0 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c   etc) to.** appl
34bd0 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66  y in the case of
34be0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61   a constraint fa
34bf0 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65  ilure on an inse
34c00 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f  rt or update..*/
34c10 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
34c20 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
34c30 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
34c40 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
34c50 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
34c60 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
34c70 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
34c80 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
34c90 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
34ca0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
34cb0 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
34cc0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
34cd0 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
34ce0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
34cf0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
34d00 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
34d10 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
34d20 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
34d30 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73  place.  );.  ass
34d40 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
34d50 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d  ==0 );.  pVtab =
34d60 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
34d70 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74  pVtab;.  if( pVt
34d80 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70  ab==0 || NEVER(p
34d90 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30  Vtab->pModule==0
34da0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ) ){.    rc = SQ
34db0 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
34dc0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d   break;.  }.  pM
34dd0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
34de0 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d  Module;.  nArg =
34df0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
34e00 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
34e10 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  =P4_VTAB );.  if
34e20 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65  ( ALWAYS(pModule
34e30 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20  ->xUpdate) ){.  
34e40 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
34e50 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e  ict = db->vtabOn
34e60 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70  Conflict;.    ap
34e70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
34e80 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70      pX = &aMem[p
34e90 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72  Op->p3];.    for
34ea0 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
34eb0 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
34ec0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29  ( memIsValid(pX)
34ed0 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
34ee0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58  utToChange(p, pX
34ef0 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
34f00 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
34f10 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  ++;.    }.    db
34f20 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
34f30 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20   = pOp->p5;.    
34f40 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  rc = pModule->xU
34f50 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72  pdate(pVtab, nAr
34f60 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64  g, apArg, &rowid
34f70 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f  );.    db->vtabO
34f80 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62  nConflict = vtab
34f90 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20  OnConflict;.    
34fa0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
34fb0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
34fc0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
34fd0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d  QLITE_OK && pOp-
34fe0 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73  >p1 ){.      ass
34ff0 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61  ert( nArg>1 && a
35000 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72  pArg[0] && (apAr
35010 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  g[0]->flags&MEM_
35020 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64  Null) );.      d
35030 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
35040 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
35050 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
35060 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
35070 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20  E_CONSTRAINT && 
35080 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62  pOp->p4.pVtab->b
35090 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20  Constraint ){.  
350a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d      if( pOp->p5=
350b0 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
350c0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
350d0 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  E_OK;.      }els
350e0 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72  e{.        p->er
350f0 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f  rorAction = ((pO
35100 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
35110 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20  e) ? OE_Abort : 
35120 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20  pOp->p5);.      
35130 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
35140 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
35150 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
35160 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
35170 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35180 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35190 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
351a0 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
351b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
351c0 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
351d0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
351e0 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
351f0 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
35200 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
35210 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
35220 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
35230 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
35240 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
35250 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
35260 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
35270 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
35280 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d  treeLastPage(db-
35290 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
352a0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  t);.  break;.}.#
352b0 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
352c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
352d0 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
352e0 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50  code: MaxPgcnt P
352f0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
35300 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65  * Try to set the
35310 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
35320 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65  unt for database
35330 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
35340 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f   in P3..** Do no
35350 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75  t let the maximu
35360 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c  m page count fal
35370 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72  l below the curr
35380 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61  ent page count a
35390 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61  nd.** do not cha
353a0 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nge the maximum 
353b0 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
353c0 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a   if P3==0..**.**
353d0 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d   Store the maxim
353e0 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66  um page count af
353f0 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69  ter the change i
35400 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
35410 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63  /.case OP_MaxPgc
35420 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
35430 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e   /* out2 */.  un
35440 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61  signed int newMa
35450 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  x;.  Btree *pBt;
35460 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
35470 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
35480 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
35490 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
354a0 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
354b0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
354c0 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
354d0 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
354e0 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
354f0 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
35500 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
35510 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
35520 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
35530 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
35540 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
35550 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
35560 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
35570 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
35580 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20   Init * P2 * P4 
35590 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
355a0 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a  Start at P2.**.*
355b0 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61  * Programs conta
355c0 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  in a single inst
355d0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63  ance of this opc
355e0 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20  ode as the very 
355f0 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e  first.** opcode.
35600 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
35610 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
35620 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
35630 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
35640 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
35650 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
35660 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
35670 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
35680 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f  e callback..** O
35690 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b  r if P4 is blank
356a0 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67  , use the string
356b0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
356c0 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a  ite3_sql()..**.*
356d0 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a  * If P2 is not z
356e0 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  ero, jump to ins
356f0 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
35700 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20  case OP_Init: { 
35710 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
35720 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61   */.  char *zTra
35730 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a  ce;.  char *z;..
35740 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
35750 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20  MIT_TRACE.  if( 
35760 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26  db->xTrace.   &&
35770 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a   !p->doingRerun.
35780 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
35790 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
357a0 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
357b0 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a  ))!=0.  ){.    z
357c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78   = sqlite3VdbeEx
357d0 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63  pandSql(p, zTrac
357e0 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61  e);.    db->xTra
357f0 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67  ce(db->pTraceArg
35800 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , z);.    sqlite
35810 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a  3DbFree(db, z);.
35820 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
35830 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
35840 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f  E.  zTrace = (pO
35850 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
35860 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a  4.z : p->zSql);.
35870 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a    if( zTrace ){.
35880 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66      int i;.    f
35890 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
358a0 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  b; i++){.      i
358b0 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  f( DbMaskTest(p-
358c0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d  >btreeMask, i)==
358d0 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
358e0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
358f0 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d  _control(db, db-
35900 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53  >aDb[i].zName, S
35910 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43  QLITE_FCNTL_TRAC
35920 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  E, zTrace);.    
35930 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
35940 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
35950 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66  _TRACE */.#ifdef
35960 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
35970 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
35980 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
35990 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61  )!=0.   && (zTra
359a0 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
359b0 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
359c0 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
359d0 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
359e0 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
359f0 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
35a00 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
35a10 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
35a20 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
35a30 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a  E_OMIT_TRACE */.
35a40 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20    if( pOp->p2 ) 
35a50 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
35a60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
35a70 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
35a80 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 2f  E_CURSOR_HINTS./
35a90 2a 20 4f 70 63 6f 64 65 3a 20 43 75 72 73 6f 72  * Opcode: Cursor
35aa0 48 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  Hint P1 * * P4 *
35ab0 0a 2a 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61  .**.** Provide a
35ac0 20 68 69 6e 74 20 74 6f 20 63 75 72 73 6f 72 20   hint to cursor 
35ad0 50 31 20 74 68 61 74 20 69 74 20 6f 6e 6c 79 20  P1 that it only 
35ae0 6e 65 65 64 73 20 74 6f 20 72 65 74 75 72 6e 20  needs to return 
35af0 72 6f 77 73 20 74 68 61 74 0a 2a 2a 20 73 61 74  rows that.** sat
35b00 69 73 66 79 20 74 68 65 20 45 78 70 72 20 69 6e  isfy the Expr in
35b10 20 50 34 2e 20 20 54 4b 5f 52 45 47 49 53 54 45   P4.  TK_REGISTE
35b20 52 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 50  R terms in the P
35b30 34 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 66  4 expression ref
35b40 65 72 0a 2a 2a 20 74 6f 20 76 61 6c 75 65 73 20  er.** to values 
35b50 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 20 69  currently held i
35b60 6e 20 72 65 67 69 73 74 65 72 73 2e 20 20 54 4b  n registers.  TK
35b70 5f 43 4f 4c 55 4d 4e 20 74 65 72 6d 73 20 69 6e  _COLUMN terms in
35b80 20 74 68 65 20 50 34 0a 2a 2a 20 65 78 70 72 65   the P4.** expre
35b90 73 73 69 6f 6e 20 72 65 66 65 72 20 74 6f 20 63  ssion refer to c
35ba0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 62 2d  olumns in the b-
35bb0 74 72 65 65 20 74 6f 20 77 68 69 63 68 20 63 75  tree to which cu
35bc0 72 73 6f 72 20 50 31 20 69 73 20 70 6f 69 6e 74  rsor P1 is point
35bd0 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ing..*/.case OP_
35be0 43 75 72 73 6f 72 48 69 6e 74 3a 20 7b 0a 20 20  CursorHint: {.  
35bf0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
35c00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
35c10 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
35c20 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
35c30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
35c40 74 79 70 65 3d 3d 50 34 5f 45 58 50 52 20 29 3b  type==P4_EXPR );
35c50 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
35c60 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
35c70 20 70 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72   pC ){.    asser
35c80 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
35c90 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
35ca0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
35cb0 65 65 43 75 72 73 6f 72 48 69 6e 74 28 70 43 2d  eeCursorHint(pC-
35cc0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
35cd0 45 45 5f 48 49 4e 54 5f 52 41 4e 47 45 2c 20 70  EE_HINT_RANGE, p
35ce0 4f 70 2d 3e 70 34 2e 70 45 78 70 72 2c 20 61 4d  Op->p4.pExpr, aM
35cf0 65 6d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  em);.  }.  break
35d00 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
35d10 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
35d20 4f 52 5f 48 49 4e 54 53 20 2a 2f 0a 0a 2f 2a 20  OR_HINTS */../* 
35d30 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
35d40 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
35d50 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
35d60 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
35d70 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
35d80 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
35d90 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
35da0 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
35db0 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
35dc0 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
35dd0 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
35de0 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
35df0 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
35e00 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
35e10 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
35e20 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
35e30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
35e40 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
35e50 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
35e60 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
35e70 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
35e80 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
35e90 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
35ea0 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
35eb0 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
35ec0 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
35ed0 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
35ee0 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  lain */.  assert
35ef0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
35f00 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Noop || pOp->o
35f10 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
35f20 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
35f30 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
35f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
35f80 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
35f90 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
35fa0 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
35fb0 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
35fc0 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
35fd0 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
35fe0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
35ff0 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
36000 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
36010 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
36020 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
36030 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
36040 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
36050 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
36060 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
36070 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
36080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
360a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
360b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
360c0 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
360d0 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
360e0 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64 54 69  .      u64 endTi
360f0 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  me = sqlite3Hwti
36100 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20  me();.      if( 
36110 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20  endTime>start ) 
36120 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65 73 20  pOrigOp->cycles 
36130 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61  += endTime - sta
36140 72 74 3b 0a 20 20 20 20 20 20 70 4f 72 69 67 4f  rt;.      pOrigO
36150 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  p->cnt++;.    }.
36160 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54  #endif..    /* T
36170 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64  he following cod
36180 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74  e adds nothing t
36190 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e  o the actual fun
361a0 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a  ctionality.    *
361b0 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  * of the program
361c0 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65  .  It is only he
361d0 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61  re for testing a
361e0 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20  nd debugging..  
361f0 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65    ** On the othe
36200 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20  r hand, it does 
36210 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20  burn CPU cycles 
36220 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75  every time throu
36230 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76  gh.    ** the ev
36240 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53  aluator loop.  S
36250 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69  o we can leave i
36260 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55  t out when NDEBU
36270 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
36280 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45    */.#ifndef NDE
36290 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20  BUG.    assert( 
362a0 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20 26 26  pOp>=&aOp[-1] &&
362b0 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70   pOp<&aOp[p->nOp
362c0 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  -1] );..#ifdef S
362d0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
362e0 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
362f0 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
36300 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63   ){.      if( rc
36310 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72 63  !=0 ) printf("rc
36320 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20  =%d\n",rc);.    
36330 20 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f    if( pOrigOp->o
36340 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f  pflags & (OPFLG_
36350 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20  OUT2) ){.       
36360 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
36370 4f 72 69 67 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  OrigOp->p2, &aMe
36380 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 32 5d 29 3b  m[pOrigOp->p2]);
36390 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
363a0 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c  f( pOrigOp->opfl
363b0 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
363c0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
363d0 73 74 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f  sterTrace(pOrigO
363e0 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 72  p->p3, &aMem[pOr
363f0 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  igOp->p3]);.    
36400 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
36410 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55    /* SQLITE_DEBU
36420 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20  G */.#endif  /* 
36430 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f  NDEBUG */.  }  /
36440 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * The end of the
36450 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68   for(;;) loop th
36460 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20  e loops through 
36470 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a  opcodes */..  /*
36480 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
36490 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e  s point, it mean
364a0 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e  s that execution
364b0 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74   is finished wit
364c0 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20  h.  ** an error 
364d0 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20  of some kind..  
364e0 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  */.vdbe_error_ha
364f0 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63  lt:.  assert( rc
36500 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63   );.  p->rc = rc
36510 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
36520 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
36530 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
36540 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
36550 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
36560 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
36570 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
36580 20 20 20 20 20 20 28 69 6e 74 29 28 70 4f 70 20        (int)(pOp 
36590 2d 20 61 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c 2c  - aOp), p->zSql,
365a0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
365b0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
365c0 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
365d0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
365e0 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
365f0 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
36600 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
36610 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  if( resetSchemaO
36620 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20  nFault>0 ){.    
36630 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
36640 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53  chema(db, resetS
36650 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b  chemaOnFault-1);
36660 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20  .  }..  /* This 
36670 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
36680 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63  out of this proc
36690 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20  edure.  We have 
366a0 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20  to.  ** release 
366b0 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62  the mutexes on b
366c0 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20  trees that were 
366d0 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a  acquired at the.
366e0 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62    ** top. */.vdb
366f0 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e  e_return:.  db->
36700 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
36710 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73  Rowid;.  testcas
36720 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a  e( nVmStep>0 );.
36730 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
36740 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
36750 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74  VM_STEP] += (int
36760 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69  )nVmStep;.  sqli
36770 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b  te3VdbeLeave(p);
36780 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
36790 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
367a0 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
367b0 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
367c0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
367d0 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
367e0 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
367f0 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 56  _big:.  sqlite3V
36800 64 62 65 45 72 72 6f 72 28 70 2c 20 22 73 74 72  dbeError(p, "str
36810 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
36820 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  big");.  rc = SQ
36830 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67  LITE_TOOBIG;.  g
36840 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
36850 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
36860 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c  to here if a mal
36870 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a  loc() fails..  *
36880 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e  /.no_mem:.  db->
36890 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
368a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  ;.  sqlite3VdbeE
368b0 72 72 6f 72 28 70 2c 20 22 6f 75 74 20 6f 66 20  rror(p, "out of 
368c0 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d  memory");.  rc =
368d0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
368e0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
368f0 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
36900 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e  p to here for an
36910 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20  y other kind of 
36920 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68  fatal error.  Th
36930 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a  e "rc" variable.
36940 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64    ** should hold
36950 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65   the error numbe
36960 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  r..  */.abort_du
36970 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73  e_to_error:.  as
36980 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67  sert( p->zErrMsg
36990 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d  ==0 );.  if( db-
369a0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
369b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
369c0 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  M;.  if( rc!=SQL
369d0 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
369e0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
369f0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
36a00 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
36a10 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  c));.  }.  goto 
36a20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
36a30 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
36a40 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
36a50 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
36a60 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
36a70 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
36a80 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
36a90 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
36aa0 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
36ab0 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
36ac0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
36ad0 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63  TERRUPT;.  p->rc
36ae0 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
36af0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
36b00 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
36b10 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64  (rc));.  goto vd
36b20 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d  be_error_halt;.}
36b30 0a                                               .