/ Hex Artifact Content
Login

Artifact 334c39a26214270555f4b5f9ba490aaf9a9e2601:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 20 20 28 28 44 42 29 2d  OOK(DB)   ((DB)-
0d20: 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
0d30: 61 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61  ack||(DB)->xUpda
0d40: 74 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73  teCallback).#els
0d50: 65 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55  e.# define HAS_U
0d60: 50 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20  PDATE_HOOK(DB)  
0d70: 28 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61  ((DB)->xUpdateCa
0d80: 6c 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a  llback).#endif..
0d90: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67  /*.** The next g
0da0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69  lobal variable i
0db0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61  s incremented ea
0dc0: 63 68 20 74 69 6d 65 20 74 68 65 20 4f 50 5f 46  ch time the OP_F
0dd0: 6f 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  ound opcode.** i
0de0: 73 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73  s executed. This
0df0: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
0e00: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
0e10: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  the foreign key.
0e20: 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70  ** operation imp
0e30: 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f  lemented using O
0e40: 50 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f  P_FkIsZero is wo
0e50: 72 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69  rking. This vari
0e60: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
0e70: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
0e80: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
0e90: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ea0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
0eb0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0ec0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0ed0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75  .int sqlite3_fou
0ee0: 6e 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65  nd_count = 0;.#e
0ef0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  ndif../*.** Test
0f00: 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73   a register to s
0f10: 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73  ee if it exceeds
0f20: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78   the current max
0f30: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
0f40: 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72  ** If it does, r
0f50: 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61  ecord the new ma
0f60: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0f70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0f80: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
0f90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0fa0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
0fb0: 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41  T).# define UPDA
0fc0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
0fd0: 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  P)  updateMaxBlo
0fe0: 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23  bsize(P).#else.#
0ff0: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1000: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23  AX_BLOBSIZE(P).#
1010: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76  endif../*.** Inv
1020: 6f 6b 65 20 74 68 65 20 56 44 42 45 20 63 6f 76  oke the VDBE cov
1030: 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20  erage callback, 
1040: 69 66 20 74 68 61 74 20 63 61 6c 6c 62 61 63 6b  if that callback
1050: 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
1060: 69 73 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  is.** feature is
1070: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 20 73   used for test s
1080: 75 69 74 65 20 76 61 6c 69 64 61 74 69 6f 6e 20  uite validation 
1090: 6f 6e 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f  only and does no
10a0: 74 20 61 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70  t appear an.** p
10b0: 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 73  roduction builds
10c0: 2e 0a 2a 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20  ..**.** M is an 
10d0: 69 6e 74 65 67 65 72 2c 20 32 20 6f 72 20 33 2c  integer, 2 or 3,
10e0: 20 74 68 61 74 20 69 6e 64 69 63 65 73 20 68 6f   that indices ho
10f0: 77 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  w many different
1100: 20 77 61 79 73 20 74 68 65 0a 2a 2a 20 62 72 61   ways the.** bra
1110: 6e 63 68 20 63 61 6e 20 67 6f 2e 20 20 49 74 20  nch can go.  It 
1120: 69 73 20 75 73 75 61 6c 6c 79 20 32 2e 20 20 22  is usually 2.  "
1130: 49 22 20 69 73 20 74 68 65 20 64 69 72 65 63 74  I" is the direct
1140: 69 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 2a  ion the branch.*
1150: 2a 20 67 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73  * goes.  0 means
1160: 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20   falls through. 
1170: 20 31 20 6d 65 61 6e 73 20 62 72 61 6e 63 68 20   1 means branch 
1180: 69 73 20 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61  is taken.  2 mea
1190: 6e 73 20 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64  ns the.** second
11a0: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 62 72 61   alternative bra
11b0: 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a  nch is taken..**
11c0: 0a 2a 2a 20 69 53 72 63 4c 69 6e 65 20 69 73 20  .** iSrcLine is 
11d0: 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
11e0: 6c 69 6e 65 20 28 66 72 6f 6d 20 74 68 65 20 5f  line (from the _
11f0: 5f 4c 49 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74  _LINE__ macro) t
1200: 68 61 74 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  hat.** generated
1210: 20 74 68 65 20 56 44 42 45 20 69 6e 73 74 72 75   the VDBE instru
1220: 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73  ction.  This ins
1230: 74 72 75 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73  trumentation ass
1240: 75 6d 65 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a  umes that all.**
1250: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 69 73 20   source code is 
1260: 69 6e 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  in a single file
1270: 20 28 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69   (the amalgamati
1280: 6f 6e 29 2e 20 20 53 70 65 63 69 61 6c 20 76 61  on).  Special va
1290: 6c 75 65 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20  lues 1.** and 2 
12a0: 66 6f 72 20 74 68 65 20 69 53 72 63 4c 69 6e 65  for the iSrcLine
12b0: 20 70 61 72 61 6d 65 74 65 72 20 6d 65 61 6e 20   parameter mean 
12c0: 74 68 61 74 20 74 68 69 73 20 70 61 72 74 69 63  that this partic
12d0: 75 6c 61 72 20 62 72 61 6e 63 68 20 69 73 0a 2a  ular branch is.*
12e0: 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f  * always taken o
12f0: 72 20 6e 65 76 65 72 20 74 61 6b 65 6e 2c 20 72  r never taken, r
1300: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
1310: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1320: 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1330: 45 29 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65  E).# define Vdbe
1340: 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29  BranchTaken(I,M)
1350: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1360: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1370: 49 2c 4d 29 20 76 64 62 65 54 61 6b 65 42 72 61  I,M) vdbeTakeBra
1380: 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e  nch(pOp->iSrcLin
1390: 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74 69 63 20  e,I,M).  static 
13a0: 76 6f 69 64 20 76 64 62 65 54 61 6b 65 42 72 61  void vdbeTakeBra
13b0: 6e 63 68 28 69 6e 74 20 69 53 72 63 4c 69 6e 65  nch(int iSrcLine
13c0: 2c 20 75 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20  , u8 I, u8 M){. 
13d0: 20 20 20 69 66 28 20 69 53 72 63 4c 69 6e 65 3c     if( iSrcLine<
13e0: 3d 32 20 26 26 20 41 4c 57 41 59 53 28 69 53 72  =2 && ALWAYS(iSr
13f0: 63 4c 69 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20  cLine>0) ){.    
1400: 20 20 4d 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a    M = iSrcLine;.
1410: 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1420: 74 68 65 20 74 72 75 74 68 20 6f 66 20 56 64 62  the truth of Vdb
1430: 65 43 6f 76 65 72 61 67 65 41 6c 77 61 79 73 54  eCoverageAlwaysT
1440: 61 6b 65 6e 28 29 20 61 6e 64 20 0a 20 20 20 20  aken() and .    
1450: 20 20 2a 2a 20 56 64 62 65 43 6f 76 65 72 61 67    ** VdbeCoverag
1460: 65 4e 65 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f  eNeverTaken() */
1470: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
1480: 4d 20 26 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20  M & I)==I );.   
1490: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
14a0: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
14b0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
14c0: 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 20 20  h==0 ) return;  
14d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
14e0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
14f0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
1500: 68 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  h(sqlite3GlobalC
1510: 6f 6e 66 69 67 2e 70 56 64 62 65 42 72 61 6e 63  onfig.pVdbeBranc
1520: 68 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20  hArg,.          
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 20 20 20 69 53 72 63              iSrc
1550: 4c 69 6e 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d  Line,I,M);.    }
1560: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  .  }.#endif../*.
1570: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1580: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1590: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
15a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
15b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
15c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
15d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
15e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
15f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1600: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1610: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1620: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1630: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1640: 50 2c 65 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20  P,enc,0)) \.    
1650: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
1660: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
1670: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
1680: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
1690: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
16a0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
16b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
16c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
16d0: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
16e0: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
16f0: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1700: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1710: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1720: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1730: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1740: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1750: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
1760: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
1770: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
1780: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
1790: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
17a0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
17b0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
17c0: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
17d0: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
17e0: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
17f0: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1800: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1810: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1820: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1830: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1840: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 77   into a string w
1850: 69 74 68 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c  ith P.z==P.zMall
1860: 6f 63 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  oc..*/.#define D
1870: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29  eephemeralize(P)
1880: 20 5c 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e   \.   if( ((P)->
1890: 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29  flags&MEM_Ephem)
18a0: 21 3d 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20  !=0 \.       && 
18b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
18c0: 6b 65 57 72 69 74 65 61 62 6c 65 28 50 29 20 29  keWriteable(P) )
18d0: 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a  { goto no_mem;}.
18e0: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
18f0: 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 77 61  if the cursor wa
1900: 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74  s opened using t
1910: 68 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72  he OP_OpenSorter
1920: 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66   opcode. */.#def
1930: 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29 20  ine isSorter(x) 
1940: 28 28 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d 30  ((x)->pSorter!=0
1950: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  )../*.** Allocat
1960: 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d  e VdbeCursor num
1970: 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72  ber iCur.  Retur
1980: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
1990: 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a  t.  Return NULL.
19a0: 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74  ** if we run out
19b0: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73   of memory..*/.s
19c0: 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72  tatic VdbeCursor
19d0: 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72   *allocateCursor
19e0: 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20  (.  Vdbe *p,    
19f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a00: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
1a10: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20   */.  int iCur, 
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a30: 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20  ndex of the new 
1a40: 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VdbeCursor */.  
1a50: 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20  int nField,     
1a60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a70: 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1a80: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1a90: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20  */.  int iDb,   
1aa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1ab0: 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f  tabase the curso
1ac0: 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72  r belongs to, or
1ad0: 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42   -1 */.  int isB
1ae0: 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f  treeCursor     /
1af0: 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65  * True for B-Tre
1b00: 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73  e.  False for ps
1b10: 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74  eudo-table or vt
1b20: 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69  ab */.){.  /* Fi
1b30: 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  nd the memory ce
1b40: 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ll that will be 
1b50: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1b60: 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79  e blob of memory
1b70: 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66  .  ** required f
1b80: 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73  or this VdbeCurs
1b90: 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74  or structure. It
1ba0: 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74   is convenient t
1bb0: 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64  o use a .  ** vd
1bc0: 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  be memory cell t
1bd0: 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d  o manage the mem
1be0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
1bf0: 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20  equired for a.  
1c00: 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  ** VdbeCursor st
1c10: 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20  ructure for the 
1c20: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e  following reason
1c30: 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s:.  **.  **   *
1c40: 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f   Sometimes curso
1c50: 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73  r numbers are us
1c60: 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20  ed for a couple 
1c70: 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a  of different.  *
1c80: 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69  *     purposes i
1c90: 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d  n a vdbe program
1ca0: 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20  . The different 
1cb0: 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69  uses might requi
1cc0: 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66  re.  **     diff
1cd0: 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f  erent sized allo
1ce0: 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20  cations. Memory 
1cf0: 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72  cells provide gr
1d00: 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20  owable.  **     
1d10: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a  allocations..  *
1d20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20  *.  **   * When 
1d30: 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d  using ENABLE_MEM
1d40: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20  ORY_MANAGEMENT, 
1d50: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66  memory cell buff
1d60: 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20  ers can.  **    
1d70: 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79   be freed lazily
1d80: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33   via the sqlite3
1d90: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
1da0: 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a  ) API. This.  **
1db0: 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74       minimizes t
1dc0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c  he number of mal
1dd0: 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62  loc calls made b
1de0: 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20  y the system..  
1df0: 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63  **.  ** Memory c
1e00: 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73  ells for cursors
1e10: 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61   are allocated a
1e20: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
1e30: 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70   address.  ** sp
1e40: 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ace. Memory cell
1e50: 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65   (p->nMem) corre
1e60: 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72  sponds to cursor
1e70: 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20   0. Space for.  
1e80: 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d  ** cursor 1 is m
1e90: 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79  anaged by memory
1ea0: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31   cell (p->nMem-1
1eb0: 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d  ), etc..  */.  M
1ec0: 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  em *pMem = &p->a
1ed0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72  Mem[p->nMem-iCur
1ee0: 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  ];..  int nByte;
1ef0: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f00: 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20  Cx = 0;.  nByte 
1f10: 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28  = .      ROUND8(
1f20: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f30: 72 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75  r)) + 2*sizeof(u
1f40: 33 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20  32)*nField + .  
1f50: 20 20 20 20 28 69 73 42 74 72 65 65 43 75 72 73      (isBtreeCurs
1f60: 6f 72 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43  or?sqlite3BtreeC
1f70: 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a  ursorSize():0);.
1f80: 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72 3c  .  assert( iCur<
1f90: 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1fa0: 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  if( p->apCsr[iCu
1fb0: 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  r] ){.    sqlite
1fc0: 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1fd0: 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72  p, p->apCsr[iCur
1fe0: 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72  ]);.    p->apCsr
1ff0: 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a  [iCur] = 0;.  }.
2000: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
2010: 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43  =sqlite3VdbeMemC
2020: 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d  learAndResize(pM
2030: 65 6d 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20  em, nByte) ){.  
2040: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
2050: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
2060: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
2070: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
2080: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
2090: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
20a0: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
20b0: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
20c0: 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e 61 4f  eld;.    pCx->aO
20d0: 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e 61 54  ffset = &pCx->aT
20e0: 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20  ype[nField];.   
20f0: 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73   if( isBtreeCurs
2100: 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  or ){.      pCx-
2110: 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  >pCursor = (BtCu
2120: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
2130: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
2140: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
2150: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
2160: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
2170: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
2180: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43  rsorZero(pCx->pC
2190: 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
21a0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
21b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
21c0: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
21d0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
21e0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
21f0: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
2200: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
2210: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
2220: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2230: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
2240: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
2250: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
2260: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
2270: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
2280: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
2290: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
22a0: 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lone..**.** If t
22b0: 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20 66 6c  he bTryForInt fl
22c0: 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  ag is true, then
22d0: 20 65 78 74 72 61 20 65 66 66 6f 72 74 20 69 73   extra effort is
22e0: 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a 2a 2a   made to give.**
22f0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2300: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53 74 72  esentation.  Str
2310: 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b 20 6c  ings that look l
2320: 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  ike floating poi
2330: 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62 75 74  nt.** values but
2340: 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f 20 66   which have no f
2350: 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e  ractional compon
2360: 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20 27 34  ent (example: '4
2370: 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c 20 68  8.00').** will h
2380: 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20 72 65  ave a MEM_Int re
2390: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77 68 65  presentation whe
23a0: 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20  n bTryForInt is 
23b0: 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62  true..**.** If b
23c0: 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66 61 6c  TryForInt is fal
23d0: 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68 65 20  se, then if the 
23e0: 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63 6f 6e  input string con
23f0: 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61 6c 0a  tains a decimal.
2400: 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78 70 6f  ** point or expo
2410: 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69 6f 6e  nential notation
2420: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
2430: 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c 20 65  only MEM_Real, e
2440: 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72 65 20  ven.** if there 
2450: 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e 74 65  is an exact inte
2460: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2470: 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e 74 69  on of the quanti
2480: 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ty..*/.static vo
2490: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
24a0: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
24b0: 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72 49 6e  c, int bTryForIn
24c0: 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61  t){.  double rVa
24d0: 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61 6c 75  lue;.  i64 iValu
24e0: 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20 70 52  e;.  u8 enc = pR
24f0: 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73 65 72  ec->enc;.  asser
2500: 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  t( (pRec->flags 
2510: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49  & (MEM_Str|MEM_I
2520: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d  nt|MEM_Real))==M
2530: 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66 28 20  EM_Str );.  if( 
2540: 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52 65 63  sqlite3AtoF(pRec
2550: 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70 52  ->z, &rValue, pR
2560: 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29  ec->n, enc)==0 )
2570: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 30   return;.  if( 0
2580: 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  ==sqlite3Atoi64(
2590: 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65  pRec->z, &iValue
25a0: 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20  , pRec->n, enc) 
25b0: 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 69  ){.    pRec->u.i
25c0: 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 70   = iValue;.    p
25d0: 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
25e0: 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  M_Int;.  }else{.
25f0: 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20 3d 20      pRec->u.r = 
2600: 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63  rValue;.    pRec
2610: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52  ->flags |= MEM_R
2620: 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62 54 72  eal;.    if( bTr
2630: 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69 74 65  yForInt ) sqlite
2640: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
2650: 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 7d 0a  nity(pRec);.  }.
2660: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
2670: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
2680: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
2690: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
26a0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
26b0: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
26c0: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
26d0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
26e0: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
26f0: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2700: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2710: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
2720: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
2730: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2740: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
2750: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
2760: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
2770: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
2780: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
2790: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
27a0: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
27b0: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
27c0: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
27d0: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
27e0: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
27f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2800: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2810: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
2820: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
2830: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
2840: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
2850: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
2860: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
2870: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
2880: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
2890: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
28a0: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
28b0: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
28c0: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
28d0: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
28e0: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
28f0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2900: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2910: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
2920: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
2930: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
2940: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
2950: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
2960: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d    if( affinity>=
2970: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
2980: 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  IC ){.    assert
2990: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
29a0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c  TE_AFF_INTEGER |
29b0: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
29c0: 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20  TE_AFF_REAL.    
29d0: 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69           || affi
29e0: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
29f0: 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20  _NUMERIC );.    
2a00: 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  if( (pRec->flags
2a10: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
2a20: 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  {.      if( (pRe
2a30: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2a40: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
2a50: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
2a60: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61  gs & MEM_Str ) a
2a70: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2a80: 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20  ity(pRec,1);.   
2a90: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2aa0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
2ab0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
2ac0: 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  c);.      }.    
2ad0: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  }.  }else if( af
2ae0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2af0: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
2b00: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
2b10: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
2b20: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
2b30: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
2b40: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
2b50: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2b60: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2b70: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2b80: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2b90: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2ba0: 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ion..    */.    
2bb0: 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c  if( 0==(pRec->fl
2bc0: 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20  ags&MEM_Str) && 
2bd0: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
2be0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
2bf0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2c00: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
2c10: 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b  y(pRec, enc, 1);
2c20: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
2c30: 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65  .** Try to conve
2c40: 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 61  rt the type of a
2c50: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
2c60: 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63  nt or a result c
2c70: 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20  olumn.** into a 
2c80: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
2c90: 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74  tation.  Use eit
2ca0: 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52  her INTEGER or R
2cb0: 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a  EAL whichever.**
2cc0: 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e   is appropriate.
2cd0: 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68    But only do th
2ce0: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20  e conversion if 
2cf0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77  it is possible w
2d00: 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f  ithout.** loss o
2d10: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e  f information an
2d20: 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65 76  d return the rev
2d30: 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68 65  ised type of the
2d40: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e   argument..*/.in
2d50: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  t sqlite3_value_
2d60: 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c  numeric_type(sql
2d70: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
2d80: 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20 3d  ){.  int eType =
2d90: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2da0: 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66 28  ype(pVal);.  if(
2db0: 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54   eType==SQLITE_T
2dc0: 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a  EXT ){.    Mem *
2dd0: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
2de0: 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  l;.    applyNume
2df0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d  ricAffinity(pMem
2e00: 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65 20  , 0);.    eType 
2e10: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2e20: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a  type(pVal);.  }.
2e30: 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a    return eType;.
2e40: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2e50: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2e60: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2e70: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
2e80: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2e90: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
2ea0: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
2eb0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2ec0: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
2ed0: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2ee0: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2ef0: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2f00: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2f10: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2f20: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2f30: 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65  c);.}../*.** pMe
2f40: 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79  m currently only
2f50: 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67 20   holds a string 
2f60: 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20 61  type (or maybe a
2f70: 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63 61   BLOB that we ca
2f80: 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20 61  n.** interpret a
2f90: 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77 65  s a string if we
2fa0: 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70   want to).  Comp
2fb0: 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70 6f  ute its correspo
2fc0: 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63  nding.** numeric
2fd0: 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f 6e   type, if has on
2fe0: 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65 6d  e.  Set the pMem
2ff0: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
3000: 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63  u.i fields.** ac
3010: 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74  cordingly..*/.st
3020: 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45 5f  atic u16 SQLITE_
3030: 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65  NOINLINE compute
3040: 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20  NumericType(Mem 
3050: 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72 74  *pMem){.  assert
3060: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3070: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
3080: 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  al))==0 );.  ass
3090: 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
30a0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
30b0: 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20  _Blob))!=0 );.  
30c0: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28  if( sqlite3AtoF(
30d0: 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e  pMem->z, &pMem->
30e0: 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d  u.r, pMem->n, pM
30f0: 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20  em->enc)==0 ){. 
3100: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
3110: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74  .  if( sqlite3At
3120: 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70  oi64(pMem->z, &p
3130: 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e  Mem->u.i, pMem->
3140: 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53  n, pMem->enc)==S
3150: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
3160: 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a  return MEM_Int;.
3170: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d    }.  return MEM
3180: 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  _Real;.}../*.** 
3190: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65 72  Return the numer
31a0: 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65 6d  ic type for pMem
31b0: 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74  , either MEM_Int
31c0: 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20   or MEM_Real or 
31d0: 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e  both or.** none.
31e0: 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20    .**.** Unlike 
31f0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
3200: 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f 75  nity(), this rou
3210: 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f  tine does not mo
3220: 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  dify pMem->flags
3230: 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65 73  ..** But it does
3240: 20 73 65 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   set pMem->u.r a
3250: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70  nd pMem->u.i app
3260: 72 6f 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73  ropriately..*/.s
3270: 74 61 74 69 63 20 75 31 36 20 6e 75 6d 65 72 69  tatic u16 numeri
3280: 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  cType(Mem *pMem)
3290: 7b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  {.  if( pMem->fl
32a0: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
32b0: 45 4d 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20 20  EM_Real) ){.    
32c0: 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61  return pMem->fla
32d0: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
32e0: 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69  M_Real);.  }.  i
32f0: 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  f( pMem->flags &
3300: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3310: 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ob) ){.    retur
3320: 6e 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  n computeNumeric
3330: 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a  Type(pMem);.  }.
3340: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23    return 0;.}..#
3350: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3360: 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61  UG./*.** Write a
3370: 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65 70   nice string rep
3380: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
3390: 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63  he contents of c
33a0: 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f  ell pMem.** into
33b0: 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65   buffer zBuf, le
33c0: 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f  ngth nBuf..*/.vo
33d0: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
33e0: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d  mPrettyPrint(Mem
33f0: 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42   *pMem, char *zB
3400: 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73  uf){.  char *zCs
3410: 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20  r = zBuf;.  int 
3420: 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b  f = pMem->flags;
3430: 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
3440: 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63   char *const enc
3450: 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22  names[] = {"(X)"
3460: 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29  , "(8)", "(16LE)
3470: 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20  ", "(16BE)"};.. 
3480: 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20   if( f&MEM_Blob 
3490: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
34a0: 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66    char c;.    if
34b0: 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b  ( f & MEM_Dyn ){
34c0: 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a  .      c = 'z';.
34d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
34e0: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
34f0: 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b  EM_Ephem))==0 );
3500: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66  .    }else if( f
3510: 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b   & MEM_Static ){
3520: 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a  .      c = 't';.
3530: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3540: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3550: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3560: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3570: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3580: 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20     c = 'e';.    
3590: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
35a0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44  MEM_Static|MEM_D
35b0: 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  yn))==0 );.    }
35c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20  else{.      c = 
35d0: 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  's';.    }..    
35e0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
35f0: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22  (100, zCsr, "%c"
3600: 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  , c);.    zCsr +
3610: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3620: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c  0(zCsr);.    sql
3630: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3640: 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20  0, zCsr, "%d[", 
3650: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43  pMem->n);.    zC
3660: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
3670: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
3680: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3690: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
36a0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
36b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
36c0: 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69  Csr, "%02X", ((i
36d0: 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20  nt)pMem->z[i] & 
36e0: 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43  0xFF));.      zC
36f0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
3700: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
3710: 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20   }.    for(i=0; 
3720: 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e  i<16 && i<pMem->
3730: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63  n; i++){.      c
3740: 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b  har z = pMem->z[
3750: 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c  i];.      if( z<
3760: 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a  32 || z>126 ) *z
3770: 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20  Csr++ = '.';.   
3780: 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20     else *zCsr++ 
3790: 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = z;.    }..    
37a0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
37b0: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73  (100, zCsr, "]%s
37c0: 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d  ", encnames[pMem
37d0: 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73  ->enc]);.    zCs
37e0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
37f0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3800: 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f  if( f & MEM_Zero
3810: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3820: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3830: 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d  zCsr,"+%dz",pMem
3840: 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20  ->u.nZero);.    
3850: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3860: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3870: 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72  .    }.    *zCsr
3880: 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65   = '\0';.  }else
3890: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72   if( f & MEM_Str
38a0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b   ){.    int j, k
38b0: 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20  ;.    zBuf[0] = 
38c0: 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26  ' ';.    if( f &
38d0: 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20   MEM_Dyn ){.    
38e0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b    zBuf[1] = 'z';
38f0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3900: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3910: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3920: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3930: 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29  f & MEM_Static )
3940: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3950: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
3960: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
3970: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
3980: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
3990: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
39a0: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
39b0: 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  ] = 'e';.      a
39c0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
39d0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
39e0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
39f0: 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  e{.      zBuf[1]
3a00: 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20   = 's';.    }.  
3a10: 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c    k = 2;.    sql
3a20: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3a30: 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64  0, &zBuf[k], "%d
3a40: 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20  ", pMem->n);.   
3a50: 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72   k += sqlite3Str
3a60: 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b  len30(&zBuf[k]);
3a70: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3a80: 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d   '[';.    for(j=
3a90: 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65  0; j<15 && j<pMe
3aa0: 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  m->n; j++){.    
3ab0: 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a    u8 c = pMem->z
3ac0: 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63  [j];.      if( c
3ad0: 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37 66  >=0x20 && c<0x7f
3ae0: 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66   ){.        zBuf
3af0: 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20  [k++] = c;.     
3b00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
3b10: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b  zBuf[k++] = '.';
3b20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
3b30: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3b40: 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ]';.    sqlite3_
3b50: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42  snprintf(100,&zB
3b60: 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b  uf[k], encnames[
3b70: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
3b80: 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72   k += sqlite3Str
3b90: 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b  len30(&zBuf[k]);
3ba0: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3bb0: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
3bc0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3bd0: 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e  DEBUG./*.** Prin
3be0: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  t the value of a
3bf0: 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74 72   register for tr
3c00: 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a  acing purposes:.
3c10: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d  */.static void m
3c20: 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d  emTracePrint(Mem
3c30: 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66   *p){.  if( p->f
3c40: 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66  lags & MEM_Undef
3c50: 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e  ined ){.    prin
3c60: 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29  tf(" undefined")
3c70: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3c80: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
3c90: 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  l ){.    printf(
3ca0: 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73  " NULL");.  }els
3cb0: 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20  e if( (p->flags 
3cc0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53  & (MEM_Int|MEM_S
3cd0: 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d  tr))==(MEM_Int|M
3ce0: 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 70  EM_Str) ){.    p
3cf0: 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64 22  rintf(" si:%lld"
3d00: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c  , p->u.i);.  }el
3d10: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3d20: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
3d30: 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64   printf(" i:%lld
3d40: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e  ", p->u.i);.#ifn
3d50: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3d60: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
3d70: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3d80: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
3d90: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 72  {.    printf(" r
3da0: 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23  :%g", p->u.r);.#
3db0: 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66  endif.  }else if
3dc0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3dd0: 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20 70  _RowSet ){.    p
3de0: 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65 74 29  rintf(" (rowset)
3df0: 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ");.  }else{.   
3e00: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
3e10: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3e20: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70  MemPrettyPrint(p
3e30: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70 72 69  , zBuf);.    pri
3e40: 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75 66 29  ntf(" %s", zBuf)
3e50: 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76  ;.  }.}.static v
3e60: 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63  oid registerTrac
3e70: 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  e(int iReg, Mem 
3e80: 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52  *p){.  printf("R
3e90: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
3ea0: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
3eb0: 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28  nt(p);.  printf(
3ec0: 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  "\n");.}.#endif.
3ed0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
3ee0: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
3ef0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
3f00: 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26  M) if(db->flags&
3f10: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
3f20: 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28 52  )registerTrace(R
3f30: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ,M).#else.#  def
3f40: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
3f50: 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a  CE(R,M).#endif..
3f60: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
3f70: 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74  FILE../* .** hwt
3f80: 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69  ime.h contains i
3f90: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20  nline assembler 
3fa0: 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  code for impleme
3fb0: 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70  nting .** high-p
3fc0: 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e  erformance timin
3fd0: 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  g routines..*/.#
3fe0: 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e  include "hwtime.
3ff0: 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  h"..#endif..#ifn
4000: 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a  def NDEBUG./*.**
4010: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
4020: 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72  s only called fr
4030: 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73  om within an ass
4040: 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e  ert() expression
4050: 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  . It.** checks t
4060: 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e  hat the sqlite3.
4070: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72  nTransaction var
4080: 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74  iable is correct
4090: 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  ly set to.** the
40a0: 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   number of non-t
40b0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
40c0: 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20  oints currently 
40d0: 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65  in the .** linke
40e0: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
40f0: 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  at sqlite3.pSave
4100: 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73  point..** .** Us
4110: 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  age:.**.**     a
4120: 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
4130: 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
4140: 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.*/.static int 
4150: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4160: 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  unt(sqlite3 *db)
4170: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
4180: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20   Savepoint *p;. 
4190: 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65   for(p=db->pSave
41a0: 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70  point; p; p=p->p
41b0: 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73  Next) n++;.  ass
41c0: 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61  ert( n==(db->nSa
41d0: 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73  vepoint + db->is
41e0: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
41f0: 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72  oint) );.  retur
4200: 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  n 1;.}.#endif...
4210: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4220: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4230: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4240: 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  n..** This is th
4250: 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65  e core of sqlite
4260: 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69  3_step().  .*/.i
4270: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
4280: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42a0: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
42b0: 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20 20  ){.  int pc=0;  
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63  /* The program c
42e0: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a  ounter */.  Op *
42f0: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20  aOp = p->aOp;   
4300: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4310: 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70  f p->aOp */.  Op
4320: 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20 20   *pOp;          
4330: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
4340: 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  ent operation */
4350: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
4360: 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a  TE_OK;        /*
4370: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
4380: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
4390: 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20  b = p->db;      
43a0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
43b0: 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63   */.  u8 resetSc
43c0: 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b  hemaOnFault = 0;
43d0: 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61   /* Reset schema
43e0: 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
43f0: 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20  if positive */. 
4400: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45   u8 encoding = E
4410: 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54  NC(db);     /* T
4420: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
4430: 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ding */.  int iC
4440: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
4450: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
4460: 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72  f last OP_Compar
4470: 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  e operation */. 
4480: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
4490: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
44a0: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
44b0: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
44c0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
44d0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
44e0: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
44f0: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4500: 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20  t = 0;/* Invoke 
4510: 78 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e  xProgress() when
4520: 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73   nVmStep reaches
4530: 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a   this */.#endif.
4540: 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d    Mem *aMem = p-
4550: 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20  >aMem;       /* 
4560: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20  Copy of p->aMem 
4570: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d  */.  Mem *pIn1 =
4580: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4590: 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65  /* 1st input ope
45a0: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
45b0: 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In2 = 0;        
45c0: 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75       /* 2nd inpu
45d0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
45e0: 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20  em *pIn3 = 0;   
45f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64            /* 3rd
4600: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4610: 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  /.  Mem *pOut = 
4620: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4630: 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64  * Output operand
4640: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
4650: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4660: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4670: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4680: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69  P_Compare */.  i
4690: 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  64 lastRowid = d
46a0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f  b->lastRowid;  /
46b0: 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66  * Saved value of
46c0: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74   the last insert
46d0: 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66   ROWID */.#ifdef
46e0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
46f0: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
4700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
4710: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
4720: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4730: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
4740: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
4750: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
4760: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
4770: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
4780: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
4790: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
47a0: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
47b0: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
47c0: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
47d0: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
47e0: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
47f0: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
4800: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
4810: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4820: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
4830: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4840: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
4850: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4860: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4870: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4880: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
4890: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
48a0: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
48b0: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
48c0: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72  nly!=0 );.  p->r
48d0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
48e0: 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65   p->iCurrentTime
48f0: 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
4900: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
4910: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
4920: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
4930: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
4940: 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  0;.  if( db->u1.
4950: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
4960: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
4970: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73  o_interrupt;.  s
4980: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
4990: 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66  eSql(p);.#ifndef
49a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
49b0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
49c0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
49d0: 73 73 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ss ){.    assert
49e0: 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72  ( 0 < db->nProgr
49f0: 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50  essOps );.    nP
4a00: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 28  rogressLimit = (
4a10: 75 6e 73 69 67 6e 65 64 29 70 2d 3e 61 43 6f 75  unsigned)p->aCou
4a20: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4a30: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4a40: 0a 20 20 20 20 69 66 28 20 6e 50 72 6f 67 72 65  .    if( nProgre
4a50: 73 73 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a 20 20  ssLimit==0 ){.  
4a60: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
4a70: 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65  it = db->nProgre
4a80: 73 73 4f 70 73 3b 0a 20 20 20 20 7d 65 6c 73 65  ssOps;.    }else
4a90: 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  {.      nProgres
4aa0: 73 4c 69 6d 69 74 20 25 3d 20 28 75 6e 73 69 67  sLimit %= (unsig
4ab0: 6e 65 64 29 64 62 2d 3e 6e 50 72 6f 67 72 65 73  ned)db->nProgres
4ac0: 73 4f 70 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sOps;.    }.  }.
4ad0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4ae0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4af0: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4b00: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4b10: 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70  ->pc==0.   && (p
4b20: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53  ->db->flags & (S
4b30: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
4b40: 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  g|SQLITE_VdbeEQP
4b50: 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  |SQLITE_VdbeTrac
4b60: 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  e))!=0.  ){.    
4b70: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f  int i;.    int o
4b80: 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c  nce = 1;.    sql
4b90: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4ba0: 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  (p);.    if( p->
4bb0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4bc0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29  TE_VdbeListing )
4bd0: 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22  {.      printf("
4be0: 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73  VDBE Program Lis
4bf0: 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  ting:\n");.     
4c00: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4c10: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4c20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4c30: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20  ntOp(stdout, i, 
4c40: 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20  &aOp[i]);.      
4c50: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4c60: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4c70: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b  QLITE_VdbeEQP ){
4c80: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
4c90: 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a  i<p->nOp; i++){.
4ca0: 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b          if( aOp[
4cb0: 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  i].opcode==OP_Ex
4cc0: 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20  plain ){.       
4cd0: 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72     if( once ) pr
4ce0: 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72 79  intf("VDBE Query
4cf0: 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20   Plan:\n");.    
4d00: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73        printf("%s
4d10: 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a  \n", aOp[i].p4.z
4d20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63  );.          onc
4d30: 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
4d40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
4d50: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
4d60: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4d70: 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74 66  eTrace )  printf
4d80: 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22  ("VDBE Trace:\n"
4d90: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
4da0: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4db0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4dc0: 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51  pc=p->pc; rc==SQ
4dd0: 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a  LITE_OK; pc++){.
4de0: 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
4df0: 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  0 && pc<p->nOp )
4e00: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
4e10: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
4e20: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
4e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4e40: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
4e50: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
4e60: 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b  f.    nVmStep++;
4e70: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
4e80: 70 63 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  pc];.#ifdef SQLI
4e90: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
4ea0: 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66  CANSTATUS.    if
4eb0: 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d  ( p->anExec ) p-
4ec0: 3e 61 6e 45 78 65 63 5b 70 63 5d 2b 2b 3b 0a 23  >anExec[pc]++;.#
4ed0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
4ee0: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
4ef0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
4f00: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
4f10: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4f20: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4f30: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4f40: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
4f50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4f60: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
4f70: 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d   pc, pOp);.    }
4f80: 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a  .#endif.      ..
4f90: 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20      /* Check to 
4fa0: 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20 74  see if we need t
4fb0: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
4fc0: 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f  terrupt.  This o
4fd0: 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20  nly happens.    
4fe0: 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20  ** if we have a 
4ff0: 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75 69  special test bui
5000: 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ld..    */.#ifde
5010: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
5020: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
5030: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20  terrupt_count>0 
5040: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5050: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5060: 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  --;.      if( sq
5070: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
5080: 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  count==0 ){.    
5090: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
50a0: 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20  rrupt(db);.     
50b0: 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a   }.    }.#endif.
50c0: 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f  .    /* On any o
50d0: 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 22  pcode with the "
50e0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22  out2-prerelease"
50f0: 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20   tag, free any. 
5100: 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61     ** external a
5110: 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f  llocations out o
5120: 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65  f mem[p2] and se
5130: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a  t mem[p2] to be.
5140: 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69      ** an undefi
5150: 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70  ned integer.  Op
5160: 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65  codes will eithe
5170: 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e  r fill in the in
5180: 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c  teger.    ** val
5190: 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65  ue or convert me
51a0: 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65  m[p2] to a diffe
51b0: 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a  rent type..    *
51c0: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  /.    assert( pO
51d0: 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69  p->opflags==sqli
51e0: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
51f0: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29  y[pOp->opcode] )
5200: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
5210: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5220: 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29  UT2_PRERELEASE )
5230: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5240: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5250: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5260: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
5270: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5280: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
5290: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 6d  Op->p2];.      m
52a0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
52b0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  p, pOut);.      
52c0: 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  if( VdbeMemDynam
52d0: 69 63 28 70 4f 75 74 29 20 29 20 73 71 6c 69 74  ic(pOut) ) sqlit
52e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
52f0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
5300: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
5310: 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  Int;.    }..    
5320: 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
5330: 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72  ng on other oper
5340: 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ands */.#ifdef S
5350: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
5360: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5370: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  s & OPFLG_IN1)!=
5380: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5390: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
53a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
53b0: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
53c0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
53d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
53e0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
53f0: 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20  p->p1]) );.     
5400: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5410: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5420: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
5430: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
5440: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5450: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
5460: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
5470: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5480: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
5490: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
54a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
54b0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
54c0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
54d0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
54e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
54f0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5500: 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20  [pOp->p2]) );.  
5510: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5520: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
5530: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
5540: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
5550: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5560: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
5570: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
5580: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
5590: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
55a0: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
55b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
55c0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
55d0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
55e0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
55f0: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5600: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5610: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5620: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
5630: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5640: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
5650: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
5660: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5670: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5680: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5690: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
56a0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
56b0: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
56c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
56d0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
56e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
56f0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5700: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
5710: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
5720: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  p, &aMem[pOp->p2
5730: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5740: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5750: 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30  & OPFLG_OUT3)!=0
5760: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5770: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5780: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5790: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
57a0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
57b0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
57c0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
57d0: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23  p->p3]);.    }.#
57e0: 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69  endif.  .    swi
57f0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
5800: 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ){../**********
5810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5850: 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c  ***.** What foll
5860: 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65  ows is a massive
5870: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
5880: 74 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73  t where each cas
5890: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a  e implements a.*
58a0: 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72  * separate instr
58b0: 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69  uction in the vi
58c0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
58d0: 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65  If we follow the
58e0: 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74   usual.** indent
58f0: 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e  ation convention
5900: 73 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f  s, each case sho
5910: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
5920: 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
5930: 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c  t.** that is a l
5940: 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61  ot of wasted spa
5950: 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d  ce on the left m
5960: 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63  argin.  So the c
5970: 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68  ode within.** th
5980: 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
5990: 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69  nt will break wi
59a0: 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e  th convention an
59b0: 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e  d be flush-left.
59c0: 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20   Another.** big 
59d0: 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72  comment (similar
59e0: 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69   to this one) wi
59f0: 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e  ll mark the poin
5a00: 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68  t in the code wh
5a10: 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69  ere.** we transi
5a20: 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72  tion back to nor
5a30: 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e  mal indentation.
5a40: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61  .**.** The forma
5a50: 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61  tting of each ca
5a60: 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e  se is important.
5a70: 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66    The makefile f
5a80: 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e  or SQLite.** gen
5a90: 65 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c  erates two C fil
5aa0: 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61  es "opcodes.h" a
5ab0: 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62  nd "opcodes.c" b
5ac0: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a  y scanning this.
5ad0: 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20  ** file looking 
5ae0: 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62  for lines that b
5af0: 65 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20  egin with "case 
5b00: 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64  OP_".  The opcod
5b10: 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69  es.h files.** wi
5b20: 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74  ll be filled wit
5b30: 68 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20  h #defines that 
5b40: 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65  give unique inte
5b50: 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61  ger values to ea
5b60: 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64  ch.** opcode and
5b70: 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66   the opcodes.c f
5b80: 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69  ile is filled wi
5b90: 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73  th an array of s
5ba0: 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20  trings where.** 
5bb0: 65 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74  each string is t
5bc0: 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  he symbolic name
5bd0: 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70   for the corresp
5be0: 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20  onding opcode.  
5bf0: 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73  If the.** case s
5c00: 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c  tatement is foll
5c10: 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e  owed by a commen
5c20: 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f  t of the form "/
5c30: 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f  # same as ... #/
5c40: 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e  ".** that commen
5c50: 74 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  t is used to det
5c60: 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69  ermine the parti
5c70: 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74  cular value of t
5c80: 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  he opcode..**.**
5c90: 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20   Other keywords 
5ca0: 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  in the comment t
5cb0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68  hat follows each
5cc0: 20 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74   case are used t
5cd0: 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74  o.** construct t
5ce0: 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c  he OPFLG_INITIAL
5cf0: 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20  IZER value that 
5d00: 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f  initializes opco
5d10: 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a  deProperty[]..**
5d20: 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64   Keywords includ
5d30: 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33  e: in1, in2, in3
5d40: 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73  , out2_prereleas
5d50: 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20  e, out2, out3.  
5d60: 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63  See.** the mkopc
5d70: 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20  odeh.awk script 
5d80: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
5d90: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
5da0: 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  * Documentation 
5db0: 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64  about VDBE opcod
5dc0: 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  es is generated 
5dd0: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
5de0: 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e   file.** for lin
5df0: 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61  es of that conta
5e00: 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54  in "Opcode:".  T
5e10: 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c  hat line and all
5e20: 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63   subsequent.** c
5e30: 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65  omment lines are
5e40: 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
5e50: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  eration of the o
5e60: 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d  pcode.html docum
5e70: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65  entation.** file
5e80: 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a  ..**.** SUMMARY:
5e90: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61  .**.**     Forma
5ea0: 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61  tting is importa
5eb0: 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68  nt to scripts th
5ec0: 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c  at scan this fil
5ed0: 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74  e..**     Do not
5ee0: 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68   deviate from th
5ef0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79  e formatting sty
5f00: 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  le currently in 
5f10: 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  use..**.********
5f20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f60: 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  *****/../* Opcod
5f70: 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20  e:  Goto * P2 * 
5f80: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63  * *.**.** An unc
5f90: 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20  onditional jump 
5fa0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
5fb0: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72  * The next instr
5fc0: 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20  uction executed 
5fd0: 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20  will be .** the 
5fe0: 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20  one at index P2 
5ff0: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
6000: 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f  ng of.** the pro
6010: 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  gram..**.** The 
6020: 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P1 parameter is 
6030: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65  not actually use
6040: 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
6050: 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a  .  However, it.*
6060: 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73  * is sometimes s
6070: 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20  et to 1 instead 
6080: 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20 74  of 0 as a hint t
6090: 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  o the command-li
60a0: 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74  ne shell.** that
60b0: 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68   this Goto is th
60c0: 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f  e bottom of a lo
60d0: 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  op and that the 
60e0: 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f  lines from P2 do
60f0: 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72  wn.** to the cur
6100: 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64  rent line should
6110: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72   be indented for
6120: 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e   EXPLAIN output.
6130: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f  .*/.case OP_Goto
6140: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
6150: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63 20  /* jump */.  pc 
6160: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a  = pOp->p2 - 1;..
6170: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61    /* Opcodes tha
6180: 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  t are used as th
6190: 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f  e bottom of a lo
61a0: 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f  op (OP_Next, OP_
61b0: 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e  Prev,.  ** OP_VN
61c0: 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65  ext, OP_RowSetNe
61d0: 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  xt, or OP_Sorter
61e0: 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68  Next) all jump h
61f0: 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f  ere upon.  ** co
6200: 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b  mpletion.  Check
6210: 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74   to see if sqlit
6220: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68  e3_interrupt() h
6230: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20  as been called. 
6240: 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72   ** or if the pr
6250: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6260: 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f  needs to be invo
6270: 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ked. .  **.  ** 
6280: 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75  This code uses u
6290: 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74  nstructured "got
62a0: 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  o" statements an
62b0: 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20  d does not look 
62c0: 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20  clean..  ** But 
62d0: 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20  that is not due 
62e0: 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67  to sloppy coding
62f0: 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64   habits. The cod
6300: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69  e is written thi
6310: 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70  s.  ** way for p
6320: 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61  erformance, to a
6330: 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72  void having to r
6340: 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  un the interrupt
6350: 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20   and progress.  
6360: 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65  ** checks on eve
6370: 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73  ry opcode.  This
6380: 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73   helps sqlite3_s
6390: 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f  tep() to run abo
63a0: 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73  ut 1.5%.  ** fas
63b0: 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ter according to
63c0: 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f   "valgrind --too
63d0: 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f  l=cachegrind" */
63e0: 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  .check_for_inter
63f0: 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e  rupt:.  if( db->
6400: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
6410: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
6420: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
6430: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
6440: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
6450: 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20  LBACK.  /* Call 
6460: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
6470: 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63  lback if it is c
6480: 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68  onfigured and th
6490: 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65  e required numbe
64a0: 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f  r.  ** of VDBE o
64b0: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
64c0: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
64d0: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
64e0: 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69  ion of.  ** sqli
64f0: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
6500: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
6510: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6520: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
6530: 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  d)..  ** If the 
6540: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6550: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
6560: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
6570: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
6580: 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20  h.  ** a return 
6590: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
65a0: 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  T..  */.  if( db
65b0: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26  ->xProgress!=0 &
65c0: 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67  & nVmStep>=nProg
65d0: 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20  ressLimit ){.   
65e0: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72   assert( db->nPr
65f0: 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a  ogressOps!=0 );.
6600: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
6610: 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64  it = nVmStep + d
6620: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
6630: 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e  - (nVmStep%db->n
6640: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
6650: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
6660: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
6670: 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72  sArg) ){.      r
6680: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
6690: 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  RUPT;.      goto
66a0: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
66b0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
66c0: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
66d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
66e0: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
66f0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
6700: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
6710: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
6720: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
6730: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6740: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
6750: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
6760: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
6770: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6780: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
6790: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
67a0: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
67b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
67c0: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
67d0: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
67e0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
67f0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
6800: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6810: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
6820: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
6830: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6840: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
6850: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
6860: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6870: 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20  ode:  Return P1 
6880: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  * * * *.**.** Ju
6890: 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  mp to the next i
68a0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72  nstruction after
68b0: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
68c0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66  register P1.  Af
68d0: 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c  ter.** the jump,
68e0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
68f0: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
6900: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
6910: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
6920: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
6930: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6940: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
6950: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
6960: 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29   );.  pc = (int)
6970: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
6980: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
6990: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
69a0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
69b0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50   InitCoroutine P
69c0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
69d0: 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65  * Set up registe
69e0: 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
69f0: 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68  will Yield to th
6a00: 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c  e coroutine.** l
6a10: 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73  ocated at addres
6a20: 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  s P3..**.** If P
6a30: 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f  2!=0 then the co
6a40: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
6a50: 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65  tation immediate
6a60: 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68  ly follows.** th
6a70: 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a  is opcode.  So j
6a80: 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72  ump over the cor
6a90: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
6aa0: 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72  ation to.** addr
6ab0: 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ess P2..**.** Se
6ac0: 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75  e also: EndCorou
6ad0: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6ae0: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
6af0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6b00: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6b10: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
6b20: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
6b30: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
6b40: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
6b50: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
6b60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6b70: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
6b80: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
6b90: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
6ba0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6bb0: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
6bc0: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
6bd0: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
6be0: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
6bf0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
6c00: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20  f( pOp->p2 ) pc 
6c10: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6c20: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6c30: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
6c40: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
6c50: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
6c60: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
6c70: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6c80: 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a  P1 is a Yield..*
6c90: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32  * Jump to the P2
6ca0: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68   parameter of th
6cb0: 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74  at Yield..** Aft
6cc0: 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  er the jump, reg
6cd0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6ce0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
6cf0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6d00: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6d10: 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e  e OP_EndCoroutin
6d20: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
6d30: 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f  * in1 */.  VdbeO
6d40: 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49  p *pCaller;.  pI
6d50: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6d60: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
6d70: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
6d80: 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
6d90: 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26   pIn1->u.i>=0 &&
6da0: 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f   pIn1->u.i<p->nO
6db0: 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d  p );.  pCaller =
6dc0: 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d   &aOp[pIn1->u.i]
6dd0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6de0: 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  ler->opcode==OP_
6df0: 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72  Yield );.  asser
6e00: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d  t( pCaller->p2>=
6e10: 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32  0 && pCaller->p2
6e20: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 63 20  <p->nOp );.  pc 
6e30: 3d 20 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20  = pCaller->p2 - 
6e40: 31 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  1;.  pIn1->flags
6e50: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
6e60: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6e70: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
6e80: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
6e90: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
6ea0: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
6eb0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
6ec0: 69 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a  ister P1.  This.
6ed0: 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63  ** has the effec
6ee0: 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f  t of yielding to
6ef0: 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a   a coroutine..**
6f00: 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75  .** If the corou
6f10: 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75  tine that is lau
6f20: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
6f30: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
6f40: 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20  ith.** Yield or 
6f50: 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74  Return then cont
6f60: 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74  inue to the next
6f70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
6f80: 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72  ut if.** the cor
6f90: 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20  outine launched 
6fa0: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
6fb0: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
6fc0: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74   EndCoroutine, t
6fd0: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72  hen jump to P2 r
6fe0: 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69  ather than conti
6ff0: 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a  nuing with the.*
7000: 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  * next instructi
7010: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
7020: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
7030: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65  e.*/.case OP_Yie
7040: 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ld: {           
7050: 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f   /* in1, jump */
7060: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
7070: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
7080: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
7090: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
70a0: 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70  (pIn1)==0 );.  p
70b0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
70c0: 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d  _Int;.  pcDest =
70d0: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
70e0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70  .  pIn1->u.i = p
70f0: 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  c;.  REGISTER_TR
7100: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
7110: 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73  1);.  pc = pcDes
7120: 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  t;.  break;.}../
7130: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49  * Opcode:  HaltI
7140: 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20  fNull  P1 P2 P3 
7150: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
7160: 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c  s:  if r[P3]=nul
7170: 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65  l halt.**.** Che
7180: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
7190: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
71a0: 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   it is NULL then
71b0: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
71c0: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
71d0: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
71e0: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
71f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
7200: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
7210: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
7220: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
7230: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
7240: 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35  no-op..** The P5
7250: 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c   parameter shoul
7260: 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20  d be 1..*/.case 
7270: 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b  OP_HaltIfNull: {
7280: 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
7290: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
72a0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
72b0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
72c0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65  M_Null)==0 ) bre
72d0: 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
72e0: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61  rough into OP_Ha
72f0: 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  lt */.}../* Opco
7300: 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20  de:  Halt P1 P2 
7310: 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  * P4 P5.**.** Ex
7320: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  it immediately. 
7330: 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72   All open cursor
7340: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
7350: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
7360: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
7370: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
7380: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
7390: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
73a0: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
73b0: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
73c0: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
73d0: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
73e0: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
73f0: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
7400: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
7410: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
7420: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
7430: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
7440: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
7450: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
7460: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
7470: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
7480: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
7490: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
74a0: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
74b0: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
74c0: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
74d0: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
74e0: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
74f0: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
7500: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
7510: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
7520: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
7530: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
7540: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
7550: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
7560: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
7570: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
7580: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
7590: 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75  .** P5 is a valu
75a0: 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  e between 0 and 
75b0: 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68  4, inclusive, th
75c0: 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20  at modifies the 
75d0: 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  P4 string..**.**
75e0: 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e      0:  (no chan
75f0: 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f  ge).**    1:  NO
7600: 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74  T NULL contraint
7610: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7620: 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e    2:  UNIQUE con
7630: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
7640: 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45  P4.**    3:  CHE
7650: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  CK constraint fa
7660: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34  iled: P4.**    4
7670: 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  :  FOREIGN KEY c
7680: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7690: 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  : P4.**.** If P5
76a0: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
76b0: 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65   P4 is NULL, the
76c0: 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74  n everything aft
76d0: 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a  er the ":" is.**
76e0: 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   omitted..**.** 
76f0: 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c  There is an impl
7700: 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22  ied "Halt 0 0 0"
7710: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73   instruction ins
7720: 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
7730: 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72  y end of.** ever
7740: 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61  y program.  So a
7750: 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c   jump past the l
7760: 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ast instruction 
7770: 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a  of the program.*
7780: 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  * is the same as
7790: 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e   executing Halt.
77a0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
77b0: 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
77c0: 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74   *zType;.  const
77d0: 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a   char *zLogFmt;.
77e0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
77f0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e  SQLITE_OK && p->
7800: 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a  pFrame ){.    /*
7810: 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72   Halt the sub-pr
7820: 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f  ogram. Return co
7830: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72  ntrol to the par
7840: 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20  ent frame. */.  
7850: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
7860: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
7870: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
7880: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
7890: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
78a0: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
78b0: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
78c0: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
78d0: 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64    pc = sqlite3Vd
78e0: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
78f0: 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74  Frame);.    last
7900: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
7910: 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70  Rowid;.    if( p
7920: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
7930: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
7940: 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20  struction pc is 
7950: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
7960: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
7970: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
7980: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
7990: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
79a0: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
79b0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
79c0: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
79d0: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
79e0: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
79f0: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
7a00: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
7a10: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
7a20: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
7a30: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
7a40: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
7a50: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
7a60: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
7a70: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
7a80: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
7a90: 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e  pc = p->aOp[pc].
7aa0: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
7ab0: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
7ac0: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
7ad0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
7ae0: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
7af0: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
7b00: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
7b10: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
7b20: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
7b30: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
7b40: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
7b50: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
7b60: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
7b70: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
7b80: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
7bc0: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
7bd0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
7be0: 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70  >p5>=1 && pOp->p
7bf0: 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74 65  5<=4 );.      te
7c00: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7c10: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
7c20: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
7c30: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7c40: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
7c50: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7c60: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
7c70: 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61 7a        zType = az
7c80: 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b  Type[pOp->p5-1];
7c90: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7ca0: 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20 20    zType = 0;.   
7cb0: 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a   }.    assert( z
7cc0: 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Type!=0 || pOp->
7cd0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a  p4.z!=0 );.    z
7ce0: 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20  LogFmt = "abort 
7cf0: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25  at %d in [%s]: %
7d00: 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79 70  s";.    if( zTyp
7d10: 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  e && pOp->p4.z )
7d20: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
7d30: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
7d40: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f  rMsg, db, "%s co
7d50: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7d60: 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 54                zT
7d80: 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ype, pOp->p4.z);
7d90: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
7da0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
7db0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
7dc0: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
7dd0: 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  db, "%s", pOp->p
7de0: 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  4.z);.    }else{
7df0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
7e00: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
7e10: 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e  Msg, db, "%s con
7e20: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c  straint failed",
7e30: 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20   zType);.    }. 
7e40: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70     sqlite3_log(p
7e50: 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c  Op->p1, zLogFmt,
7e60: 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d   pc, p->zSql, p-
7e70: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
7e80: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
7e90: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
7ea0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
7eb0: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
7ec0: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
7ed0: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
7ee0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
7ef0: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
7f00: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
7f10: 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
7f20: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7f30: 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26  TE_OK || (p->rc&
7f40: 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
7f50: 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20  NSTRAINT );.    
7f60: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7f70: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65  TE_OK || db->nDe
7f80: 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20  ferredCons>0 || 
7f90: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
7fa0: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
7fb0: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
7fc0: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
7fd0: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
7fe0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
7ff0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
8000: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
8010: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8020: 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65  P2]=P1.**.** The
8030: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
8040: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
8050: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
8060: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
8070: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
8080: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
8090: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
80a0: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
80b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
80c0: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
80d0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
80e0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
80f0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
8100: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
8110: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
8120: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
8130: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
8140: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8150: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
8160: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
8170: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
8180: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
8190: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
81a0: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
81b0: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
81c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
81d0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
81e0: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
81f0: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
8200: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8210: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
8220: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
8230: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
8240: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
8250: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
8260: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
8270: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
8280: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
8290: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
82a0: 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72  FLOAT, out2-prer
82b0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
82c0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
82d0: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
82e0: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
82f0: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
8300: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f   pOut->u.r = *pO
8310: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
8320: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
8330: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
8340: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
8350: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8360: 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20  ]='P4'.**.** P4 
8370: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
8380: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
8390: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
83a0: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
83b0: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53  med .** into a S
83c0: 74 72 69 6e 67 20 6f 70 63 6f 64 65 20 62 65 66  tring opcode bef
83d0: 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ore it is execut
83e0: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
83f0: 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a   time.  During.*
8400: 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d  * this transform
8410: 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74  ation, the lengt
8420: 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69  h of string P4 i
8430: 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73  s computed and s
8440: 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20  tored.** as the 
8450: 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f  P1 parameter..*/
8460: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
8470: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
8480: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
8490: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
84a0: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
84b0: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
84c0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
84d0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
84e0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
84f0: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
8500: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
8510: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
8520: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
8530: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
8540: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8550: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8560: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
8570: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8580: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8590: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54  if( rc==SQLITE_T
85a0: 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f  OOBIG ) goto too
85b0: 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51  _big;.    if( SQ
85c0: 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33  LITE_OK!=sqlite3
85d0: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
85e0: 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
85f0: 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  g) ) goto no_mem
8600: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
8610: 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26  ut->szMalloc>0 &
8620: 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d  & pOut->zMalloc=
8630: 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20  =pOut->z );.    
8640: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
8650: 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20  ynamic(pOut)==0 
8660: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d  );.    pOut->szM
8670: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70  alloc = 0;.    p
8680: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
8690: 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66  M_Static;.    if
86a0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
86b0: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
86c0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
86d0: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
86e0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
86f0: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
8700: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
8710: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
8720: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
8730: 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ->n;.  }.#endif.
8740: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62    if( pOp->p1>db
8750: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
8760: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
8770: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
8780: 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  g;.  }.  /* Fall
8790: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
87a0: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
87b0: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
87c0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
87d0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
87e0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
87f0: 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a  ='P4' (len=P1).*
8800: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
8810: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
8820: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
8830: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
8840: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
8850: 20 50 35 21 3d 30 20 61 6e 64 20 74 68 65 20 63   P5!=0 and the c
8860: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
8870: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
8880: 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
8890: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
88a0: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
88b0: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
88c0: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
88d0: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
88e0: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
88f0: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
8900: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
8910: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
8920: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
8930: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
8940: 20 62 65 65 6e 20 43 41 53 54 2e 0a 2a 2f 0a 63   been CAST..*/.c
8950: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
8960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
8970: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
8980: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8990: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
89a0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
89b0: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
89c0: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
89d0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
89e0: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
89f0: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
8a00: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
8a10: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
8a20: 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 70 4f  (pOut);.  if( pO
8a30: 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61 73 73  p->p5 ){.    ass
8a40: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
8a50: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
8a60: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
8a70: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
8a80: 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
8a90: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
8aa0: 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
8ab0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
8ac0: 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
8ad0: 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d   ) pOut->flags =
8ae0: 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74   MEM_Blob|MEM_St
8af0: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
8b00: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
8b10: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50  * Opcode: Null P
8b20: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
8b30: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e  ynopsis:  r[P2..
8b40: 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57  P3]=NULL.**.** W
8b50: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
8b60: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20   registers P2.  
8b70: 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68  If P3 greater th
8b80: 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f  an P2, then also
8b90: 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69   write.** NULL i
8ba0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
8bb0: 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74  and every regist
8bc0: 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32  er in between P2
8bd0: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a   and P3.  If P3.
8be0: 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
8bf0: 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33  P2 (typically P3
8c00: 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f   is zero) then o
8c10: 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20  nly register P2 
8c20: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c  is.** set to NUL
8c30: 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  L..**.** If the 
8c40: 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P1 value is non-
8c50: 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20  zero, then also 
8c60: 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61  set the MEM_Clea
8c70: 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74  red flag so that
8c80: 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  .** NULL values 
8c90: 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65  will not compare
8ca0: 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53   equal even if S
8cb0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
8cc0: 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20  set on.** OP_Ne 
8cd0: 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73  or OP_Eq..*/.cas
8ce0: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
8cf0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8d00: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
8d10: 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75  nt cnt;.  u16 nu
8d20: 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20  llFlag;.  cnt = 
8d30: 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b  pOp->p3-pOp->p2;
8d40: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8d50: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
8d60: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8d70: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
8d80: 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f  Flag = pOp->p1 ?
8d90: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43   (MEM_Null|MEM_C
8da0: 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75  leared) : MEM_Nu
8db0: 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74  ll;.  while( cnt
8dc0: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
8dd0: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
8de0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
8df0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8e00: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
8e10: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
8e20: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
8e30: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
8e40: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8e50: 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20  de: SoftNull P1 
8e60: 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  * * * *.** Synop
8e70: 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c  sis:  r[P1]=NULL
8e80: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73  .**.** Set regis
8e90: 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74  ter P1 to have t
8ea0: 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73  he value NULL as
8eb0: 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f   seen by the OP_
8ec0: 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e  MakeRecord.** in
8ed0: 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64  struction, but d
8ee0: 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73  o not free any s
8ef0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65  tring or blob me
8f00: 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20  mory associated 
8f10: 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69  with.** the regi
8f20: 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66  ster, so that if
8f30: 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61   the value was a
8f40: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
8f50: 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76  that was.** prev
8f60: 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73  iously copied us
8f70: 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68  ing OP_SCopy, th
8f80: 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f  e copies will co
8f90: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c  ntinue to be val
8fa0: 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  id..*/.case OP_S
8fb0: 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73  oftNull: {.  ass
8fc0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
8fd0: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
8fe0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
8ff0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
9000: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
9010: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75  ut->flags = (pOu
9020: 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c  t->flags|MEM_Nul
9030: 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  l)&~MEM_Undefine
9040: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
9050: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
9060: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9070: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
9080: 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  4 (len=P1).**.**
9090: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
90a0: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
90b0: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
90c0: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
90d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
90e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
90f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
9100: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
9110: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
9120: 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c  ( pOp->p1 <= SQL
9130: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29  ITE_MAX_LENGTH )
9140: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
9150: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
9160: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
9170: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
9180: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9190: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
91a0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
91b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
91c0: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
91d0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
91e0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70  ynopsis: r[P2]=p
91f0: 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a  arameter(P1,P4).
9200: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
9210: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
9220: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20  nd parameter P1 
9230: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
9240: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
9250: 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64  rameter is named
9260: 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20  , then its name 
9270: 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a  appears in P4..*
9280: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
9290: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
92a0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
92b0: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
92c0: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
92d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
92e0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
92f0: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
9300: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
9310: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
9320: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
9330: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9340: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
9350: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9360: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
9370: 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d  z==p->azVar[pOp-
9380: 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72  >p1-1] );.  pVar
9390: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
93a0: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
93b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
93c0: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
93d0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
93e0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
93f0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9400: 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f  pOut, pVar, MEM_
9410: 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54  Static);.  UPDAT
9420: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9430: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
9440: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  ../* Opcode: Mov
9450: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
9460: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
9470: 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a  2@P3]=r[P1@P3].*
9480: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33  *.** Move the P3
9490: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
94a0: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
94b0: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
94c0: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
94d0: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
94e0: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a  1..P1+P3-1 are.*
94f0: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
9500: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
9510: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
9520: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
9530: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
9540: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
9550: 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20  rlap.  It is an 
9560: 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20  error.** for P3 
9570: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
9580: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  1..*/.case OP_Mo
9590: 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20  ve: {.  int n;  
95a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
95b0: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
95c0: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
95d0: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
95e0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
95f0: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
9600: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
9610: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9620: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
9630: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
9640: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
9650: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
9660: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
9670: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
9680: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
9690: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
96a0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
96b0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
96c0: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
96d0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
96e0: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
96f0: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9700: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c     assert( pIn1<
9710: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  =&aMem[(p->nMem-
9720: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9730: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
9740: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
9750: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
9760: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
9770: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9780: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
9790: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
97a0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
97b0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
97c0: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
97d0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26  ut->pScopyFrom<&
97e0: 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d  aMem[p1+pOp->p3]
97f0: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
9800: 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31  pScopyFrom += p1
9810: 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20   - pOp->p2;.    
9820: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  }.#endif.    REG
9830: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
9840: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
9850: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
9860: 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29  .  }while( --n )
9870: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9880: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
9890: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
98a0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b  nopsis: r[P2@P3+
98b0: 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a  1]=r[P1@P3+1].**
98c0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20  .** Make a copy 
98d0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e  of registers P1.
98e0: 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69  .P1+P3 into regi
98f0: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e  sters P2..P2+P3.
9900: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
9910: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
9920: 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65  deep copy of the
9930: 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69   value.  A dupli
9940: 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20  cate.** is made 
9950: 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  of any string or
9960: 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20   blob constant. 
9970: 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f   See also OP_SCo
9980: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  py..*/.case OP_C
9990: 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  opy: {.  int n;.
99a0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
99b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
99c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
99d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
99e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
99f0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c  !=pIn1 );.  whil
9a00: 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  e( 1 ){.    sqli
9a10: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
9a20: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
9a30: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
9a40: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9a50: 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53  (pOut);.#ifdef S
9a60: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
9a70: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9a80: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20   = 0;.#endif.   
9a90: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9aa0: 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d  pOp->p2+pOp->p3-
9ab0: 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66  n, pOut);.    if
9ac0: 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65  ( (n--)==0 ) bre
9ad0: 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ak;.    pOut++;.
9ae0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
9af0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9b00: 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20  pcode: SCopy P1 
9b10: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
9b20: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
9b30: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73  ].**.** Make a s
9b40: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72  hallow copy of r
9b50: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
9b60: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
9b70: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
9b80: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c  ion makes a shal
9b90: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20  low copy of the 
9ba0: 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76  value.  If the v
9bb0: 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72  alue.** is a str
9bc0: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
9bd0: 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e  n the copy is on
9be0: 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ly a pointer to 
9bf0: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
9c00: 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65  and hence if the
9c10: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
9c20: 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f  s so will the co
9c30: 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66  py..** Worse, if
9c40: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73   the original is
9c50: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68   deallocated, th
9c60: 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69  e copy becomes i
9c70: 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20  nvalid..** Thus 
9c80: 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  the program must
9c90: 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
9ca0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c  the original wil
9cb0: 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20  l not change.** 
9cc0: 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74  during the lifet
9cd0: 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e  ime of the copy.
9ce0: 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f    Use OP_Copy to
9cf0: 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65   make a complete
9d00: 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73  .** copy..*/.cas
9d10: 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20  e OP_SCopy: {   
9d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9d30: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
9d40: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9d50: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9d60: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
9d70: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
9d80: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
9d90: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9da0: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
9db0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9dc0: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74  DEBUG.  if( pOut
9dd0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20  ->pScopyFrom==0 
9de0: 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ) pOut->pScopyFr
9df0: 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69  om = pIn1;.#endi
9e00: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
9e10: 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52   Opcode: ResultR
9e20: 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ow P1 P2 * * *.*
9e30: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74  * Synopsis:  out
9e40: 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a  put=r[P1@P2].**.
9e50: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
9e60: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
9e70: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
9e80: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
9e90: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
9ea0: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
9eb0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
9ec0: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
9ed0: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
9ee0: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
9ef0: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
9f00: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
9f10: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
9f20: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
9f30: 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72   to the r(P1)..r
9f40: 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73  (P1+P2-1) values
9f50: 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
9f60: 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f  t row..*/.case O
9f70: 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20  P_ResultRow: {. 
9f80: 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e   Mem *pMem;.  in
9f90: 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t i;.  assert( p
9fa0: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f  ->nResColumn==pO
9fb0: 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72  p->p2 );.  asser
9fc0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
9fd0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9fe0: 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  1+pOp->p2<=(p->n
9ff0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
a000: 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  1 );..#ifndef SQ
a010: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
a020: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
a030: 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73   Run the progres
a040: 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62  s counter just b
a050: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
a060: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
a070: 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20  xProgress!=0.   
a080: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
a090: 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26  gressLimit.   &&
a0a0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
a0b0: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
a0c0: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20  !=0.  ){.    rc 
a0d0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
a0e0: 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62  PT;.    goto vdb
a0f0: 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20  e_error_halt;.  
a100: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49  }.#endif..  /* I
a110: 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74  f this statement
a120: 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d   has violated im
a130: 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
a140: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  key constraints,
a150: 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74   do.  ** not ret
a160: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
a170: 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e  f rows modified.
a180: 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45   And do not RELE
a190: 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ASE the statemen
a1a0: 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  t.  ** transacti
a1b0: 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20  on. It needs to 
a1c0: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
a1d0: 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45   */.  if( SQLITE
a1e0: 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74  _OK!=(rc = sqlit
a1f0: 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
a200: 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65   0)) ){.    asse
a210: 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51  rt( db->flags&SQ
a220: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
a230: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  ;.    assert( p-
a240: 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
a250: 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   );.    break;. 
a260: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
a270: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
a280: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
a290: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61  sqlite3.flags ma
a2a0: 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44  sk, then .  ** D
a2b0: 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  ML statements in
a2c0: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
a2d0: 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e   to return the n
a2e0: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20  umber of rows . 
a2f0: 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   ** modified to 
a300: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
a310: 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74  s the only way t
a320: 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20  hat a VM that.  
a330: 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65  ** opens a state
a340: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
a350: 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73   may invoke this
a360: 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20   opcode..  **.  
a370: 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20  ** In case this 
a380: 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d  is such a statem
a390: 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73  ent, close any s
a3a0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
a3b0: 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64  tion.  ** opened
a3c0: 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f   by this VM befo
a3d0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e  re returning con
a3e0: 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72  trol to the user
a3f0: 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a  . This is to.  *
a400: 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74  * ensure that st
a410: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
a420: 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20  ions are always 
a430: 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72  nested, not over
a440: 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66  lapping..  ** If
a450: 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d   the open statem
a460: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent-transaction 
a470: 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65  is not closed he
a480: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65  re, then the use
a490: 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20  r.  ** may step 
a4a0: 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20  another VM that 
a4b0: 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74  opens its own st
a4c0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a4d0: 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d  ion. This.  ** m
a4e0: 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c  ay lead to overl
a4f0: 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  apping statement
a500: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20   transactions.. 
a510: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61   **.  ** The sta
a520: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a530: 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f  on is never a to
a540: 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74  p-level transact
a550: 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a  ion.  Hence.  **
a560: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c   the RELEASE cal
a570: 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65  l below can neve
a580: 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61  r fail..  */.  a
a590: 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65  ssert( p->iState
a5a0: 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66  ment==0 || db->f
a5b0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
a5c0: 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20  tRows );.  rc = 
a5d0: 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65  sqlite3VdbeClose
a5e0: 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56  Statement(p, SAV
a5f0: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b  EPOINT_RELEASE);
a600: 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
a610: 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20  =SQLITE_OK) ){. 
a620: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
a630: 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
a640: 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ll ephemeral cur
a650: 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a  sor row caches *
a660: 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20  /.  p->cacheCtr 
a670: 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b  = (p->cacheCtr +
a680: 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b   2)|1;..  /* Mak
a690: 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c  e sure the resul
a6a0: 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ts of the curren
a6b0: 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74  t row are \000 t
a6c0: 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61  erminated.  ** a
a6d0: 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67  nd have an assig
a6e0: 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72  ned type.  The r
a6f0: 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70  esults are de-ep
a700: 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20  hemeralized as. 
a710: 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63   ** a side effec
a720: 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d  t..  */.  pMem =
a730: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
a740: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a750: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
a760: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
a770: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
a780: 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b  lid(&pMem[i]) );
a790: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
a7a0: 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ize(&pMem[i]);. 
a7b0: 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
a7c0: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  [i].flags & MEM_
a7d0: 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20  Ephem)==0.      
a7e0: 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69        || (pMem[i
a7f0: 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ].flags & (MEM_S
a800: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
a810: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
a820: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
a830: 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  te(&pMem[i]);.  
a840: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
a850: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
a860: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
a870: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
a880: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
a890: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
a8a0: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
a8b0: 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a  p->pc = pc + 1;.
a8c0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
a8d0: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
a8e0: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
a8f0: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
a900: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a910: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
a920: 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P1].**.** Ad
a930: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
a940: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
a950: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
a960: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
a970: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
a980: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
a990: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
a9a0: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
a9b0: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
a9c0: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
a9d0: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
a9e0: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
a9f0: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
aa00: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
aa10: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
aa20: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
aa30: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
aa40: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
aa50: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
aa60: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
aa70: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
aa80: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
aa90: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
aaa0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
aab0: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
aac0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
aad0: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
aae0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
aaf0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
ab00: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
ab10: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
ab20: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
ab30: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
ab40: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
ab50: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
ab60: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
ab70: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
ab80: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
ab90: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
aba0: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
abb0: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
abc0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
abd0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
abe0: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
abf0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
ac00: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
ac10: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
ac20: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
ac30: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
ac40: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
ac50: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
ac60: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
ac70: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28  o_big;.  }.  if(
ac80: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
ac90: 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
aca0: 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49  Byte+2, pOut==pI
acb0: 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  n2) ){.    goto 
acc0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65  no_mem;.  }.  Me
acd0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
ace0: 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69  t, MEM_Str);.  i
acf0: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
ad00: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
ad10: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
ad20: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
ad30: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
ad40: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
ad50: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
ad60: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20  t->z[nByte]=0;. 
ad70: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
ad80: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
ad90: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
ada0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
adb0: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
adc0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
add0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
ade0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
adf0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
ae00: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
ae10: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
ae20: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  is:  r[P3]=r[P1]
ae30: 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P2].**.** Add
ae40: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ae50: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
ae60: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ae70: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
ae80: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
ae90: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
aea0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
aeb0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
aec0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
aed0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
aee0: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
aef0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
af00: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32  r[P3]=r[P1]*r[P2
af10: 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  ].**.**.** Multi
af20: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
af30: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
af40: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
af50: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
af60: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
af70: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
af80: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
af90: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
afa0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
afb0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
afc0: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
afd0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
afe0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72  :  r[P3]=r[P2]-r
aff0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72  [P1].**.** Subtr
b000: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
b010: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
b020: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
b030: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b040: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b050: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b060: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b070: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b080: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b090: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b0a0: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
b0b0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b0c0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72  :  r[P3]=r[P2]/r
b0d0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64  [P1].**.** Divid
b0e0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
b0f0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
b100: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b110: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b120: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b130: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
b140: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
b150: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
b160: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
b170: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
b180: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
b190: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
b1a0: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
b1b0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b1c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
b1d0: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
b1e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
b1f0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31  r[P3]=r[P2]%r[P1
b200: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  ].**.** Compute 
b210: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
b220: 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69  ter integer regi
b230: 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64  ster P2 is divid
b240: 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74  ed by .** regist
b250: 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20  er P1 and store 
b260: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b270: 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49  gister P3. .** I
b280: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
b290: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b2a0: 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ro the result is
b2b0: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
b2c0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
b2d0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b2e0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b2f0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
b300: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b310: 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69  me as TK_PLUS, i
b320: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b330: 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63  .case OP_Subtrac
b340: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
b350: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49  /* same as TK_MI
b360: 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  NUS, in1, in2, o
b370: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ut3 */.case OP_M
b380: 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20  ultiply:        
b390: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b3a0: 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69   TK_STAR, in1, i
b3b0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b3c0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20   OP_Divide:     
b3d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b3e0: 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20  me as TK_SLASH, 
b3f0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b400: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e  /.case OP_Remain
b410: 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  der: {          
b420: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
b430: 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  EM, in1, in2, ou
b440: 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e  t3 */.  char bIn
b450: 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74  tint;   /* Start
b460: 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e  ed out as two in
b470: 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  teger operands *
b480: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
b490: 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20      /* Combined 
b4a0: 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d  MEM_* flags from
b4b0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a   both inputs */.
b4c0: 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20    u16 type1;    
b4d0: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
b4e0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
b4f0: 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32  d */.  u16 type2
b500: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69  ;      /* Numeri
b510: 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20  c type of right 
b520: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
b530: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
b540: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
b550: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
b560: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
b570: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
b580: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b590: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
b5a0: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
b5b0: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
b5c0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
b5d0: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
b5e0: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
b5f0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
b600: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b610: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31  Op->p1];.  type1
b620: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
b630: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
b640: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
b650: 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63   type2 = numeric
b660: 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f  Type(pIn2);.  pO
b670: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b680: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  p3];.  flags = p
b690: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
b6a0: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
b6b0: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
b6c0: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
b6d0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
b6e0: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74  s_null;.  if( (t
b6f0: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
b700: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
b710: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
b720: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
b730: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
b740: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
b750: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
b760: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
b770: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
b780: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
b790: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
b7a0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
b7b0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
b7c0: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
b7d0: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
b7e0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
b7f0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
b800: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
b810: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
b820: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
b830: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
b840: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b850: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
b860: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b870: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b880: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b890: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b8a0: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
b8b0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
b8c0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
b8d0: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
b8e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
b8f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
b900: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
b910: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
b920: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
b930: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
b940: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
b950: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
b960: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
b970: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b980: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
b990: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
b9a0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
b9b0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
b9c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74   }else{.    bInt
b9d0: 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68  int = 0;.fp_math
b9e0: 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74  :.    rA = sqlit
b9f0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
ba00: 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20  pIn1);.    rB = 
ba10: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
ba20: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
ba30: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
ba40: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
ba50: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
ba60: 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20    rB += rA;     
ba70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
ba80: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
ba90: 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20      rB -= rA;   
baa0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bab0: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
bac0: 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20  y:    rB *= rA; 
bad0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
bae0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
baf0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e: {.        /* 
bb00: 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73  (double)0 In cas
bb10: 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  e of SQLITE_OMIT
bb20: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e  _FLOATING_POINT.
bb30: 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  .. */.        if
bb40: 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20  ( rA==(double)0 
bb50: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
bb60: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bb70: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20  ;.        rB /= 
bb80: 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  rA;.        brea
bb90: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
bba0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
bbb0: 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41      iA = (i64)rA
bbc0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28  ;.        iB = (
bbd0: 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20  i64)rB;.        
bbe0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
bbf0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bc00: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
bc10: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
bc20: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
bc30: 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69   rB = (double)(i
bc40: 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20  B % iA);.       
bc50: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
bc60: 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
bc70: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
bc80: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74  G_POINT.    pOut
bc90: 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.i = rB;.    
bca0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
bcb0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23  Out, MEM_Int);.#
bcc0: 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c  else.    if( sql
bcd0: 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b  ite3IsNaN(rB) ){
bce0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
bcf0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bd00: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
bd10: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b   pOut->u.r = rB;
bd20: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
bd30: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
bd40: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74  al);.    if( ((t
bd50: 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f  ype1|type2)&MEM_
bd60: 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e  Real)==0 && !bIn
bd70: 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  tint ){.      sq
bd80: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
bd90: 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a  Affinity(pOut);.
bda0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
bdb0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68  .  break;..arith
bdc0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bdd0: 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56  null:.  sqlite3V
bde0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
bdf0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
be00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c  ./* Opcode: Coll
be10: 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a  Seq P1 * * P4.**
be20: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
be30: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
be40: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
be50: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
be60: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
be70: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
be80: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
be90: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
bea0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
beb0: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
bec0: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
bed0: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
bee0: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
bef0: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
bf00: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
bf10: 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74  .** If P1 is not
bf20: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
bf30: 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
bf40: 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d  t a subsequent m
bf50: 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29  in() or.** max()
bf60: 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20   aggregate will 
bf70: 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20  set to 1 if the 
bf80: 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e  current row is n
bf90: 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ot the minimum o
bfa0: 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54  r.** maximum.  T
bfb0: 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69  he P1 register i
bfc0: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
bfd0: 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72   0 by this instr
bfe0: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
bff0: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
c000: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
c010: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
c020: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
c030: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
c040: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
c050: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
c060: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
c070: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
c080: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f  .** publicly.  O
c090: 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  nly built-in fun
c0a0: 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65  ctions have acce
c0b0: 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75  ss to this featu
c0c0: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  re..*/.case OP_C
c0d0: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
c0e0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
c0f0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
c100: 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
c110: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c120: 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
c130: 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20  [pOp->p1], 0);. 
c140: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
c150: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
c160: 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
c170: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
c180: 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50  [P3]=func(r[P2@P
c190: 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  5]).**.** Invoke
c1a0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c1b0: 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65   (P4 is a pointe
c1c0: 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20  r to a Function 
c1d0: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a  structure that.*
c1e0: 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75  * defines the fu
c1f0: 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20  nction) with P5 
c200: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20  arguments taken 
c210: 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
c220: 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f   and.** successo
c230: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
c240: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
c250: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
c260: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67  ister P3..** Reg
c270: 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f  ister P3 must no
c280: 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  t be one of the 
c290: 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e  function inputs.
c2a0: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33  .**.** P1 is a 3
c2b0: 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e  2-bit bitmask in
c2c0: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
c2d0: 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67   or not each arg
c2e0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a  ument to the .**
c2f0: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65   function was de
c300: 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63  termined to be c
c310: 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69  onstant at compi
c320: 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20  le time. If the 
c330: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
c340: 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74  t was constant t
c350: 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20  hen bit 0 of P1 
c360: 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20  is set. This is 
c370: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
c380: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74  e.** whether met
c390: 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65  a data associate
c3a0: 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75  d with a user fu
c3b0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
c3c0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c  using the.** sql
c3d0: 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61  ite3_set_auxdata
c3e0: 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61  () API may be sa
c3f0: 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e  fely retained un
c400: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20  til the next.** 
c410: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
c420: 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
c430: 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74   See also: AggSt
c440: 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a  ep and AggFinal.
c450: 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  */.case OP_Funct
c460: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
c470: 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73    Mem *pArg;.  s
c480: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
c490: 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
c4a0: 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69  lue **apVal;.  i
c4b0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
c4c0: 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20  ->p5;.  apVal = 
c4d0: 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
c4e0: 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
c4f0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
c500: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
c510: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
c520: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63  >nCursor) );.  c
c530: 74 78 2e 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  tx.pOut = &aMem[
c540: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
c550: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
c560: 63 74 78 2e 70 4f 75 74 29 3b 0a 0a 20 20 61 73  ctx.pOut);..  as
c570: 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
c580: 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
c590: 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  >p2+n<=(p->nMem-
c5a0: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29  p->nCursor)+1) )
c5b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
c5c0: 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
c5d0: 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
c5e0: 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61  n );.  pArg = &a
c5f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
c600: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
c610: 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20  +, pArg++){.    
c620: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
c630: 69 64 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20  id(pArg) );.    
c640: 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b  apVal[i] = pArg;
c650: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
c660: 69 7a 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52  ize(pArg);.    R
c670: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
c680: 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a  p->p2+i, pArg);.
c690: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
c6a0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
c6b0: 55 4e 43 44 45 46 20 29 3b 0a 20 20 63 74 78 2e  UNCDEF );.  ctx.
c6c0: 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
c6d0: 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e 69 4f 70  pFunc;.  ctx.iOp
c6e0: 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e 70 56 64   = pc;.  ctx.pVd
c6f0: 62 65 20 3d 20 70 3b 0a 20 20 4d 65 6d 53 65 74  be = p;.  MemSet
c700: 54 79 70 65 46 6c 61 67 28 63 74 78 2e 70 4f 75  TypeFlag(ctx.pOu
c710: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
c720: 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20  ctx.fErrorOrAux 
c730: 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52  = 0;.  db->lastR
c740: 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
c750: 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d  ;.  (*ctx.pFunc-
c760: 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c  >xFunc)(&ctx, n,
c770: 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a   apVal); /* IMP:
c780: 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
c790: 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  /.  lastRowid = 
c7a0: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20  db->lastRowid;  
c7b0: 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69  /* Remember rowi
c7c0: 64 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  d changes made b
c7d0: 79 20 78 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a  y xFunc */..  /*
c7e0: 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   If the function
c7f0: 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72   returned an err
c800: 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  or, throw an exc
c810: 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20  eption */.  if( 
c820: 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20  ctx.fErrorOrAux 
c830: 29 7b 0a 20 20 20 20 69 66 28 20 63 74 78 2e 69  ){.    if( ctx.i
c840: 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20  sError ){.      
c850: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
c860: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
c870: 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
c880: 76 61 6c 75 65 5f 74 65 78 74 28 63 74 78 2e 70  value_text(ctx.p
c890: 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20  Out));.      rc 
c8a0: 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
c8b0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
c8c0: 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74  VdbeDeleteAuxDat
c8d0: 61 28 70 2c 20 70 63 2c 20 70 4f 70 2d 3e 70 31  a(p, pc, pOp->p1
c8e0: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  );.  }..  /* Cop
c8f0: 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
c900: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74  the function int
c910: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f  o register P3 */
c920: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
c930: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 63 74 78  angeEncoding(ctx
c940: 2e 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  .pOut, encoding)
c950: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
c960: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 63 74 78  dbeMemTooBig(ctx
c970: 2e 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f  .pOut) ){.    go
c980: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
c990: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
c9a0: 45 28 70 4f 70 2d 3e 70 33 2c 20 63 74 78 2e 70  E(pOp->p3, ctx.p
c9b0: 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
c9c0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 63 74 78 2e  AX_BLOBSIZE(ctx.
c9d0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
c9e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
c9f0: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
ca00: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
ca10: 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32  r[P3]=r[P1]&r[P2
ca20: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
ca30: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
ca40: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
ca50: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
ca60: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
ca70: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ca80: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ca90: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
caa0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
cab0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
cac0: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
cad0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
cae0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
caf0: 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]|r[P2].**.**
cb00: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
cb10: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
cb20: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
cb30: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
cb40: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
cb50: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
cb60: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
cb70: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
cb80: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
cb90: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
cba0: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
cbb0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
cbc0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
cbd0: 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  <<r[P1].**.** Sh
cbe0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
cbf0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
cc00: 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74  r P2 to the left
cc10: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
cc20: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
cc30: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
cc40: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
cc50: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
cc60: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cc70: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cc80: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cc90: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cca0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ccb0: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
ccc0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
ccd0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
cce0: 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a  =r[P2]>>r[P1].**
ccf0: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
cd00: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
cd10: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
cd20: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
cd30: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
cd40: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
cd50: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
cd60: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
cd70: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
cd80: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
cd90: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
cda0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
cdb0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
cdc0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
cdf0: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
ce00: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
ce10: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
ce20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ce30: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
ce40: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ce50: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
ce60: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
ce70: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
ce80: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
ce90: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
cea0: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
ceb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cec0: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
ced0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
cee0: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
cef0: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
cf00: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
cf10: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
cf20: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
cf30: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
cf40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
cf50: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
cf60: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
cf70: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
cf80: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
cf90: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
cfa0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
cfb0: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
cfc0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
cfd0: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
cfe0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
cff0: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
d000: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
d010: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
d020: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
d030: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
d040: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
d050: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
d060: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
d070: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
d080: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
d090: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
d0a0: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
d0b0: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
d0c0: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
d0d0: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
d0e0: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
d0f0: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
d100: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
d110: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
d120: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
d130: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
d140: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
d150: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
d160: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
d170: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
d180: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
d190: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
d1a0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
d1b0: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
d1c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
d1d0: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
d1e0: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
d1f0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
d200: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
d210: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
d220: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
d230: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
d240: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
d250: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
d260: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
d270: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
d280: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
d290: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
d2a0: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
d2b0: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
d2c0: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
d2d0: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
d2e0: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
d2f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
d300: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
d310: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d320: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
d330: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d340: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
d350: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
d360: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50  psis:  r[P1]=r[P
d370: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
d380: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
d390: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
d3a0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
d3b0: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
d3c0: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
d3d0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
d3e0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
d3f0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
d400: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
d410: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
d420: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
d430: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d440: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d450: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d460: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
d470: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
d480: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
d490: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
d4a0: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
d4b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
d4c0: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
d4d0: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
d4e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d4f0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d500: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
d510: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
d520: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
d530: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
d540: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
d550: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
d560: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
d570: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
d580: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
d590: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
d5a0: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
d5b0: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
d5c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
d5d0: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
d5e0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
d5f0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d600: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d610: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d620: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
d630: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
d640: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
d650: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
d660: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
d670: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
d680: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
d690: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
d6a0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d6b0: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
d6c0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
d6d0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
d6e0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
d6f0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
d700: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d710: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
d720: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 63 20  lse{.        pc 
d730: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
d740: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
d750: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
d760: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d770: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
d780: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
d790: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d7a0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
d7b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
d7c0: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
d7d0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
d7e0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
d7f0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
d800: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
d810: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
d820: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
d830: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
d840: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
d850: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
d860: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
d870: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
d880: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
d890: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
d8a0: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
d8b0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
d8c0: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
d8d0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
d8e0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
d8f0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
d900: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
d910: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d930: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d940: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d950: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
d960: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
d970: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d980: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
d990: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
d9a0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
d9b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
d9c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
d9d0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
d9e0: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
d9f0: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
da00: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
da10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
da20: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
da30: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
da40: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20  .** <ul>.** <li 
da50: 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54  value="97"> TEXT
da60: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39  .** <li value="9
da70: 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20  8"> BLOB.** <li 
da80: 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45  value="99"> NUME
da90: 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  RIC.** <li value
daa0: 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a  ="100"> INTEGER.
dab0: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30  ** <li value="10
dac0: 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c  1"> REAL.** </ul
dad0: 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  >.**.** A NULL v
dae0: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
daf0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
db00: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
db10: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
db20: 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Cast: {       
db30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
db40: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
db50: 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41  Op->p2>=SQLITE_A
db60: 46 46 5f 4e 4f 4e 45 20 26 26 20 70 4f 70 2d 3e  FF_NONE && pOp->
db70: 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2<=SQLITE_AFF_R
db80: 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EAL );.  testcas
db90: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
dba0: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20  TE_AFF_TEXT );. 
dbb0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
dbc0: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  p2==SQLITE_AFF_N
dbd0: 4f 4e 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73  ONE );.  testcas
dbe0: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
dbf0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
dc00: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
dc10: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
dc20: 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74  F_INTEGER );.  t
dc30: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
dc40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
dc50: 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  L );.  pIn1 = &a
dc60: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
dc70: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
dc80: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20  (p, pIn1);.  rc 
dc90: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
dca0: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
dcb0: 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70  eMemCast(pIn1, p
dcc0: 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67  Op->p2, encoding
dcd0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
dce0: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
dcf0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
dd00: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
dd10: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
dd20: 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33  ode: Lt P1 P2 P3
dd30: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
dd40: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50  is: if r[P1]<r[P
dd50: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
dd60: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
dd70: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
dd80: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
dd90: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
dda0: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
ddb0: 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a  ddress P2.  .**.
ddc0: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
ddd0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
dde0: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
ddf0: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
de00: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
de10: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
de20: 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68  the jump.  If th
de30: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
de40: 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63  ULL .** bit is c
de50: 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74  lear then fall t
de60: 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72  hrough if either
de70: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
de80: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
de90: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
dea0: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
deb0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
dec0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
ded0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
dee0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
def0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
df00: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
df10: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
df20: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
df30: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
df40: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
df50: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
df60: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
df70: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
df80: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
df90: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
dfa0: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
dfb0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
dfc0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
dfd0: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
dfe0: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
dff0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e000: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
e010: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
e020: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
e030: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
e040: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
e050: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
e060: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
e070: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
e080: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
e090: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
e0a0: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
e0b0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
e0c0: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
e0d0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
e0e0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
e0f0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
e100: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e110: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
e120: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
e130: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
e140: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
e150: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
e160: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
e170: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
e180: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
e190: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
e1a0: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
e1b0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
e1c0: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
e1d0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
e1e0: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
e1f0: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
e200: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
e210: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
e220: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
e230: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
e240: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
e250: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
e260: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
e270: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
e280: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
e290: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
e2a0: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
e2b0: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
e2c0: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
e2d0: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
e2e0: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
e2f0: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
e300: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
e310: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
e320: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
e330: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
e340: 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65  NULLEQ bit is se
e350: 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55  t in P5, then NU
e360: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
e370: 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61  nsidered.** equa
e380: 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
e390: 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20  , provided that 
e3a0: 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65  they do not have
e3b0: 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72   their MEM_Clear
e3c0: 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a  ed.** bit set..*
e3d0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
e3e0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e3f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e400: 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]!=r[P3] goto
e410: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e420: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e430: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e440: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e450: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e460: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
e470: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e480: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
e490: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  al.  See the Lt 
e4a0: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
e4b0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
e4c0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
e4d0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
e4e0: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
e4f0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
e500: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
e510: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
e520: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
e530: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
e540: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
e550: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
e560: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
e570: 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73  mparison is fals
e580: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
e590: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e5a0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
e5b0: 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69   true..** If nei
e5c0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e5d0: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
e5e0: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
e5f0: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
e600: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
e610: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
e620: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
e630: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
e640: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
e650: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
e660: 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]==r[P3] goto 
e670: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
e680: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
e690: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
e6a0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
e6b0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
e6c0: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
e6d0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
e6e0: 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a   P3 are equal..*
e6f0: 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63  * See the Lt opc
e700: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
e710: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e720: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
e730: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
e740: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
e750: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
e760: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
e770: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
e780: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
e790: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
e7a0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
e7b0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
e7c0: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
e7d0: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
e7e0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e7f0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e800: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
e810: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
e820: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
e830: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
e840: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
e850: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
e860: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
e870: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
e880: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
e890: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
e8a0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e8b0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72  sis: if r[P1]<=r
e8c0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e8d0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e8e0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e8f0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e900: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e910: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
e920: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
e930: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
e940: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
e950: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
e960: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
e970: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e980: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
e990: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
e9a0: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
e9b0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e9c0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
e9d0: 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]>r[P3] goto P2.
e9e0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e9f0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
ea00: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
ea10: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
ea20: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
ea30: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
ea40: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
ea50: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
ea60: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ea70: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ea80: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ea90: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
eaa0: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
eab0: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
eac0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
ead0: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50  s: if r[P1]>=r[P
eae0: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
eaf0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
eb00: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
eb10: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
eb20: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
eb30: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
eb40: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
eb50: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
eb60: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
eb70: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
eb80: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
eb90: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
eba0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
ebb0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
ebc0: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
ebd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ebe0: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
ebf0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
ec00: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
ec10: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ec20: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
ec30: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
ec40: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
ec50: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ec60: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
ec70: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
ec80: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
ec90: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
eca0: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
ecb0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
ecc0: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
ecd0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ece0: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
ecf0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
ed00: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
ed10: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
ed20: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
ed30: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
ed40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
ed50: 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
ed60: 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
ed70: 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
ed80: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
ed90: 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
eda0: 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
edb0: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66  rison */.  u16 f
edc0: 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f  lags1;         /
edd0: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
ede0: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d  l value of pIn1-
edf0: 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20  >flags */.  u16 
ee00: 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20  flags3;         
ee10: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
ee20: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33  al value of pIn3
ee30: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49  ->flags */..  pI
ee40: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
ee50: 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
ee60: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
ee70: 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66  flags1 = pIn1->f
ee80: 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d  lags;.  flags3 =
ee90: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
eea0: 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c  if( (flags1 | fl
eeb0: 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29  ags3)&MEM_Null )
eec0: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  {.    /* One or 
eed0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
eee0: 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66  e NULL */.    if
eef0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
ef00: 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20  TE_NULLEQ ){.   
ef10: 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f     /* If SQLITE_
ef20: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77  NULLEQ is set (w
ef30: 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68  hich will only h
ef40: 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65  appen if the ope
ef50: 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a  rator is.      *
ef60: 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65  * OP_Eq or OP_Ne
ef70: 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  ) then take the 
ef80: 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65  jump or not depe
ef90: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
efa0: 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74  .      ** or not
efb0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
efc0: 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a  re null..      *
efd0: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
efe0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
eff0: 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Eq || pOp->opcod
f000: 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
f010: 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
f020: 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29  1 & MEM_Cleared)
f030: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ==0 );.      ass
f040: 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
f050: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f060: 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  L)==0 );.      i
f070: 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e  f( (flags1&MEM_N
f080: 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26  ull)!=0.       &
f090: 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75  & (flags3&MEM_Nu
f0a0: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
f0b0: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65   (flags3&MEM_Cle
f0c0: 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29  ared)==0.      )
f0d0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
f0e0: 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  0;  /* Results a
f0f0: 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
f100: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
f110: 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65   res = 1;  /* Re
f120: 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71  sults are not eq
f130: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ual */.      }. 
f140: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f150: 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  /* SQLITE_NULLEQ
f160: 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74   is clear and at
f170: 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61   least one opera
f180: 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20  nd is NULL,.    
f190: 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65    ** then the re
f1a0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e  sult is always N
f1b0: 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68  ULL..      ** Th
f1c0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f1d0: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  if the SQLITE_JU
f1e0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20  MPIFNULL bit is 
f1f0: 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  set..      */.  
f200: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f210: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
f220: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74   ){.        pOut
f230: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
f240: 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  ];.        MemSe
f250: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f260: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
f270: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f280: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
f290: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
f2a0: 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
f2b0: 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20  hTaken(2,3);.   
f2c0: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
f2d0: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
f2e0: 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  NULL ){.        
f2f0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
f300: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
f310: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
f320: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
f330: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
f340: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
f350: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
f360: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
f370: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
f380: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
f390: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e     if( affinity>
f3a0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
f3b0: 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28  RIC ){.      if(
f3c0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f3d0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
f3e0: 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
f3f0: 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
f400: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
f410: 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20  nity(pIn1,0);.  
f420: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
f430: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
f440: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
f450: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
f460: 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Str ){.        a
f470: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
f480: 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20  ity(pIn3,0);.   
f490: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69     }.    }else i
f4a0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
f4b0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
f4c0: 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d        if( (pIn1-
f4d0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
f4e0: 29 3d 3d 30 20 26 26 20 28 70 49 6e 31 2d 3e 66  )==0 && (pIn1->f
f4f0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
f500: 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b  MEM_Real))!=0 ){
f510: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
f520: 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
f530: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
f540: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
f550: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f560: 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
f570: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
f580: 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e  ringify(pIn1, en
f590: 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20  coding, 1);.    
f5a0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 70    }.      if( (p
f5b0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
f5c0: 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70 49 6e  _Str)==0 && (pIn
f5d0: 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
f5e0: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
f5f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
f600: 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
f610: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
f620: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
f630: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
f640: 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
f650: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f660: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33  emStringify(pIn3
f670: 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
f680: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
f690: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
f6a0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
f6b0: 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
f6c0: 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  ll==0 );.    if(
f6d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f6e0: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
f6f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
f700: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
f710: 0a 20 20 20 20 20 20 66 6c 61 67 73 31 20 26 3d  .      flags1 &=
f720: 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20   ~MEM_Zero;.    
f730: 7d 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e  }.    if( pIn3->
f740: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
f750: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
f760: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
f770: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ob(pIn3);.      
f780: 66 6c 61 67 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a  flags3 &= ~MEM_Z
f790: 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ero;.    }.    i
f7a0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
f7b0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
f7c0: 6d 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  m;.    res = sql
f7d0: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
f7e0: 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
f7f0: 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  p4.pColl);.  }. 
f800: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
f810: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
f820: 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
f830: 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
f840: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
f850: 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
f860: 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
f870: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
f880: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
f890: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f8a0: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
f8b0: 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
f8c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
f8d0: 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
f8e0: 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
f8f0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
f900: 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
f910: 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
f920: 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
f930: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
f940: 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
f950: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
f960: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
f970: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
f980: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
f990: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
f9a0: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
f9b0: 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47  i = res;.    REG
f9c0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
f9d0: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
f9e0: 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
f9f0: 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
fa00: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
fa10: 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
fa20: 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
fa30: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
fa40: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  p2-1;.    }.  }.
fa50: 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
fa60: 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
fa70: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
fa80: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
fa90: 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d  ters. */.  pIn1-
faa0: 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b  >flags = flags1;
fab0: 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
fac0: 20 66 6c 61 67 73 33 3b 0a 20 20 62 72 65 61 6b   flags3;.  break
fad0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
fae0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
faf0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
fb00: 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
fb10: 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f   used by the OP_
fb20: 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72  Compare operator
fb30: 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79   to be the array
fb40: 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20  .** of integers 
fb50: 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  in P4..**.** The
fb60: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20   permutation is 
fb70: 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c  only valid until
fb80: 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d   the next OP_Com
fb90: 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a  pare that has.**
fba0: 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
fbb0: 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50  UTE bit set in P
fbc0: 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  5. Typically the
fbd0: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
fbe0: 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72  should .** occur
fbf0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69   immediately pri
fc00: 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d  or to the OP_Com
fc10: 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  pare..*/.case OP
fc20: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a  _Permutation: {.
fc30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
fc40: 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
fc50: 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AY );.  assert( 
fc60: 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20  pOp->p4.ai );.  
fc70: 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e  aPermute = pOp->
fc80: 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.ai;.  break;.
fc90: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
fca0: 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
fcb0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
fcc0: 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72  : r[P1@P3] <-> r
fcd0: 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f  [P2@P3].**.** Co
fce0: 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72  mpare two vector
fcf0: 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69  s of registers i
fd00: 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50  n reg(P1)..reg(P
fd10: 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68  1+P3-1) (call th
fd20: 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22  is.** vector "A"
fd30: 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29  ) and in reg(P2)
fd40: 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28  ..reg(P2+P3-1) (
fd50: 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20  "B").  Save the 
fd60: 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
fd70: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20   comparison for 
fd80: 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20  use by the next 
fd90: 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74  OP_Jump instruct
fda0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
fdb0: 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  s the OPFLAG_PER
fdc0: 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68  MUTE bit set, th
fdd0: 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  en the order of 
fde0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a  comparison is.**
fdf0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
fe00: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
fe10: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70  P_Permutation op
fe20: 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a  erator.  If the.
fe30: 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ** OPFLAG_PERMUT
fe40: 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20  E bit is clear, 
fe50: 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72  then register ar
fe60: 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65  e compared in se
fe70: 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65  quential.** orde
fe80: 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  r..**.** P4 is a
fe90: 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
fea0: 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
feb0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
fec0: 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
fed0: 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
fee0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
fef0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
ff00: 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
ff10: 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
ff20: 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
ff30: 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
ff40: 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
ff50: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
ff60: 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
ff70: 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
ff80: 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
ff90: 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
ffa0: 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
ffb0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
ffc0: 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
ffd0: 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
ffe0: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
fff0: 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
10000 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
10010 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20  t i;.  int p1;. 
10020 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74   int p2;.  const
10030 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
10040 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  fo;.  int idx;. 
10050 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
10060 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
10070 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
10080 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f   on this term */
10090 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
100a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
100b0 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
100c0 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66  t order */..  if
100d0 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
100e0 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20  LAG_PERMUTE)==0 
100f0 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a  ) aPermute = 0;.
10100 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
10110 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
10120 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
10130 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
10140 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
10150 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
10160 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
10170 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49  Op->p2;.#if SQLI
10180 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
10190 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
101a0 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
101b0 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
101c0 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
101d0 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
101e0 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
101f0 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
10200 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p1+mx<=(p->nMem-
10210 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
10220 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
10230 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
10240 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
10250 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +1 );.  }else{. 
10260 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
10270 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p1+n<=(p->nMe
10280 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
10290 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
102a0 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d  2>0 && p2+n<=(p-
102b0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
102c0 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  )+1 );.  }.#endi
102d0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
102e0 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20  G */.  for(i=0; 
102f0 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
10300 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20  dx = aPermute ? 
10310 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b  aPermute[i] : i;
10320 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
10330 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31  IsValid(&aMem[p1
10340 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73  +idx]) );.    as
10350 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
10360 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20  (&aMem[p2+idx]) 
10370 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
10380 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61  TRACE(p1+idx, &a
10390 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
103a0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
103b0 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p2+idx, &aMem[p
103c0 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73  2+idx]);.    ass
103d0 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d  ert( i<pKeyInfo-
103e0 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70  >nField );.    p
103f0 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  Coll = pKeyInfo-
10400 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62  >aColl[i];.    b
10410 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  Rev = pKeyInfo->
10420 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20  aSortOrder[i];. 
10430 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71     iCompare = sq
10440 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
10450 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26  &aMem[p1+idx], &
10460 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43  aMem[p2+idx], pC
10470 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43  oll);.    if( iC
10480 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20  ompare ){.      
10490 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70  if( bRev ) iComp
104a0 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b  are = -iCompare;
104b0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
104c0 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75    }.  }.  aPermu
104d0 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  te = 0;.  break;
104e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  .}../* Opcode: J
104f0 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ump P1 P2 P3 * *
10500 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
10510 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
10520 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32  t address P1, P2
10530 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e  , or P3 dependin
10540 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
10550 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
10560 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e  nt OP_Compare in
10570 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31  struction the P1
10580 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73   vector was less
10590 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74   than.** equal t
105a0 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
105b0 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72  an the P2 vector
105c0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  , respectively..
105d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a  */.case OP_Jump:
105e0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
105f0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
10600 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20  iCompare<0 ){.  
10610 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d    pc = pOp->p1 -
10620 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54   1;  VdbeBranchT
10630 61 6b 65 6e 28 30 2c 33 29 3b 0a 20 20 7d 65 6c  aken(0,3);.  }el
10640 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d  se if( iCompare=
10650 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
10660 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64 62  Op->p2 - 1;  Vdb
10670 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33  eBranchTaken(1,3
10680 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10690 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  pc = pOp->p3 - 1
106a0 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ;  VdbeBranchTak
106b0 65 6e 28 32 2c 33 29 3b 0a 20 20 7d 0a 20 20 62  en(2,3);.  }.  b
106c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
106d0 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
106e0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
106f0 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
10700 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
10710 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
10720 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
10730 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
10740 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
10750 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
10760 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
10770 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
10780 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
10790 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
107a0 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
107b0 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
107c0 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
107d0 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
107e0 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
107f0 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
10800 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
10810 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
10820 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
10830 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
10840 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
10850 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
10860 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
10870 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10880 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
10890 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
108a0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
108b0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
108c0 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
108d0 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
108e0 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
108f0 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
10900 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
10910 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
10920 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
10930 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
10940 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
10950 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10970 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
10980 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
10990 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
109a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
109b0 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
109c0 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
109d0 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
109e0 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
109f0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
10a00 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
10a10 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
10a20 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
10a30 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
10a40 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
10a50 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
10a60 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10a70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
10a80 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10a90 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
10aa0 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
10ab0 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
10ac0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10ad0 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
10ae0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10af0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
10b00 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10b10 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
10b20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
10b30 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
10b40 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
10b50 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
10b60 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
10b70 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10b80 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
10b90 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
10ba0 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
10bb0 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
10bc0 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
10bd0 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
10be0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10bf0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10c00 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
10c10 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
10c20 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
10c30 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
10c40 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
10c50 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
10c60 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
10c70 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
10c80 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
10c90 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
10ca0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
10cb0 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
10cc0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10cd0 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
10ce0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10cf0 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
10d00 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10d10 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
10d20 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
10d30 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
10d40 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
10d50 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
10d60 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
10d70 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
10d80 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
10d90 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10da0 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
10db0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
10dc0 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
10dd0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
10de0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10df0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10e00 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
10e10 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
10e20 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10e30 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10e40 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
10e50 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
10e60 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
10e70 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
10e80 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
10e90 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
10ea0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
10eb0 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64  u.i = !sqlite3Vd
10ec0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10ed0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10ee0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
10ef0 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
10f00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
10f10 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  1]= ~r[P1].**.**
10f20 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
10f30 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
10f40 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
10f50 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
10f60 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
10f70 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
10f80 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
10f90 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
10fa0 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
10fb0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
10fc0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
10fd0 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
10fe0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10ff0 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
11000 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
11010 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
11020 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
11030 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
11040 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
11050 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
11060 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11070 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
11080 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
11090 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
110a0 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74  ut->u.i = ~sqlit
110b0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
110c0 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
110d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
110e0 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20   Once P1 P2 * * 
110f0 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  *.**.** Check th
11100 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75  e "once" flag nu
11110 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74 20 69  mber P1. If it i
11120 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69  s set, jump to i
11130 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a  nstruction P2. .
11140 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65  ** Otherwise, se
11150 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66  t the flag and f
11160 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
11170 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
11180 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ion..** In other
11190 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70 63   words, this opc
111a0 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66  ode causes all f
111b0 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
111c0 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a 2a   up through P2.*
111d0 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75  * (but not inclu
111e0 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e 20  ding P2) to run 
111f0 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f  just once and to
11200 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73   be skipped on s
11210 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d  ubsequent.** tim
11220 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c  es through the l
11230 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22  oop..**.** All "
11240 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65 20  once" flags are 
11250 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72 65  initially cleare
11260 64 20 77 68 65 6e 65 76 65 72 20 61 20 70 72 65  d whenever a pre
11270 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pared statement.
11280 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73 20  ** first begins 
11290 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20  to run..*/.case 
112a0 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20  OP_Once: {      
112b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
112c0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
112d0 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  >p1<p->nOnceFlag
112e0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
112f0 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c  Taken(p->aOnceFl
11300 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20  ag[pOp->p1]!=0, 
11310 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e  2);.  if( p->aOn
11320 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
11330 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
11340 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
11350 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67      p->aOnceFlag
11360 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20  [pOp->p1] = 1;. 
11370 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11380 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
11390 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
113a0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
113b0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
113c0 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
113d0 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
113e0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
113f0 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69   if it is numeri
11400 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  c and non-zero. 
11410 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
11420 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
11430 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
11440 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
11450 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
11460 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
11470 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
11480 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
11490 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
114a0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
114b0 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
114c0 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
114d0 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74  ered false if it
114e0 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
114f0 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
11500 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
11510 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
11520 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
11530 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
11540 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
11550 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20  /.case OP_If:   
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11570 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61   jump, in1 */.ca
11580 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
11590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
115a0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
115b0 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  c;.  pIn1 = &aMe
115c0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
115d0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
115e0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
115f0 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  c = pOp->p3;.  }
11600 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c  else{.#ifdef SQL
11610 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
11620 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20  G_POINT.    c = 
11630 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
11640 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65  lue(pIn1)!=0;.#e
11650 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  lse.    c = sqli
11660 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
11670 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e  (pIn1)!=0.0;.#en
11680 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  dif.    if( pOp-
11690 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f  >opcode==OP_IfNo
116a0 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a  t ) c = !c;.  }.
116b0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
116c0 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  n(c!=0, 2);.  if
116d0 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ( c ){.    pc = 
116e0 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
116f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11700 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
11710 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11720 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d  psis:  if r[P1]=
11730 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
11740 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
11750 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11760 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
11770 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
11780 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
11790 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
117a0 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
117b0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
117c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
117d0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
117e0 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
117f0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20  & MEM_Null)!=0, 
11800 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
11810 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11820 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)!=0 ){.    pc 
11830 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
11840 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11850 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c  * Opcode: NotNul
11860 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
11870 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
11880 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]!=NULL goto P
11890 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
118a0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
118b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
118c0 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f  s not NULL.  .*/
118d0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  .case OP_NotNull
118e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
118f0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
11900 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
11910 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11920 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
11930 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
11940 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11950 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a  M_Null)==0, 2);.
11960 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
11970 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
11980 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
11990 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
119a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
119b0 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
119c0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
119d0 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
119e0 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  PX.**.** Interpr
119f0 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
11a00 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
11a10 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
11a20 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
11a30 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
11a40 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
11a50 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
11a60 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
11a70 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
11a80 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
11a90 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
11aa0 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
11ab0 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
11ac0 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
11ad0 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
11ae0 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
11af0 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
11b00 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
11b10 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
11b20 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
11b30 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
11b40 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
11b50 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
11b60 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
11b70 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
11b80 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
11b90 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
11ba0 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
11bb0 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
11bc0 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
11bd0 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
11be0 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
11bf0 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
11c00 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  he OPFLAG_CLEARC
11c10 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20  ACHE bit is set 
11c20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20  on P5 and P1 is 
11c30 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
11c40 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  ursor,.** then t
11c50 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20  he cache of the 
11c60 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20  cursor is reset 
11c70 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74  prior to extract
11c80 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a  ing the column..
11c90 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f  ** The first OP_
11ca0 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61  Column against a
11cb0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66   pseudo-table af
11cc0 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ter the value of
11cd0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
11ce0 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61  register has cha
11cf0 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65  nged should have
11d00 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a   this bit set..*
11d10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
11d20 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
11d30 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
11d40 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f  G bits are set o
11d50 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65  n P5 when.** the
11d60 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61   result is guara
11d70 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65  nteed to only be
11d80 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
11d90 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74  ument of a lengt
11da0 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66  h().** or typeof
11db0 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73  () function, res
11dc0 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20  pectively.  The 
11dd0 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65  loading of large
11de0 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a   blobs can be.**
11df0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e   skipped for len
11e00 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f  gth() and all co
11e10 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61  ntent loading ca
11e20 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72  n be skipped for
11e30 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61   typeof()..*/.ca
11e40 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a  se OP_Column: {.
11e50 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a    i64 payloadSiz
11e60 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  e64; /* Number o
11e70 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  f bytes in the r
11e80 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70  ecord */.  int p
11e90 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
11ea0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
11eb0 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
11ec0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
11ed0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
11ee0 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
11ef0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
11f00 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
11f10 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
11f20 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
11f30 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
11f40 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
11f50 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
11f60 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
11f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11f80 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
11f90 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
11fa0 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
11fb0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
11fc0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
11fd0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
11fe0 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
11ff0 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
12000 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
12010 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
12020 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
12030 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
12040 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
12050 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
12060 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
12070 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
12080 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
12090 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
120a0 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
120b0 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
120c0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
120d0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
120e0 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
120f0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
12100 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
12110 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
12120 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
12130 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
12140 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b  /.  u32 szField;
12150 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12160 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
12170 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69   content of a fi
12180 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76 61  eld */.  u32 ava
12190 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  il;         /* N
121a0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
121b0 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
121c0 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20   */.  u32 t;    
121d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79           /* A ty
121e0 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  pe code from the
121f0 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a   record header *
12200 2f 0a 20 20 75 31 36 20 66 78 3b 20 20 20 20 20  /.  u16 fx;     
12210 20 20 20 20 20 20 20 2f 2a 20 70 44 65 73 74 2d         /* pDest-
12220 3e 66 6c 61 67 73 20 76 61 6c 75 65 20 2a 2f 0a  >flags value */.
12230 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20    Mem *pReg;    
12240 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61       /* PseudoTa
12250 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  ble input regist
12260 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d 20 70 4f  er */..  p2 = pO
12270 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
12280 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
12290 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
122a0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
122b0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
122c0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
122d0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
122e0 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28  Dest);.  assert(
122f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
12300 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
12310 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
12320 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
12330 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
12340 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70  ;.  assert( p2<p
12350 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61  C->nField );.  a
12360 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66  Offset = pC->aOf
12370 66 73 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  fset;.#ifndef SQ
12380 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
12390 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
123a0 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
123b0 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c  ==0 ); /* OP_Col
123c0 75 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65 64  umn never called
123d0 20 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c   on virtual tabl
123e0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43  e */.#endif.  pC
123f0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
12400 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
12410 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65  sr!=0 || pC->pse
12420 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
12430 20 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f   /* pCrsr NULL o
12440 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a  n PseudoTables *
12450 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  /.  assert( pCrs
12460 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  r!=0 || pC->null
12470 52 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20 20  Row );          
12480 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f  /* pC->nullRow o
12490 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a  n PseudoTables *
124a0 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63  /..  /* If the c
124b0 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73  ursor cache is s
124c0 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75  tale, bring it u
124d0 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72  p-to-date */.  r
124e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
124f0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
12500 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
12510 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
12520 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63  ror;.  if( pC->c
12530 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63  acheStatus!=p->c
12540 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 69  acheCtr ){.    i
12550 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
12560 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72 73  {.      if( pCrs
12570 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  r==0 ){.        
12580 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
12590 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a  doTableReg>0 );.
125a0 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26          pReg = &
125b0 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54  aMem[pC->pseudoT
125c0 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20  ableReg];.      
125d0 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
125e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
125f0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
12600 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
12610 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Reg) );.        
12620 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12630 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76  = pC->szRow = av
12640 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ail = pReg->n;. 
12650 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
12660 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a  = (u8*)pReg->z;.
12670 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12680 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12690 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
126a0 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  );.        goto 
126b0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
126c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
126d0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
126e0 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 69  pCrsr );.      i
126f0 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  f( pC->isTable==
12700 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
12710 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
12720 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
12730 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20  Crsr) );.       
12740 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
12750 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
12760 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
12770 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
12780 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
12790 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20  SQLITE_OK ); /* 
127a0 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
127b0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
127c0 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
127d0 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42       /* sqlite3B
127e0 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72  treeParseCellPtr
127f0 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e  () uses getVarin
12800 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74  t32() to extract
12810 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20   the.        ** 
12820 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f  payload size, so
12830 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c   it is impossibl
12840 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a  e for payloadSiz
12850 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20  e64 to be.      
12860 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e    ** larger than
12870 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20   32 bits. */.   
12880 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61       assert( (pa
12890 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51  yloadSize64 & SQ
128a0 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28  LITE_MAX_U32)==(
128b0 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u64)payloadSize6
128c0 34 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  4 );.        pC-
128d0 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
128e0 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72  treeKeyFetch(pCr
128f0 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
12900 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
12910 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c  Size = (u32)payl
12920 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20  oadSize64;.     
12930 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12940 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
12950 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
12960 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
12970 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
12980 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  =) sqlite3BtreeD
12990 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
129a0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
129b0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
129c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
129d0 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  );   /* DataSize
129e0 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
129f0 2f 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  /.        pC->aR
12a00 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ow = sqlite3Btre
12a10 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72  eDataFetch(pCrsr
12a20 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
12a30 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
12a40 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b   avail<=65536 );
12a50 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
12a60 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
12a70 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
12a80 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20  >payloadSize <= 
12a90 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20  (u32)avail ){.  
12aa0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
12ab0 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
12ac0 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  e;.      }else{.
12ad0 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f          pC->szRo
12ae0 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20  w = avail;.     
12af0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d   }.      if( pC-
12b00 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28  >payloadSize > (
12b10 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
12b20 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
12b30 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67  TH] ){.        g
12b40 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
12b50 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
12b60 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
12b70 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
12b80 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
12b90 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70   = getVarint32(p
12ba0 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29  C->aRow, offset)
12bb0 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
12bc0 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f  rsed = 0;.    aO
12bd0 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65  ffset[0] = offse
12be0 74 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20  t;..    /* Make 
12bf0 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64  sure a corrupt d
12c00 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
12c10 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72  given us an over
12c20 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20  size header..   
12c30 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
12c40 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
12c50 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
12c60 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20  cation..    **. 
12c70 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69     ** Type entri
12c80 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65  es can be betwee
12c90 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20  n 1 and 5 bytes 
12ca0 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64  each.  But 4 and
12cb0 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74   5 byte.    ** t
12cc0 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68  ypes use so much
12cd0 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74   data space that
12ce0 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20   there can only 
12cf0 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f  be 4096 and 32 o
12d00 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72  f.    ** them, r
12d10 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f  espectively.  So
12d20 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61   the maximum hea
12d30 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c  der length resul
12d40 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a  ts from a.    **
12d50 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
12d60 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
12d70 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
12d80 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
12d90 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79  .    ** extra by
12da0 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64  tes for the head
12db0 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66  er length itself
12dc0 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d  .  32768*3 + 3 =
12dd0 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20   98307..    */. 
12de0 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20     if( offset > 
12df0 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20  98307 || offset 
12e00 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
12e10 65 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  e ){.      rc = 
12e20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
12e30 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
12e40 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
12e50 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
12e60 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a  avail<offset ){.
12e70 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f        /* pC->aRo
12e80 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  w does not have 
12e90 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69  to hold the enti
12ea0 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64  re row, but it d
12eb0 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20  oes at least.   
12ec0 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f     ** need to co
12ed0 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f  ver the header o
12ee0 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49  f the record.  I
12ef0 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  f pC->aRow does 
12f00 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20  not contain.    
12f10 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74    ** the complet
12f20 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73  e header, then s
12f30 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66  et it to zero, f
12f40 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65  orcing the heade
12f50 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a  r to be.      **
12f60 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
12f70 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20  ocated. */.     
12f80 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20   pC->aRow = 0;. 
12f90 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
12fa0 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f   0;.    }..    /
12fb0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
12fc0 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d  goto is an optim
12fd0 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e  ization.  It can
12fe0 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a   be omitted and.
12ff0 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68 69 6e      ** everythin
13000 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72  g will still wor
13010 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d  k.  But OP_Colum
13020 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c 79 20  n is measurably 
13030 66 61 73 74 65 72 0a 20 20 20 20 2a 2a 20 62 79  faster.    ** by
13040 20 73 6b 69 70 70 69 6e 67 20 74 68 65 20 73 75   skipping the su
13050 62 73 65 71 75 65 6e 74 20 63 6f 6e 64 69 74 69  bsequent conditi
13060 6f 6e 61 6c 2c 20 77 68 69 63 68 20 69 73 20 61  onal, which is a
13070 6c 77 61 79 73 20 74 72 75 65 2e 0a 20 20 20 20  lways true..    
13080 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
13090 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
130a0 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
130b0 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
130c0 70 65 64 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  ped */.    goto 
130d0 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68  op_column_read_h
130e0 65 61 64 65 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  eader;.  }..  /*
130f0 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65   Make sure at le
13100 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70 32  ast the first p2
13110 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68  +1 entries of th
13120 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62 65  e header have be
13130 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61  en.  ** parsed a
13140 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61  nd valid informa
13150 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73  tion is in aOffs
13160 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79  et[] and pC->aTy
13170 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  pe[]..  */.  if(
13180 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
13190 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  =p2 ){.    /* If
131a0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68   there is more h
131b0 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20  eader available 
131c0 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74  for parsing in t
131d0 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20  he record, try. 
131e0 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74     ** to extract
131f0 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c   additional fiel
13200 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74 68  ds up through th
13210 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20  e p2+1-th field 
13220 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70 5f 63  .    */.    op_c
13230 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
13240 72 3a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  r:.    if( pC->i
13250 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65  HdrOffset<aOffse
13260 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t[0] ){.      /*
13270 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61   Make sure zData
13280 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67   points to enoug
13290 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  h of the record 
132a0 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61  to cover the hea
132b0 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  der. */.      if
132c0 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b  ( pC->aRow==0 ){
132d0 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28  .        memset(
132e0 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  &sMem, 0, sizeof
132f0 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20  (sMem));.       
13300 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13310 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
13320 72 73 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b  rsr, 0, aOffset[
13330 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  0], .           
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 20 20 20 20 20 21 70 43 2d 3e 69            !pC->i
13360 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a  sTable, &sMem);.
13370 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
13380 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
13390 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
133a0 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20  olumn_error;.   
133b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a       }.        z
133c0 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d  Data = (u8*)sMem
133d0 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  .z;.      }else{
133e0 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
133f0 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
13400 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46   }.  .      /* F
13410 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65  ill in pC->aType
13420 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  [i] and aOffset[
13430 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67  i] values throug
13440 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c  h the p2-th fiel
13450 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20  d. */.      i = 
13460 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a  pC->nHdrParsed;.
13470 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 61        offset = a
13480 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20  Offset[i];.     
13490 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20   zHdr = zData + 
134a0 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a  pC->iHdrOffset;.
134b0 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20        zEndHdr = 
134c0 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b  zData + aOffset[
134d0 30 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  0];.      assert
134e0 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c  ( i<=p2 && zHdr<
134f0 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20  zEndHdr );.     
13500 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28   do{.        if(
13510 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30 20 29 7b   zHdr[0]<0x80 ){
13520 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d 20 7a  .          t = z
13530 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20  Hdr[0];.        
13540 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20    zHdr++;.      
13550 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13560 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74     zHdr += sqlit
13570 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48  e3GetVarint32(zH
13580 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20  dr, &t);.       
13590 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61   }.        pC->a
135a0 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20  Type[i] = t;.   
135b0 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73       szField = s
135c0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
135d0 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
135e0 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a      offset += sz
135f0 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69  Field;.        i
13600 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c  f( offset<szFiel
13610 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66  d ){  /* True if
13620 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77   offset overflow
13630 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a  s */.          z
13640 48 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31  Hdr = &zEndHdr[1
13650 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51  ];  /* Forces SQ
13660 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74  LITE_CORRUPT ret
13670 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20  urn below */.   
13680 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
13690 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
136a0 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f 66  i++;.        aOf
136b0 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74  fset[i] = offset
136c0 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  ;.      }while( 
136d0 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45  i<=p2 && zHdr<zE
136e0 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70  ndHdr );.      p
136f0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20  C->nHdrParsed = 
13700 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64  i;.      pC->iHd
13710 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28  rOffset = (u32)(
13720 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20  zHdr - zData);. 
13730 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
13740 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
13750 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
13760 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
13770 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73        sMem.flags
13780 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
13790 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
137a0 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
137b0 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
137c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
137d0 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
137e0 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
137f0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
13800 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
13810 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
13820 7a 65 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  ze.      **     
13830 20 20 20 20 20 28 7a 48 64 72 3e 7a 45 6e 64 48       (zHdr>zEndH
13840 64 72 29 0a 20 20 20 20 20 20 2a 2a 20 28 32 29  dr).      ** (2)
13850 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64   the entire head
13860 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20  er was used but 
13870 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73  not all data was
13880 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 20   used.      **  
13890 20 20 20 20 20 20 20 20 28 7a 48 64 72 3d 3d 7a          (zHdr==z
138a0 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65 74  EndHdr && offset
138b0 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
138c0 65 29 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20  e).      ** (3) 
138d0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64  the end of the d
138e0 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f  ata extends beyo
138f0 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  nd the end of th
13900 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20  e record..      
13910 2a 2a 20 20 20 20 20 20 20 20 20 20 28 6f 66 66  **          (off
13920 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  set > pC->payloa
13930 64 53 69 7a 65 29 0a 20 20 20 20 20 20 2a 2f 0a  dSize).      */.
13940 20 20 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e        if( (zHdr>
13950 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64  =zEndHdr && (zHd
13960 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66  r>zEndHdr || off
13970 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  set!=pC->payload
13980 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c  Size)).       ||
13990 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70   (offset > pC->p
139a0 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
139b0 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20    ){.        rc 
139c0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
139d0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
139e0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72  oto op_column_er
139f0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
13a00 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66   }..    /* If af
13a10 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78  ter trying to ex
13a20 74 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73 20  tra new entries 
13a30 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c  from the header,
13a40 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20   nHdrParsed is. 
13a50 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20     ** still not 
13a60 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d  up to p2, that m
13a70 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65  eans that the re
13a80 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74  cord has fewer t
13a90 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f  han p2.    ** co
13aa0 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72  lumns.  So the r
13ab0 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69  esult will be ei
13ac0 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ther the default
13ad0 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c   value or a NULL
13ae0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
13af0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
13b00 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28  =p2 ){.      if(
13b10 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
13b20 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20  _MEM ){.        
13b30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
13b40 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
13b50 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
13b60 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
13b70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13b80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
13b90 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
13ba0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
13bb0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
13bc0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
13bd0 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e   Extract the con
13be0 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b  tent for the p2+
13bf0 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  1-th column.  Co
13c00 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20  ntrol can only. 
13c10 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70   ** reach this p
13c20 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b  oint if aOffset[
13c30 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b  p2], aOffset[p2+
13c40 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70  1], and pC->aTyp
13c50 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61  e[p2] are.  ** a
13c60 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20  ll valid..  */. 
13c70 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
13c80 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20  nHdrParsed );.  
13c90 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
13ca0 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72  TE_OK );.  asser
13cb0 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
13cc0 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
13cd0 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28  (pDest) );.  if(
13ce0 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
13cf0 70 44 65 73 74 29 20 29 20 73 71 6c 69 74 65 33  pDest) ) sqlite3
13d00 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
13d10 44 65 73 74 29 3b 0a 20 20 74 20 3d 20 70 43 2d  Dest);.  t = pC-
13d20 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 69 66  >aType[p2];.  if
13d30 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66  ( pC->szRow>=aOf
13d40 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20  fset[p2+1] ){.  
13d50 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
13d60 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65   common case whe
13d70 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63  re the desired c
13d80 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74  ontent fits on t
13d90 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20  he original.    
13da0 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20  ** page - where 
13db0 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e  the content is n
13dc0 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ot on an overflo
13dd0 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 73 71  w page */.    sq
13de0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
13df0 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66 66  et(pC->aRow+aOff
13e00 73 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44 65 73  set[p2], t, pDes
13e10 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
13e20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   /* This branch 
13e30 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65  happens only whe
13e40 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20  n content is on 
13e50 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a  overflow pages *
13e60 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d  /.    if( ((pOp-
13e70 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45  >p5 & (OPFLAG_LE
13e80 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54  NGTHARG|OPFLAG_T
13e90 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20  YPEOFARG))!=0.  
13ea0 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d          && ((t>=
13eb0 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20  12 && (t&1)==0) 
13ec0 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  || (pOp->p5 & OP
13ed0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21  FLAG_TYPEOFARG)!
13ee0 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65  =0)).     || (le
13ef0 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
13f00 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29  erialTypeLen(t))
13f10 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ==0.    ){.     
13f20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69   /* Content is i
13f30 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20  rrelevant for.  
13f40 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68 65      **    1. the
13f50 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
13f60 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  on,.      **    
13f70 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  2. the length(X)
13f80 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69   function if X i
13f90 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20  s a blob, and.  
13fa0 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20      **    3. if 
13fb0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67  the content leng
13fc0 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20  th is zero..    
13fd0 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68 74    ** So we might
13fe0 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f 67   as well use bog
13ff0 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65  us content rathe
14000 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a 20  r than reading. 
14010 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20       ** content 
14020 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c  from disk.  NULL
14030 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 74   will work for t
14040 68 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74 72  he value for str
14050 69 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61 6e  ings.      ** an
14060 64 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61 74  d blobs and what
14070 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70  ever is in the p
14080 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72  ayloadSize64 var
14090 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20 77  iable.      ** w
140a0 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65  ill work for eve
140b0 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f  rything else. */
140c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
140d0 62 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d 31  beSerialGet(t<=1
140e0 33 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f 61  3 ? (u8*)&payloa
140f0 64 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c 20  dSize64 : 0, t, 
14100 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
14110 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
14120 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
14130 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66  Btree(pCrsr, aOf
14140 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21  fset[p2], len, !
14150 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20  pC->isTable,.   
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66  pDest);.      if
14190 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
141a0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
141b0 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
141c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
141d0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
141e0 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29 70  Get((const u8*)p
141f0 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73  Dest->z, t, pDes
14200 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  t);.      pDest-
14210 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45  >flags &= ~MEM_E
14220 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  phem;.    }.  }.
14230 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
14240 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c  ncoding;..op_col
14250 75 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49 66  umn_out:.  /* If
14260 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
14270 65 20 69 73 20 61 6e 20 65 70 68 65 6d 65 72 61  e is an ephemera
14280 6c 20 73 74 72 69 6e 67 2c 20 67 6f 20 61 68 65  l string, go ahe
14290 61 64 20 61 6e 64 20 70 65 72 73 69 73 74 0a 20  ad and persist. 
142a0 20 2a 2a 20 74 68 61 74 20 73 74 72 69 6e 67 20   ** that string 
142b0 69 6e 20 63 61 73 65 20 74 68 65 20 63 75 72 73  in case the curs
142c0 6f 72 20 6d 6f 76 65 73 20 62 65 66 6f 72 65 20  or moves before 
142d0 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
142e0 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e 20 20   is.  ** used.  
142f0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
14300 64 65 20 64 6f 65 73 20 74 68 65 20 65 71 75 69  de does the equi
14310 76 61 6c 65 6e 74 20 6f 66 20 44 65 65 70 68 65  valent of Deephe
14320 6d 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a 2a 20  meralize().  ** 
14330 62 75 74 20 64 6f 65 73 20 69 74 20 66 61 73 74  but does it fast
14340 65 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28 70 44  er. */.  if( (pD
14350 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  est->flags & MEM
14360 5f 45 70 68 65 6d 29 21 3d 30 20 26 26 20 70 44  _Ephem)!=0 && pD
14370 65 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 66 78  est->z ){.    fx
14380 20 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   = pDest->flags 
14390 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
143a0 6c 6f 62 29 3b 0a 20 20 20 20 61 73 73 65 72 74  lob);.    assert
143b0 28 20 66 78 21 3d 30 20 29 3b 0a 20 20 20 20 7a  ( fx!=0 );.    z
143c0 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 75 38  Data = (const u8
143d0 2a 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20 20 20  *)pDest->z;.    
143e0 6c 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e 3b 0a  len = pDest->n;.
143f0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
14400 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
14410 73 69 7a 65 28 70 44 65 73 74 2c 20 6c 65 6e 2b  size(pDest, len+
14420 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
14430 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65  ;.    memcpy(pDe
14440 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
14450 6e 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a  n);.    pDest->z
14460 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 70  [len] = 0;.    p
14470 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d  Dest->z[len+1] =
14480 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66   0;.    pDest->f
14490 6c 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f 54 65  lags = fx|MEM_Te
144a0 72 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75 6d  rm;.  }.op_colum
144b0 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54  n_error:.  UPDAT
144c0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
144d0 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
144e0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
144f0 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
14500 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14510 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
14520 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
14530 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
14540 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c  @P2]).**.** Appl
14550 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
14560 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
14570 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
14580 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
14590 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
145a0 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
145b0 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
145c0 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
145d0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
145e0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
145f0 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
14600 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
14610 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
14620 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
14630 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
14640 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
14650 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
14660 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
14670 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
14680 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
14690 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
146a0 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
146b0 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
146c0 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
146d0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
146e0 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
146f0 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
14700 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
14710 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
14720 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
14730 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
14740 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
14750 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
14760 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
14770 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
14780 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
14790 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
147a0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
147b0 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70  pIn1) );.    app
147c0 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
147d0 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29   cAff, encoding)
147e0 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
147f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
14800 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
14810 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
14820 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
14830 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
14840 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
14850 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
14860 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
14870 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
14880 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
14890 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
148a0 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
148b0 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
148c0 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
148d0 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
148e0 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
148f0 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
14900 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
14910 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
14920 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
14930 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
14940 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
14950 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
14960 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
14970 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
14980 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
14990 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
149a0 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
149b0 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
149c0 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
149d0 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
149e0 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
149f0 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
14a00 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
14a10 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
14a20 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
14a30 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
14a40 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
14a50 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e  e the affinity N
14a60 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ONE..*/.case OP_
14a70 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
14a80 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
14a90 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
14aa0 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
14ab0 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
14ac0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
14ad0 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
14ae0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
14af0 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
14b00 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
14b10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14b20 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
14b30 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14b50 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14b60 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
14b70 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14b90 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
14ba0 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
14bb0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ord */.  int nZe
14bc0 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
14bd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
14be0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
14bf0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14c00 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
14c10 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14c20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14c30 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
14c40 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
14c50 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
14c60 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
14c70 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
14c80 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
14c90 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
14ca0 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
14cb0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
14cd0 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
14ce0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14cf0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
14d00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14d10 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
14d20 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
14d30 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
14d40 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
14d50 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
14d60 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14d70 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
14d80 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
14d90 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
14da0 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
14db0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
14dc0 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
14dd0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
14de0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74   header */.  int
14df0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
14e00 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
14e10 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
14e20 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69  ] content */.  i
14e30 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
14e40 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
14e50 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
14e60 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
14e70 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
14e80 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
14e90 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
14ea0 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
14eb0 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
14ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ed0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ee0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ef0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f00 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
14f10 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
14f20 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
14f30 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
14f40 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
14f50 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
14f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14fa0 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
14fb0 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
14fc0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
14fd0 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
14fe0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
14ff0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f  1.  ** and so fo
15000 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  rth..  **.  ** E
15010 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
15020 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
15030 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
15040 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
15050 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
15060 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
15070 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
15080 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
15090 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
150a0 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
150b0 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
150c0 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
150d0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
150e0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
150f0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
15100 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
15110 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15120 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
15130 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
15140 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
15150 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
15160 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
15170 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
15180 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
15190 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
151a0 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
151b0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
151c0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
151d0 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
151e0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
151f0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
15200 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
15210 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70  p->p2+nField<=(p
15220 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
15230 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30  r)+1 );.  pData0
15240 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d   = &aMem[nField]
15250 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
15260 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
15270 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
15280 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
15290 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
152a0 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
152b0 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74  Identify the out
152c0 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
152d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
152e0 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
152f0 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
15300 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
15310 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
15320 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
15330 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
15340 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72    /* Apply the r
15350 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69 74  equested affinit
15360 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a  y to all inputs.
15370 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
15380 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
15390 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
153a0 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44  ){.    pRec = pD
153b0 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20  ata0;.    do{.  
153c0 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
153d0 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66  y(pRec++, *(zAff
153e0 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69  inity++), encodi
153f0 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ng);.      asser
15400 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d  t( zAffinity[0]=
15410 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73  =0 || pRec<=pLas
15420 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28  t );.    }while(
15430 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b   zAffinity[0] );
15440 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  .  }..  /* Loop 
15450 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
15460 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
15470 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
15480 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
15490 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
154a0 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
154b0 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
154c0 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20  rd..  */.  pRec 
154d0 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20  = pLast;.  do{. 
154e0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
154f0 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
15500 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d     pRec->uTemp =
15510 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
15520 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15530 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
15540 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
15550 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
15560 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
15570 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
15580 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
15590 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
155a0 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20    if( nData ){. 
155b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
155c0 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
155d0 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pRec);.      }el
155e0 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
155f0 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
15600 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
15610 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
15620 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
15630 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
15640 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
15650 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
15660 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
15670 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
15680 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
15690 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
156a0 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
156b0 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
156c0 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65  _type);.  }while
156d0 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74  ( (--pRec)>=pDat
156e0 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44  a0 );..  /* EVID
156f0 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34  ENCE-OF: R-22564
15700 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65  -11647 The heade
15710 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
15720 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20  single varint.  
15730 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  ** which determi
15740 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
15750 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
15760 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65   the header. The
15770 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c   varint.  ** val
15780 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f  ue is the size o
15790 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20  f the header in 
157a0 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20  bytes including 
157b0 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a  the size varint.
157c0 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a    ** itself. */.
157d0 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
157e0 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
157f0 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
15800 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
15810 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
15820 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
15830 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
15840 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
15850 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
15860 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
15870 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
15880 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
15890 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
158a0 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
158b0 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
158c0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
158d0 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
158e0 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
158f0 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20  dr+nData;.  if( 
15900 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
15910 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
15920 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
15930 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
15940 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
15950 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
15960 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
15970 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
15980 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
15990 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
159a0 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
159b0 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
159c0 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
159d0 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
159e0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
159f0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
15a00 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
15a10 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
15a20 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
15a30 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
15a40 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
15a50 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
15a60 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
15a70 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
15a80 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74  esize(pOut, (int
15a90 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67  )nByte) ){.    g
15aa0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
15ab0 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
15ac0 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
15ad0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
15ae0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
15af0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
15b00 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
15b10 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
15b20 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
15b30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
15b40 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
15b50 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
15b60 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
15b70 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
15b80 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
15b90 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
15ba0 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
15bb0 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
15bc0 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
15bd0 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
15be0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74   */.    i += put
15bf0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
15c00 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
15c10 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
15c20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
15c30 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
15c40 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
15c50 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
15c60 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
15c70 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
15c80 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
15c90 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
15ca0 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  der. */.    j +=
15cb0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15cc0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
15cd0 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
15ce0 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
15cf0 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
15d00 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
15d10 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
15d20 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
15d30 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
15d40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15d50 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
15d60 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
15d70 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
15d80 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
15d90 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
15da0 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28   MEM_Blob;.  if(
15db0 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
15dc0 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
15dd0 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
15de0 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
15df0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
15e00 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
15e10 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
15e20 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
15e30 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
15e40 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
15e50 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
15e60 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
15e70 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
15e80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15e90 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
15ea0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
15eb0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75  opsis: r[P2]=cou
15ec0 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  nt().**.** Store
15ed0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
15ee0 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
15ef0 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
15f00 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
15f10 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
15f20 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
15f30 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
15f40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
15f50 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
15f60 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
15f70 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
15f80 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45  ease */.  i64 nE
15f90 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
15fa0 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73   *pCrsr;..  pCrs
15fb0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
15fc0 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a  ->p1]->pCursor;.
15fd0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
15fe0 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b  );.  nEntry = 0;
15ff0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
16000 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
16010 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
16020 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
16030 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
16040 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
16050 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
16060 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
16070 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
16080 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
16090 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
160a0 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
160b0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
160c0 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
160d0 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
160e0 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
160f0 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
16100 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
16110 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
16120 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
16130 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
16140 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
16150 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
16160 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
16170 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
16180 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
16190 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
161a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
161b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
161c0 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
161d0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
161e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
161f0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
16200 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
16210 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
16220 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
16230 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
16240 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
16250 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
16260 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
16270 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
16280 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
16290 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
162a0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
162b0 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
162c0 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
162d0 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
162e0 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
162f0 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
16300 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
16310 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
16320 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
16330 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
16340 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
16350 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
16360 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16370 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
16380 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
16390 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
163a0 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
163b0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
163c0 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
163d0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
163e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
163f0 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
16400 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65  nt(db) );.  asse
16410 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
16420 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
16430 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
16440 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
16450 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
16460 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
16470 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
16480 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
16490 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
164a0 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
164b0 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
164c0 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
164d0 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
164e0 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
164f0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
16500 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16510 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
16520 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
16530 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
16540 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
16550 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
16560 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
16570 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
16580 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
16590 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
165a0 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
165b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
165c0 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
165d0 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
165e0 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
165f0 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
16600 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
16610 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
16620 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
16630 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
16640 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
16650 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
16660 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
16670 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
16680 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
16690 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
166a0 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
166b0 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
166c0 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
166d0 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
166e0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
166f0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
16700 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
16710 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
16720 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
16730 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
16740 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
16770 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
16780 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
16790 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
167a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
167b0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
167c0 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
167d0 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
167e0 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
167f0 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
16800 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
16810 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
16820 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
16830 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
16840 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
16850 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
16860 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
16870 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
16880 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
16890 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
168a0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
168b0 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
168c0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
168d0 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
168e0 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
168f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
16900 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
16910 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
16920 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
16930 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16940 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
16950 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16960 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
16970 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
16980 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
16990 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
169a0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
169b0 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
169c0 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
169d0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
169e0 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
169f0 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
16a00 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16a10 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
16a20 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
16a30 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
16a40 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
16a50 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
16a60 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  s;.        pNew-
16a70 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
16a80 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
16a90 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
16aa0 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
16ab0 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
16ac0 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
16ad0 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
16ae0 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
16af0 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
16b00 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
16b10 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
16b20 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
16b30 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
16b40 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
16b50 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
16b60 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
16b70 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
16b80 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
16b90 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
16ba0 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
16bb0 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
16bc0 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
16bd0 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
16be0 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
16bf0 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
16c00 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
16c10 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
16c20 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
16c30 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
16c40 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
16c50 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
16c60 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
16c70 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
16c80 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50  e>0 && p1==SAVEP
16c90 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
16ca0 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
16cb0 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
16cc0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
16cd0 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
16ce0 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
16cf0 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
16d00 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20  statements..    
16d10 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
16d20 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
16d30 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
16d40 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65        "cannot re
16d50 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
16d60 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
16d70 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20   in progress".  
16d80 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
16d90 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
16da0 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
16db0 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
16dc0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
16dd0 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
16de0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
16df0 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
16e00 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
16e10 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
16e20 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
16e30 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
16e40 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
16e50 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
16e60 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
16e70 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
16e80 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
16e90 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
16ea0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
16eb0 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
16ec0 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
16ed0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
16ee0 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
16ef0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
16f00 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
16f10 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
16f20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
16f30 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
16f40 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
16f50 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
16f60 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
16f70 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
16f80 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
16f90 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
16fa0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
16fb0 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
16fc0 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
16fd0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
16fe0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
16ff0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
17000 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
17010 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17020 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
17030 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
17040 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
17050 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63          int isSc
17060 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
17070 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
17080 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
17090 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31  - iSavepoint - 1
170a0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  ;.        if( p1
170b0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
170c0 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
170d0 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
170e0 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20   = (db->flags & 
170f0 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
17100 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20  nges)!=0;.      
17110 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
17120 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
17130 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
17140 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72  = sqlite3BtreeTr
17150 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d  ipAllCursors(db-
17160 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20  >aDb[ii].pBt,.  
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52       SQLITE_ABOR
171a0 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20  T_ROLLBACK,.    
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
171e0 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e==0);.         
171f0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17200 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17210 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17220 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
17230 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17240 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
17250 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nge = 0;.       
17260 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
17270 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
17280 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
17290 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
172a0 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d  reeSavepoint(db-
172b0 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31  >aDb[ii].pBt, p1
172c0 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
172d0 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
172e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
172f0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
17300 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17310 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
17320 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17330 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68 61   if( isSchemaCha
17340 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  nge ){.         
17350 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
17360 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
17370 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17380 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
17390 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
173a0 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  on(db);.        
173b0 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64    db->flags = (d
173c0 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54  b->flags | SQLIT
173d0 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
173e0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
173f0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
17400 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
17410 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
17420 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42  RELEASE or ROLLB
17430 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c  ACK, destroy all
17440 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70   .      ** savep
17450 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73  oints nested ins
17460 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70  ide of the savep
17470 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
17480 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20  ted on. */.     
17490 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76   while( db->pSav
174a0 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69  epoint!=pSavepoi
174b0 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  nt ){.        pT
174c0 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  mp = db->pSavepo
174d0 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
174e0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54  >pSavepoint = pT
174f0 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  mp->pNext;.     
17500 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
17510 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20  (db, pTmp);.    
17520 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
17530 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  nt--;.      }.. 
17540 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73       /* If it is
17550 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e   a RELEASE, then
17560 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76   destroy the sav
17570 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
17580 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20  rated on .      
17590 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73  ** too. If it is
175a0 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20   a ROLLBACK TO, 
175b0 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d  then set the num
175c0 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
175d0 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72  .      ** constr
175e0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20  aint violations 
175f0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
17600 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76  atabase to the v
17610 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20  alue stored.    
17620 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61    ** when the sa
17630 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61  vepoint was crea
17640 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69  ted.  */.      i
17650 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
17660 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
17670 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76      assert( pSav
17680 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76  epoint==db->pSav
17690 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20  epoint );.      
176a0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
176b0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
176c0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
176d0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
176e0 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  pSavepoint);.   
176f0 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
17700 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
17710 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
17720 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  int--;.        }
17730 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
17740 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
17750 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  redCons = pSavep
17760 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43  oint->nDeferredC
17770 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  ons;.        db-
17780 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
17790 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
177a0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
177b0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
177c0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
177d0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ion ){.        r
177e0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
177f0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
17800 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
17810 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
17820 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
17830 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17840 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
17850 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
17860 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
17870 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
17880 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
17890 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
178a0 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
178b0 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
178c0 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
178d0 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
178e0 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
178f0 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
17900 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
17910 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
17920 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
17930 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
17940 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
17950 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
17960 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
17970 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
17980 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
17990 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
179a0 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
179b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
179c0 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
179d0 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
179e0 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
179f0 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
17a00 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
17a10 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
17a20 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
17a30 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
17a40 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
17a50 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
17a60 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
17a70 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
17a80 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
17a90 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
17aa0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
17ab0 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
17ac0 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
17ad0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
17ae0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
17af0 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
17b00 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65  ssert( db->nVdbe
17b10 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20  Active>0 );  /* 
17b20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
17b30 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
17b40 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  /.  assert( p->b
17b50 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66  IsReader );..#if
17b60 20 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41   0.  if( turnOnA
17b70 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26  C && iRollback &
17b80 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  & db->nVdbeActiv
17b90 65 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  e>1 ){.    /* If
17ba0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
17bb0 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52  n implements a R
17bc0 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65  OLLBACK and othe
17bd0 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a  r VMs are.    **
17be0 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20   still running, 
17bf0 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f  and a transactio
17c00 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74  n is active, ret
17c10 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
17c20 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74  icating.    ** t
17c30 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
17c40 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
17c50 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
17c60 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
17c70 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
17c80 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c   db, "cannot rol
17c90 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
17ca0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
17cb0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
17cc0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
17cd0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17ce0 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  Y;.  }else.#endi
17cf0 66 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  f.  if( turnOnAC
17d00 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26   && !iRollback &
17d10 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  & db->nVdbeWrite
17d20 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >0 ){.    /* If 
17d30 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17d40 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f   implements a CO
17d50 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56  MMIT and other V
17d60 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20  Ms are writing. 
17d70 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20     ** return an 
17d80 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
17d90 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
17da0 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
17db0 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
17dc0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
17dd0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
17de0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63  g, db, "cannot c
17df0 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
17e00 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
17e10 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
17e20 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
17e30 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17e40 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  Y;.  }else if( d
17e50 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17e60 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
17e70 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
17e80 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
17e90 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17ea0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
17eb0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
17ec0 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49  backAll(db, SQLI
17ed0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
17ee0 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  K);.      db->au
17ef0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
17f00 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
17f10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
17f20 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
17f30 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
17f40 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17f50 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17f60 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17f70 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
17f80 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20  utoCommit;.     
17f90 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
17fa0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
17fb0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
17fc0 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
17fd0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
17fe0 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69  it = (u8)(1-desi
17ff0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a  redAutoCommit);.
18000 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
18010 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
18020 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
18030 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18040 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
18050 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
18060 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
18070 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
18080 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
18090 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
180a0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
180b0 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
180c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
180d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
180e0 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
180f0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18100 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
18110 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
18120 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20  >zErrMsg, db,.  
18130 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
18140 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
18150 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
18160 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
18170 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
18180 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
18190 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
181a0 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
181b0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
181c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181d0 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
181e0 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
181f0 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
18200 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
18210 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
18220 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  R;.  }.  break;.
18230 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
18240 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
18250 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
18260 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
18270 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50  on on database P
18280 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69  1 if a transacti
18290 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  on is not alread
182a0 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20  y.** active..** 
182b0 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
182c0 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
182d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
182e0 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20  tarted, or if a 
182f0 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63  .** read-transac
18300 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20  tion is already 
18310 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70  active, it is up
18320 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74  graded to a writ
18330 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  e-transaction..*
18340 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c  * If P2 is zero,
18350 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61   then a read-tra
18360 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
18370 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ted..**.** P1 is
18380 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
18390 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
183a0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
183b0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
183c0 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
183d0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
183e0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
183f0 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
18400 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
18410 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
18420 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
18430 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
18440 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
18450 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
18460 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
18470 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
18480 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
18490 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
184a0 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
184b0 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
184c0 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
184d0 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
184e0 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
184f0 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
18500 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
18510 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
18520 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73  nsaction may als
18530 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
18540 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
18550 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
18560 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
18570 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
18580 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
18590 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
185a0 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
185b0 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
185c0 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
185d0 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
185e0 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
185f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
18600 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20  ows the changes 
18610 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20  made by this.** 
18620 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
18630 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
18640 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
18650 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
18660 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
18670 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
18680 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
18690 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
186a0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
186b0 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
186c0 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
186d0 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
186e0 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  lts..**.** If P5
186f0 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70  !=0 then this op
18700 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73  code also checks
18710 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
18720 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a  ie against P3.**
18730 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20   and the schema 
18740 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
18750 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a  er against P4..*
18760 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61  * The cookie cha
18770 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77  nges its value w
18780 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
18790 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
187a0 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ges..** This ope
187b0 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  ration is used t
187c0 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68  o detect when th
187d0 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61  at the cookie ha
187e0 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64  s changed.** and
187f0 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e   that the curren
18800 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20  t process needs 
18810 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63  to reread the sc
18820 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63  hema.  If the sc
18830 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69  hema.** cookie i
18840 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f  n P3 differs fro
18850 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  m the schema coo
18860 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  kie in the datab
18870 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a  ase header or.**
18880 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67   if the schema g
18890 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
188a0 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20  r in P4 differs 
188b0 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
188c0 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  .** generation c
188d0 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20  ounter, then an 
188e0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72  SQLITE_SCHEMA er
188f0 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e  ror is raised an
18900 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68  d execution.** h
18910 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74  alts.  The sqlit
18920 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65  e3_step() wrappe
18930 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74  r function might
18940 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20   then reprepare 
18950 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  the.** statement
18960 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72   and rerun it fr
18970 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
18980 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
18990 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74  nsaction: {.  Bt
189a0 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20  ree *pBt;.  int 
189b0 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65  iMeta;.  int iGe
189c0 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  n;..  assert( p-
189d0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
189e0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
189f0 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  nly==0 || pOp->p
18a00 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  2==0 );.  assert
18a10 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
18a20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
18a30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
18a40 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
18a50 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
18a60 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
18a70 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
18a80 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
18a90 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
18aa0 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
18ab0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
18ac0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
18ad0 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61   }.  pBt = db->a
18ae0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
18af0 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
18b00 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18b10 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
18b20 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
18b30 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18b40 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
18b50 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
18b60 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18b70 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18b80 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
18b90 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
18ba0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18bb0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
18bc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
18bd0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
18be0 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
18bf0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
18c00 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
18c10 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
18c20 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20  >nVdbeRead>1) . 
18c30 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
18c40 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
18c50 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
18c60 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
18c70 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
18c80 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
18c90 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
18ca0 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
18cb0 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
18cc0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
18cd0 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
18ce0 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
18cf0 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
18d00 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
18d10 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20      }..      rc 
18d20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
18d30 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
18d40 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69  OINT_BEGIN, p->i
18d50 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20  Statement-1);.  
18d60 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
18d70 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
18d80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18d90 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
18da0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
18db0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18dc0 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
18dd0 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
18de0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
18df0 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
18e00 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
18e10 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
18e20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
18e30 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
18e40 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
18e50 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
18e60 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
18e70 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
18e80 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
18e90 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
18ea0 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
18eb0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
18ec0 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43   p->nStmtDefImmC
18ed0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
18ee0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
18ef0 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72  }..    /* Gather
18f00 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
18f10 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  ion number for c
18f20 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20  hecking:.    ** 
18f30 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
18f40 46 3a 20 52 2d 33 32 31 39 35 2d 31 39 34 36 35  F: R-32195-19465
18f50 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   The schema vers
18f60 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 53  ion is used by S
18f70 51 4c 69 74 65 0a 20 20 20 20 2a 2a 20 65 61 63  QLite.    ** eac
18f80 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69  h time a query i
18f90 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e  s executed to en
18fa0 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e  sure that the in
18fb0 74 65 72 6e 61 6c 20 63 61 63 68 65 20 6f 66 20  ternal cache of 
18fc0 74 68 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  the.    ** schem
18fd0 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70  a used when comp
18fe0 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75  iling the SQL qu
18ff0 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  ery matches the 
19000 73 63 68 65 6d 61 20 6f 66 20 74 68 65 0a 20 20  schema of the.  
19010 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 61 67    ** database ag
19020 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20  ainst which the 
19030 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69  compiled query i
19040 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75  s actually execu
19050 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ted..    */.    
19060 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
19070 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53  eta(pBt, BTREE_S
19080 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28  CHEMA_VERSION, (
19090 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
190a0 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44     iGen = db->aD
190b0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
190c0 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b  ma->iGeneration;
190d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47  .  }else{.    iG
190e0 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a  en = iMeta = 0;.
190f0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
19100 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
19110 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
19120 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  2 );.  if( pOp->
19130 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f  p5 && (iMeta!=pO
19140 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70  p->p3 || iGen!=p
19150 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20  Op->p4.i) ){.   
19160 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
19170 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
19180 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
19190 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
191a0 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
191b0 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
191c0 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
191d0 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
191e0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
191f0 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
19200 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
19210 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
19220 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
19230 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
19240 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
19250 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
19260 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
19270 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
19280 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
19290 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
192a0 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
192b0 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
192c0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
192d0 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
192e0 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
192f0 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
19300 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
19310 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
19320 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
19330 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
19340 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
19350 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
19360 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
19370 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
19380 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
19390 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
193a0 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
193b0 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
193c0 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
193d0 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
193e0 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
193f0 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
19400 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
19410 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
19420 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
19430 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
19440 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
19450 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
19460 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
19470 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
19480 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
19490 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
194a0 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
194b0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
194c0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
194d0 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
194e0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
194f0 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  neSchema(db, pOp
19500 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ->p1);.    }.   
19510 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
19520 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
19530 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62  _SCHEMA;.  }.  b
19540 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19550 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50  de: ReadCookie P
19560 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
19570 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75  * Read cookie nu
19580 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74  mber P3 from dat
19590 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69  abase P1 and wri
195a0 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73  te it into regis
195b0 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31  ter P2..** P3==1
195c0 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
195d0 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69  ersion.  P3==2 i
195e0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
195f0 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20  ormat..** P3==3 
19600 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
19610 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73  ed pager cache s
19620 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
19630 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20  h.  P1==0 is.** 
19640 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
19650 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
19660 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
19670 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
19680 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  ore.** temporary
19690 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   tables..**.** T
196a0 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72  here must be a r
196b0 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead-lock on the 
196c0 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72  database (either
196d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a   a transaction.*
196e0 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  * must be starte
196f0 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20  d or there must 
19700 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f  be an open curso
19710 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65  r) before.** exe
19720 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74  cuting this inst
19730 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
19740 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20   OP_ReadCookie: 
19750 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
19760 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
19770 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  se */.  int iMet
19780 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
19790 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
197a0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
197b0 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
197c0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
197d0 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
197e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
197f0 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
19800 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
19810 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
19820 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
19830 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
19840 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
19850 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
19860 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
19870 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  b) );..  sqlite3
19880 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
19890 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
198a0 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
198b0 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e  iMeta);.  pOut->
198c0 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62  u.i = iMeta;.  b
198d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
198e0 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31  de: SetCookie P1
198f0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
19900 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65   Write the conte
19910 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
19920 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61  3 (interpreted a
19930 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a  s an integer).**
19940 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d   into cookie num
19950 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61  ber P2 of databa
19960 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73  se P1.  P2==1 is
19970 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
19980 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20  ion.  .** P2==2 
19990 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
199a0 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73  format. P2==3 is
199b0 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   the recommended
199c0 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a   pager cache .**
199d0 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
199e0 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74  rth.  P1==0 is t
199f0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19a00 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
19a10 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62  is the .** datab
19a20 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
19a30 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79   store temporary
19a40 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41   tables..**.** A
19a50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
19a60 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
19a70 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68  ore executing th
19a80 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
19a90 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a  se OP_SetCookie:
19aa0 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20   {       /* in3 
19ab0 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20  */.  Db *pDb;.  
19ac0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
19ad0 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
19ae0 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
19af0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
19b00 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
19b10 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
19b20 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
19b30 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
19b40 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
19b50 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
19b60 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
19b70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
19b80 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
19b90 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
19ba0 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
19bb0 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  d(db, pOp->p1, 0
19bc0 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  ) );.  pIn3 = &a
19bd0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
19be0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
19bf0 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a  tegerify(pIn3);.
19c00 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
19c10 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
19c20 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
19c30 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
19c40 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
19c50 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
19c60 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e  Op->p2, (int)pIn
19c70 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70  3->u.i);.  if( p
19c80 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43  Op->p2==BTREE_SC
19c90 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a  HEMA_VERSION ){.
19ca0 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20      /* When the 
19cb0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
19cc0 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68  anges, record th
19cd0 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74  e new cookie int
19ce0 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70  ernally */.    p
19cf0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68  Db->pSchema->sch
19d00 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e  ema_cookie = (in
19d10 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn3->u.i;.   
19d20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
19d30 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
19d40 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
19d50 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
19d60 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
19d70 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
19d80 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
19d90 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
19da0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
19db0 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49  _format = (u8)pI
19dc0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69  n3->u.i;.  }.  i
19dd0 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
19de0 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
19df0 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
19e00 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
19e10 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
19e20 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
19e30 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
19e40 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
19e50 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
19e60 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
19e70 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
19e80 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
19e90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
19ea0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61   Opcode: OpenRea
19eb0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  d P1 P2 P3 P4 P5
19ec0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
19ed0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
19ee0 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
19ef0 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
19f00 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
19f10 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
19f20 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
19f30 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
19f40 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
19f50 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
19f60 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
19f70 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
19f80 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
19f90 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
19fa0 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
19fb0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
19fc0 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
19fd0 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
19fe0 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
19ff0 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
1a000 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
1a010 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
1a020 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
1a030 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
1a040 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
1a050 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
1a060 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
1a070 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
1a080 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
1a090 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
1a0a0 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tive..**.** If P
1a0b0 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68  5!=0 then use th
1a0c0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1a0d0 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20  ister P2 as the 
1a0e0 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a  root page, not.*
1a0f0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  * the value of P
1a100 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20  2 itself..**.** 
1a110 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20  There will be a 
1a120 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65  read lock on the
1a130 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76   database whenev
1a140 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a  er there is an.*
1a150 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20  * open cursor.  
1a160 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
1a170 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69  was unlocked pri
1a180 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72  or to this instr
1a190 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61  uction.** then a
1a1a0 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63   read lock is ac
1a1b0 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f  quired as part o
1a1c0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
1a1d0 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c  on.  A read.** l
1a1e0 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72  ock allows other
1a1f0 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65   processes to re
1a200 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
1a210 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a  but prohibits.**
1a220 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65   any other proce
1a230 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e  ss from modifyin
1a240 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
1a250 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69   The read lock i
1a260 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68  s.** released wh
1a270 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61  en all cursors a
1a280 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74  re closed.  If t
1a290 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1a2a0 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67  attempts.** to g
1a2b0 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62  et a read lock b
1a2c0 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63  ut fails, the sc
1a2d0 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20  ript terminates 
1a2e0 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  with an.** SQLIT
1a2f0 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64  E_BUSY error cod
1a300 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
1a310 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1a320 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1a330 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1a340 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1a350 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1a360 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1a370 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1a380 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1a390 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
1a3a0 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
1a3b0 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
1a3c0 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
1a3d0 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
1a3e0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
1a3f0 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
1a400 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1a410 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1a420 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
1a430 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
1a440 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1a450 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
1a460 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65   also: OpenWrite
1a470 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f  , ReopenIdx.*/./
1a480 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e  * Opcode: Reopen
1a490 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20  Idx P1 P2 P3 P4 
1a4a0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1a4b0 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1a4c0 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1a4d0 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  dx opcode works 
1a4e0 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61  exactly like Rea
1a4f0 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61  dOpen except tha
1a500 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68  t it first.** ch
1a510 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
1a520 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20  he cursor on P1 
1a530 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  is already open 
1a540 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65  with a root page
1a550 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32  .** number of P2
1a560 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68   and if it is th
1a570 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65  is opcode become
1a580 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f  s a no-op.  In o
1a590 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69  ther words,.** i
1a5a0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1a5b0 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f  already open, do
1a5c0 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a   not reopen it..
1a5d0 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1a5e0 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f  Idx opcode may o
1a5f0 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68  nly be used with
1a600 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20   P5==0 and with 
1a610 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34  P4 being.** a P4
1a620 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e  _KEYINFO object.
1a630 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74    Furthermore, t
1a640 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74  he P3 value must
1a650 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a   be the same as.
1a660 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52  ** every other R
1a670 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e  eopenIdx or Open
1a680 52 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d  Read for the sam
1a690 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  e cursor number.
1a6a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f  .**.** See the O
1a6b0 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64  penRead opcode d
1a6c0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1a6d0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1a6e0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
1a6f0 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
1a700 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1a710 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1a720 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1a730 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72  * Open a read/wr
1a740 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64  ite cursor named
1a750 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65   P1 on the table
1a760 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
1a770 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20  root.** page is 
1a780 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30  P2.  Or if P5!=0
1a790 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
1a7a0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
1a7b0 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72  to find the.** r
1a7c0 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20  oot page..**.** 
1a7d0 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
1a7e0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
1a7f0 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
1a800 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
1a810 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
1a820 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
1a830 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
1a840 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
1a850 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
1a860 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
1a870 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
1a880 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
1a890 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
1a8a0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
1a8b0 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
1a8c0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
1a8d0 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
1a8e0 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
1a8f0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
1a900 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1a910 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72  in the table, or
1a920 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65   to the.** large
1a930 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20  st index of any 
1a940 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61  column of the ta
1a950 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75  ble that is actu
1a960 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a  ally used..**.**
1a970 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1a980 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  n works just lik
1a990 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70  e OpenRead excep
1a9a0 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20  t that it opens 
1a9b0 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e  the cursor.** in
1a9c0 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65   read/write mode
1a9d0 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74  .  For a given t
1a9e0 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20  able, there can 
1a9f0 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  be one or more r
1aa00 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73  ead-only.** curs
1aa10 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  ors or a single 
1aa20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
1aa30 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a  r but not both..
1aa40 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
1aa50 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65  penRead..*/.case
1aa60 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b   OP_ReopenIdx: {
1aa70 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1aa80 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1aa90 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
1aaa0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
1aab0 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
1aac0 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
1aad0 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
1aae0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  b;..  assert( pO
1aaf0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1ab00 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b  >p5==OPFLAG_SEEK
1ab10 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EQ );.  assert( 
1ab20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1ab30 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75  KEYINFO );.  pCu
1ab40 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
1ab50 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p1];.  if( pCu
1ab60 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52  r && pCur->pgnoR
1ab70 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70  oot==(u32)pOp->p
1ab80 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  2 ){.    assert(
1ab90 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d   pCur->iDb==pOp-
1aba0 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47  >p3 );      /* G
1abb0 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65  uaranteed by the
1abc0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1abd0 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  */.    goto open
1abe0 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1abf0 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74  s;.  }.  /* If t
1ac00 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74  he cursor is not
1ac10 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
1ac20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20  or is open on a 
1ac30 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69  different.  ** i
1ac40 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20  ndex, then fall 
1ac50 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
1ac60 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63  OpenRead to forc
1ac70 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61  e a reopen */.ca
1ac80 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a  se OP_OpenRead:.
1ac90 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74  case OP_OpenWrit
1aca0 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70  e:..  assert( (p
1acb0 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50  Op->p5&(OPFLAG_P
1acc0 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55  2ISREG|OPFLAG_BU
1acd0 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1ace0 4b 45 51 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29  KEQ))==pOp->p5 )
1acf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ad00 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1ad10 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  Write || pOp->p5
1ad20 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1ad30 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1ad40 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1ad50 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1ad60 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1ad70 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
1ad80 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ad90 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20  _ReopenIdx.     
1ada0 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f       || p->readO
1adb0 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1adc0 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
1add0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1ade0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20  BORT_ROLLBACK;. 
1adf0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
1ae00 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
1ae10 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
1ae20 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
1ae30 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
1ae40 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1ae50 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1ae60 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1ae70 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1ae80 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44  sk, iDb) );.  pD
1ae90 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
1aea0 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
1aeb0 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
1aec0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
1aed0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1aee0 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
1aef0 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73  Flag = 1;.    as
1af00 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1af10 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1af20 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1af30 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1af40 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1af50 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1af60 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1af70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1af80 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1af90 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1afa0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1afb0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1afc0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1afd0 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1afe0 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1aff0 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1b000 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1b010 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
1b020 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1b030 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1b040 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1b050 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1b060 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1b070 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1b080 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1b090 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1b0a0 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1b0b0 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1b0c0 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1b0d0 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1b0e0 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1b0f0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1b100 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1b110 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1b120 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1b130 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1b140 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1b150 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1b160 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1b170 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1b180 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1b190 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1b1a0 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1b1b0 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1b1c0 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  ion. */.    if( 
1b1d0 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a  NEVER(p2<2) ) {.
1b1e0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1b1f0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
1b200 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1b210 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b220 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70     }.  }.  if( p
1b230 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1b240 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1b250 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1b260 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61  .pKeyInfo;.    a
1b270 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1b280 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1b290 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1b2a0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1b2b0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
1b2c0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70  eyInfo->nField+p
1b2d0 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64  KeyInfo->nXField
1b2e0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1b2f0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1b300 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
1b310 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1b320 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1b330 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1b340 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29  ert( nField>=0 )
1b350 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46  ;.  testcase( nF
1b360 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54  ield==0 );  /* T
1b370 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45  able with INTEGE
1b380 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  R PRIMARY KEY an
1b390 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a  d nothing else *
1b3a0 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
1b3b0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1b3c0 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
1b3d0 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
1b3e0 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
1b3f0 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
1b400 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
1b410 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
1b420 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74    pCur->pgnoRoot
1b430 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71   = p2;.  rc = sq
1b440 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1b450 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
1b460 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
1b470 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  >pCursor);.  pCu
1b480 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1b490 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1b4a0 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1b4b0 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1b4c0 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1b4d0 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1b4e0 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1b4f0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1b500 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1b510 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1b520 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1b530 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1b540 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1b550 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1b560 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1b570 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1b580 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1b590 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1b5a0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1b5b0 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1b5c0 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1b5d0 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1b5e0 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1b5f0 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1b600 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1b610 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1b620 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1b630 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1b640 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70  sorHints(pCur->p
1b650 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20  Cursor,.        
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
1b680 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46  FLAG_BULKCSR|OPF
1b690 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20  LAG_SEEKEQ)));. 
1b6a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b6b0 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65  code: OpenEpheme
1b6c0 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50  ral P1 P2 * P4 P
1b6d0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  5.** Synopsis: n
1b6e0 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1b6f0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1b700 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69  r P1 to a transi
1b710 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ent table..** Th
1b720 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61  e cursor is alwa
1b730 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77  ys opened read/w
1b740 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a  rite even if .**
1b750 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1b760 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e  se is read-only.
1b770 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a    The ephemeral.
1b780 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
1b790 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
1b7a0 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
1b7b0 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
1b7c0 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
1b7d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1b7e0 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  n the ephemeral 
1b7f0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1b800 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61  rsor points to a
1b810 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20   BTree table if 
1b820 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42  P4==0 and to a B
1b830 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66  Tree index.** if
1b840 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49   P4 is not 0.  I
1b850 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1b860 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  , it points to a
1b870 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1b880 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e  re.** that defin
1b890 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  es the format of
1b8a0 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64   keys in the ind
1b8b0 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  ex..**.** The P5
1b8c0 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62   parameter can b
1b8d0 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20  e a mask of the 
1b8e0 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65  BTREE_* flags de
1b8f0 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65  fined.** in btre
1b900 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67  e.h.  These flag
1b910 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74  s control aspect
1b920 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69  s of the operati
1b930 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72  on of.** the btr
1b940 65 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f  ee.  The BTREE_O
1b950 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20  MIT_JOURNAL and 
1b960 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61  BTREE_SINGLE fla
1b970 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20  gs are.** added 
1b980 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
1b990 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1b9a0 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32  nAutoindex P1 P2
1b9b0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
1b9c0 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1b9d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1b9e0 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  e works the same
1b9f0 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   as OP_OpenEphem
1ba00 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a  eral.  It has a.
1ba10 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  ** different nam
1ba20 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68  e to distinguish
1ba30 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65   its use.  Table
1ba40 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  s created using.
1ba50 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ** by this opcod
1ba60 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  e will be used f
1ba70 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  or automatically
1ba80 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65   created transie
1ba90 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e  nt.** indices in
1baa0 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20   joins..*/.case 
1bab0 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  OP_OpenAutoindex
1bac0 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  : .case OP_OpenE
1bad0 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64  phemeral: {.  Vd
1bae0 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
1baf0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1bb00 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f  fo;..  static co
1bb10 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73  nst int vfsFlags
1bb20 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
1bb30 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
1bb40 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1bb50 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
1bb60 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
1bb70 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
1bb80 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
1bb90 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
1bba0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
1bbb0 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61  RANSIENT_DB;.  a
1bbc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1bbd0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1bbe0 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1bbf0 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1bc00 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1bc10 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1bc20 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1bc30 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1bc40 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1bc50 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  .  pCx->isEpheme
1bc60 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  ral = 1;.  rc = 
1bc70 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1bc80 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1bc90 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20  , &pCx->pBt, .  
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcb0 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54        BTREE_OMIT
1bcc0 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45  _JOURNAL | BTREE
1bcd0 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70  _SINGLE | pOp->p
1bce0 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20  5, vfsFlags);.  
1bcf0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1bd00 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1bd10 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1bd20 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
1bd30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1bd40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1bd50 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1bd60 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1bd70 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1bd80 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1bd90 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1bda0 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1bdb0 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1bdc0 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1bdd0 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1bde0 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1bdf0 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1be00 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1be10 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1be20 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1be30 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1be40 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1be50 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1be60 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b    */.    if( (pK
1be70 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1be80 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b  .pKeyInfo)!=0 ){
1be90 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1bea0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1beb0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1bec0 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1bed0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1bee0 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1bef0 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
1bf00 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f  REE_BLOBKEY | pO
1bf10 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69  p->p5); .      i
1bf20 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1bf30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1bf40 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
1bf50 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
1bf60 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1bf70 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1bf80 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1bf90 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1bfa0 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20  C(db) );.       
1bfb0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1bfc0 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20   pKeyInfo;.     
1bfd0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1bfe0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1bff0 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b  pBt, pgno, 1, pK
1c000 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75  eyInfo, pCx->pCu
1c010 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rsor);.      }. 
1c020 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1c030 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
1c040 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1c050 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1c060 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
1c070 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78  _ROOT, 1, 0, pCx
1c080 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1c090 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1c0a0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
1c0b0 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1c0c0 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
1c0d0 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62  _UNORDERED);.  b
1c0e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c0f0 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50  de: SorterOpen P
1c100 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1c110 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1c120 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
1c130 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70  nEphemeral excep
1c140 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a  t that it opens.
1c150 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  ** a transient i
1c160 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65  ndex that is spe
1c170 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e  cifically design
1c180 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65  ed to sort large
1c190 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67  .** tables using
1c1a0 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72   an external mer
1c1b0 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68  ge-sort algorith
1c1c0 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75  m..**.** If argu
1c1d0 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  ment P3 is non-z
1c1e0 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64  ero, then it ind
1c1f0 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20  icates that the 
1c200 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73  sorter may.** as
1c210 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62  sume that a stab
1c220 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72  le sort consider
1c230 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33  ing the first P3
1c240 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a   fields of each.
1c250 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63  ** key is suffic
1c260 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20  ient to produce 
1c270 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73  the required res
1c280 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ults..*/.case OP
1c290 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20  _SorterOpen: {. 
1c2a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1c2b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1c2c0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1c2d0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1c2e0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1c2f0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1c300 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1c310 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
1c320 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1c330 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e  m;.  pCx->pKeyIn
1c340 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1c350 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
1c360 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1c370 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65  db==db );.  asse
1c380 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1c390 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1c3a0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
1c3b0 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28  3VdbeSorterInit(
1c3c0 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78  db, pOp->p3, pCx
1c3d0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1c3e0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1c3f0 63 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a  ceTest P1 P2 * *
1c400 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1c410 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63  if( cursor[P1].c
1c420 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a  tr++ ) pc = P2.*
1c430 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
1c440 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74  ter cursor. If t
1c450 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e  he sequence coun
1c460 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
1c470 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74   zero, jump.** t
1c480 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73  o P2. Regardless
1c490 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
1c4a0 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  ot the jump is t
1c4b0 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20  aken, increment 
1c4c0 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65  the.** the seque
1c4d0 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  nce value..*/.ca
1c4e0 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65  se OP_SequenceTe
1c4f0 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  st: {.  VdbeCurs
1c500 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74  or *pC;.  assert
1c510 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1c520 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1c530 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1c540 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1c550 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 53    assert( pC->pS
1c560 6f 72 74 65 72 20 29 3b 0a 20 20 69 66 28 20 28  orter );.  if( (
1c570 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d  pC->seqCount++)=
1c580 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
1c590 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1c5a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c5b0 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
1c5c0 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
1c5d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63  * Synopsis: P3 c
1c5e0 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a  olumns in r[P2].
1c5f0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1c600 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69   cursor that poi
1c610 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61  nts to a fake ta
1c620 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1c630 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  s a single.** ro
1c640 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  w of data.  The 
1c650 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20  content of that 
1c660 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63  one row is the c
1c670 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79  ontent of memory
1c680 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
1c690 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1c6a0 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f  , cursor P1 beco
1c6b0 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  mes an alias for
1c6c0 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f   the .** MEM_Blo
1c6d0 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69  b content contai
1c6e0 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  ned in register 
1c6f0 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75  P2..**.** A pseu
1c700 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64  do-table created
1c710 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
1c720 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  is used to hold 
1c730 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1c740 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20  output from the 
1c750 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74  sorter so that t
1c760 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65  he row can be de
1c770 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a  composed into.**
1c780 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
1c790 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50  mns using the OP
1c7a0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20  _Column opcode. 
1c7b0 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
1c7c0 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20  pcode.** is the 
1c7d0 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f  only cursor opco
1c7e0 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69  de that works wi
1c7f0 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  th a pseudo-tabl
1c800 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74  e..**.** P3 is t
1c810 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
1c820 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
1c830 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ds that will be 
1c840 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65  stored by.** the
1c850 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1c860 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73  /.case OP_OpenPs
1c870 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75  eudo: {.  VdbeCu
1c880 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1c890 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c8a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c8b0 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p3>=0 );.  pC
1c8c0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1c8d0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1c8e0 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a  Op->p3, -1, 0);.
1c8f0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1c900 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1c910 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1c920 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62    pCx->pseudoTab
1c930 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b  leReg = pOp->p2;
1c940 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
1c950 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 1;.  assert( p
1c960 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62  Op->p5==0 );.  b
1c970 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c980 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1c990 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1c9a0 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1c9b0 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1c9c0 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1c9d0 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1c9e0 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1c9f0 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1ca00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1ca10 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1ca20 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1ca30 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1ca40 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1ca50 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1ca60 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1ca70 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1ca80 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1ca90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1caa0 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50  : SeekGE P1 P2 P
1cab0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1cac0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1cad0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1cae0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1caf0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1cb00 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1cb10 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1cb20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1cb30 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1cb40 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
1cb50 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1cb60 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1cb70 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1cb80 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1cb90 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1cba0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1cbb0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1cbc0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1cbd0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1cbe0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1cbf0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1cc00 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
1cc10 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1cc20 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1cc30 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1cc40 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1cc50 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1cc60 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
1cc70 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1cc80 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1cc90 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1cca0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1ccb0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1ccc0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1ccd0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1cce0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1ccf0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1cd00 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1cd10 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1cd20 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1cd30 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1cd40 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1cd50 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1cd60 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1cd70 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1cd80 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
1cd90 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1cda0 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32  de: SeekGT P1 P2
1cdb0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1cdc0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1cdd0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1cde0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1cdf0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1ce00 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1ce10 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1ce20 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1ce30 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1ce40 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1ce50 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1ce60 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1ce70 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1ce80 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1ce90 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1cea0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1ceb0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1cec0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1ced0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1cee0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1cef0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1cf00 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1cf10 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1cf20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1cf30 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1cf40 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1cf50 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1cf60 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1cf70 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1cf80 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1cf90 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1cfa0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1cfb0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1cfc0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1cfd0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1cfe0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1cff0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1d000 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1d010 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1d020 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1d030 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1d040 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1d050 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1d060 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1d070 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1d080 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1d090 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  T P1 P2 P3 P4 * 
1d0a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1d0b0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1d0c0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1d0d0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1d0e0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1d0f0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1d100 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1d110 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1d120 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1d130 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1d140 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1d150 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1d160 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1d170 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1d180 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1d190 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1d1a0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1d1b0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1d1c0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1d1d0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1d1e0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1d1f0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1d200 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1d210 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1d220 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1d230 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1d240 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1d250 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1d260 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1d270 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1d280 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1d290 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1d2a0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1d2b0 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1d2c0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1d2d0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1d2e0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1d2f0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1d300 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1d310 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1d320 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
1d330 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1d340 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1d350 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1d360 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1d370 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LE P1 P2 P3 P4 *
1d380 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1d390 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1d3a0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1d3b0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1d3c0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1d3d0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1d3e0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1d3f0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1d400 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1d410 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1d420 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1d430 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1d440 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1d450 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1d460 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1d470 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1d480 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1d490 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1d4a0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1d4b0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1d4c0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1d4d0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1d4e0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1d4f0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1d500 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1d510 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1d520 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
1d530 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1d540 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1d550 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1d560 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1d570 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1d580 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1d590 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1d5a0 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1d5b0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1d5c0 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1d5d0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1d5e0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1d5f0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1d600 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1d610 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1d620 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1d630 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1d640 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1d650 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
1d660 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20  SeekLT:         
1d670 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d680 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20  case OP_SeekLE: 
1d690 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1d6a0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1d6b0 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20  SeekGE:         
1d6c0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d6d0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20  case OP_SeekGT: 
1d6e0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
1d6f0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
1d700 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56  s;.  int oc;.  V
1d710 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d720 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1d730 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  r;.  int nField;
1d740 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1d750 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1d760 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1d770 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
1d780 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1d790 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1d7a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1d7b0 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
1d7c0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1d7d0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1d7e0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1d7f0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1d800 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
1d810 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
1d820 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
1d830 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1d840 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
1d850 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
1d860 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
1d870 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
1d880 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1d890 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1d8a0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1d8b0 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
1d8c0 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75  opcode;.  pC->nu
1d8d0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65  llRow = 0;.#ifde
1d8e0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1d8f0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
1d900 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
1d910 66 0a 0a 20 20 2f 2a 20 46 6f 72 20 61 20 63 75  f..  /* For a cu
1d920 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54  rsor with the BT
1d930 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74  REE_SEEK_EQ hint
1d940 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65  , only the OP_Se
1d950 65 6b 47 45 20 61 6e 64 0a 20 20 2a 2a 20 4f 50  ekGE and.  ** OP
1d960 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20  _SeekLE opcodes 
1d970 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64  are allowed, and
1d980 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69   these must be i
1d990 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
1d9a0 77 65 64 0a 20 20 2a 2a 20 62 79 20 61 6e 20 4f  wed.  ** by an O
1d9b0 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64  P_IdxGT or OP_Id
1d9c0 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70  xLT opcode, resp
1d9d0 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74  ectively, with t
1d9e0 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 2a  he same key..  *
1d9f0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1da00 44 45 42 55 47 0a 20 20 69 66 28 20 73 71 6c 69  DEBUG.  if( sqli
1da10 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
1da20 73 48 69 6e 74 28 70 43 2d 3e 70 43 75 72 73 6f  sHint(pC->pCurso
1da30 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  r, BTREE_SEEK_EQ
1da40 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
1da50 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1da60 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e  _SeekGE || pOp->
1da70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c  opcode==OP_SeekL
1da80 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  E );.    assert(
1da90 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
1daa0 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
1dab0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
1dac0 78 47 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  xGT );.    asser
1dad0 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f  t( pOp[1].p1==pO
1dae0 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 61  p[0].p1 );.    a
1daf0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32  ssert( pOp[1].p2
1db00 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20  ==pOp[0].p2 );. 
1db10 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1db20 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20  ].p3==pOp[0].p3 
1db30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1db40 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b  Op[1].p4.i==pOp[
1db50 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 7d 0a 23  0].p4.i );.  }.#
1db60 65 6e 64 69 66 0a 20 0a 20 20 69 66 28 20 70 43  endif. .  if( pC
1db70 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
1db80 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61   /* The input va
1db90 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20  lue in P3 might 
1dba0 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20  be of any type: 
1dbb0 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73  integer, real, s
1dbc0 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c  tring,.    ** bl
1dbd0 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75  ob, or NULL.  Bu
1dbe0 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65  t it needs to be
1dbf0 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f   an integer befo
1dc00 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20  re we can do.   
1dc10 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f   ** the seek, so
1dc20 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a   convert it. */.
1dc30 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
1dc40 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69  [pOp->p3];.    i
1dc50 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1dc60 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
1dc70 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
1dc80 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
1dc90 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
1dca0 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20  nity(pIn3, 0);. 
1dcb0 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20     }.    iKey = 
1dcc0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1dcd0 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20  lue(pIn3);..    
1dce0 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1dcf0 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1dd00 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1dd10 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1dd20 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66  t.    ** loss of
1dd30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
1dd40 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
1dd50 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
1dd60 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  d... */.    if( 
1dd70 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1dd80 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
1dd90 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1dda0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1ddb0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
1ddc0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1ddd0 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
1dde0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
1ddf0 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
1de00 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
1de10 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1de20 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1de30 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1de40 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1de50 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63   - 1;  VdbeBranc
1de60 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
1de70 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1de80 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1de90 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
1dea0 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65  on iKey is large
1deb0 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1dec0 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1ded0 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1dee0 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e  stitute >= for >
1def0 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65   and < for <=. e
1df00 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63  .g. if the searc
1df10 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20  h term.      ** 
1df20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69  is 4.9 and the i
1df30 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61  nteger approxima
1df40 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a  tion 5:.      **
1df50 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1df60 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d   (x >  4.9)    -
1df70 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20  >     (x >= 5). 
1df80 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
1df90 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20  x <= 4.9)    -> 
1dfa0 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20      (x <  5).   
1dfb0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
1dfc0 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c  pIn3->u.r<(doubl
1dfd0 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1dfe0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1dff0 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
1e000 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1e010 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
1e020 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
1e030 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1e040 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
1e050 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1e060 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
1e070 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1e080 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1e090 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1e0a0 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
1e0b0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1e0c0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1e0d0 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
1e0e0 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1e0f0 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1e100 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1e110 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
1e120 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
1e130 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
1e140 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65  In3->u.r>(double
1e150 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1e160 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1e170 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31  LE==(OP_SeekLT+1
1e180 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1e190 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d  ert( OP_SeekGT==
1e1a0 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b  (OP_SeekGE+1) );
1e1b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e1c0 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78   (OP_SeekLT & 0x
1e1d0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1e1e0 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  E & 0x0001) );. 
1e1f0 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1e200 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1e210 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29  ekLT & 0x0001) )
1e220 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20   oc++;.      }. 
1e230 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73     } .    rc = s
1e240 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1e250 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1e260 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
1e270 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1e280 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
1e290 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
1e2a0 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
1e2b0 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21  e */.    if( rc!
1e2c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1e2d0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1e2e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1e2f0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1e300 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1e310 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  .i;.    assert( 
1e320 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1e330 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73  INT32 );.    ass
1e340 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
1e350 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1e360 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
1e370 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1e380 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
1e390 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e   /* The next lin
1e3a0 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74  e of code comput
1e3b0 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f  es as follows, o
1e3c0 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20  nly faster:.    
1e3d0 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  **   if( oc==OP_
1e3e0 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGT || oc==OP
1e3f0 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a  _SeekLE ){.    *
1e400 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
1e410 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20  rc = -1;.    ** 
1e420 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20    }else{.    ** 
1e430 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
1e440 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = +1;.    **   
1e450 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64  }.    */.    r.d
1e460 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20  efault_rc = ((1 
1e470 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c  & (oc - OP_SeekL
1e480 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a  T)) ? -1 : +1);.
1e490 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1e4a0 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64  OP_SeekGT || r.d
1e4b0 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
1e4c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1e4d0 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e  =OP_SeekLE || r.
1e4e0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
1e4f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1e500 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72  !=OP_SeekGE || r
1e510 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
1e520 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
1e530 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c!=OP_SeekLT || 
1e540 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
1e550 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20   );..    r.aMem 
1e560 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1e570 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1e580 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
1e590 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
1e5a0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
1e5b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1e5c0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
1e5d0 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61  .#endif.    Expa
1e5e0 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1e5f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e600 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1e610 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1e620 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1e630 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1e640 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1e650 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e660 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1e670 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
1e680 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1e690 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1e6a0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
1e6b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1e6c0 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
1e6d0 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1e6e0 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
1e6f0 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
1e700 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
1e710 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1e720 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
1e730 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1e740 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
1e750 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
1e760 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1e770 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1e780 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1e790 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1e7a0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1e7b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e7c0 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
1e7d0 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1e7e0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1e7f0 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1e800 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLT || oc==O
1e810 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
1e820 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
1e830 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1e840 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20  eekLT) ){.      
1e850 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
1e860 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e870 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75  Previous(pC->pCu
1e880 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1e890 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1e8a0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1e8b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1e8c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1e8d0 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
1e8e0 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73   negative becaus
1e8f0 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  e the table is e
1e900 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a  mpty.  Check to.
1e910 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20        ** see if 
1e920 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
1e930 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
1e940 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
1e950 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73  reeEof(pC->pCurs
1e960 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
1e970 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1e980 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  >0 );.  VdbeBran
1e990 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
1e9a0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
1e9b0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1e9c0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1e9d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e9e0 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20   Seek P1 P2 * * 
1e9f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
1ea00 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  intkey=r[P2].**.
1ea10 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1ea20 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1ea30 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1ea40 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1ea50 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1ea60 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1ea70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1ea80 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1ea90 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1eaa0 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1eab0 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1eac0 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1ead0 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1eae0 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1eaf0 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1eb00 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1eb10 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1eb20 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1eb30 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1eb40 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1eb50 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1eb60 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1eb70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1eb80 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1eb90 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1eba0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1ebb0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1ebc0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1ebd0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1ebe0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1ebf0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1ec00 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1ec10 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  0;.  pIn2 = &aMe
1ec20 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
1ec30 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1ec40 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1ec50 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43  alue(pIn2);.  pC
1ec60 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1ec70 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 1;.  break;.}
1ec80 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .  ../* Opcode: 
1ec90 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1eca0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1ecb0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1ecc0 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1ecd0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1ece0 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1ecf0 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1ed00 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1ed10 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1ed20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ed30 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1ed40 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1ed50 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1ed60 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
1ed70 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1ed80 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1ed90 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1eda0 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1edb0 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
1edc0 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1edd0 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1ede0 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a  ade to P2 and.**
1edf0 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
1ee00 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
1ee10 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
1ee20 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1ee30 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1ee40 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
1ee50 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a  ere it can be.**
1ee60 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65   advanced in the
1ee70 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69   forward directi
1ee80 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e  on.  The Next in
1ee90 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77  struction will w
1eea0 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20  ork,.** but not 
1eeb0 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63  the Prev instruc
1eec0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
1eed0 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
1eee0 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45  NoConflict, NotE
1eef0 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f  xists. SeekGe.*/
1ef00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
1ef10 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1ef20 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1ef30 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1ef40 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1ef50 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1ef60 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1ef70 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1ef80 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1ef90 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1efa0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1efb0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1efc0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1efd0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1efe0 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
1eff0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1f000 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1f010 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1f020 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1f030 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
1f040 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
1f050 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
1f060 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
1f070 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
1f080 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
1f090 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
1f0a0 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
1f0b0 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
1f0c0 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
1f0d0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1f0e0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
1f0f0 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
1f100 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
1f110 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1f120 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
1f130 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
1f140 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1f150 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
1f160 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
1f170 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
1f180 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
1f190 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
1f1a0 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
1f1b0 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
1f1c0 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
1f1d0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
1f1e0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1f1f0 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69  Exists, NoConfli
1f200 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ct.*/./* Opcode:
1f210 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50   NoConflict P1 P
1f220 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1f230 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1f240 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
1f250 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1f260 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1f270 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1f280 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1f290 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1f2a0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1f2b0 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1f2c0 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1f2d0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1f2e0 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1f2f0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1f300 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1f310 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1f320 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1f330 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  d P4.** contains
1f340 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c   any NULL value,
1f350 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1f360 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c  y to P2.  If all
1f370 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a   terms of the.**
1f380 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d   record are not-
1f390 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63  NULL then a chec
1f3a0 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74  k is done to det
1f3b0 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f  ermine if any ro
1f3c0 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69  w in the.** P1 i
1f3d0 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61  ndex btree has a
1f3e0 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72   matching key pr
1f3f0 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20  efix.  If there 
1f400 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20  are no matches, 
1f410 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  jump.** immediat
1f420 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ely to P2.  If t
1f430 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c  here is a match,
1f440 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e   fall through an
1f450 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a  d leave the P1.*
1f460 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  * cursor pointin
1f470 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e  g to the matchin
1f480 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  g row..**.** Thi
1f490 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69  s opcode is simi
1f4a0 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75  lar to OP_NotFou
1f4b0 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65  nd with the exce
1f4c0 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a  ptions that the.
1f4d0 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77  ** branch is alw
1f4e0 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79  ays taken if any
1f4f0 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61   part of the sea
1f500 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73  rch key input is
1f510 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   NULL..**.** Thi
1f520 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
1f530 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
1f540 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
1f550 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
1f560 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
1f570 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
1f580 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1f590 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
1f5a0 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
1f5b0 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
1f5c0 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
1f5d0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1f5e0 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f  Found, Found, No
1f5f0 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20  tExists.*/.case 
1f600 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20  OP_NoConflict:  
1f610 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f620 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f  */.case OP_NotFo
1f630 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75  und:       /* ju
1f640 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1f650 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20  OP_Found: {     
1f660 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f670 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79  */.  int already
1f680 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 69 69  Exists;.  int ii
1f690 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1f6a0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
1f6b0 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20   char *pFree;.  
1f6c0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
1f6d0 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63  pIdxKey;.  Unpac
1f6e0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63  kedRecord r;.  c
1f6f0 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55  har aTempRec[ROU
1f700 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63  ND8(sizeof(Unpac
1f710 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69  kedRecord)) + si
1f720 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d  zeof(Mem)*4 + 7]
1f730 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1f740 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d  _TEST.  if( pOp-
1f750 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f  >opcode!=OP_NoCo
1f760 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33  nflict ) sqlite3
1f770 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
1f780 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74  #endif..  assert
1f790 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1f7a0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1f7b0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1f7c0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1f7d0 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
1f7e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f7f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1f800 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
1f810 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
1f820 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
1f830 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70  code;.#endif.  p
1f840 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1f850 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
1f860 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1f870 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f880 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
1f890 70 46 72 65 65 20 3d 20 30 3b 20 20 2f 2a 20 4e  pFree = 0;  /* N
1f8a0 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
1f8b0 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
1f8c0 73 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  s a compiler war
1f8d0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69 66 28 20 70  ning. */.  if( p
1f8e0 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20  Op->p4.i>0 ){.  
1f8f0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1f900 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1f910 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1f920 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
1f930 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20  r.aMem = pIn3;. 
1f940 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
1f950 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  r.nField; ii++){
1f960 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
1f970 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1f980 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20  m[ii]) );.      
1f990 45 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d  ExpandBlob(&r.aM
1f9a0 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20  em[ii]);.#ifdef 
1f9b0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1f9c0 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49     if( ii ) REGI
1f9d0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1f9e0 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69  p3+ii, &r.aMem[i
1f9f0 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  i]);.#endif.    
1fa00 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  }.    pIdxKey = 
1fa10 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  &r;.  }else{.   
1fa20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
1fa30 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63  e3VdbeAllocUnpac
1fa40 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20  kedRecord(.     
1fa50 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c     pC->pKeyInfo,
1fa60 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
1fa70 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46  f(aTempRec), &pF
1fa80 72 65 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69  ree.    );.    i
1fa90 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20  f( pIdxKey==0 ) 
1faa0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
1fab0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1fac0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1fad0 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
1fae0 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c  b(pIn3);.    sql
1faf0 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e  ite3VdbeRecordUn
1fb00 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66  pack(pC->pKeyInf
1fb10 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33  o, pIn3->n, pIn3
1fb20 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20  ->z, pIdxKey);. 
1fb30 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65   }.  pIdxKey->de
1fb40 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
1fb50 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1fb60 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
1fb70 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65  {.    /* For the
1fb80 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f   OP_NoConflict o
1fb90 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20  pcode, take the 
1fba0 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74  jump if any of t
1fbb0 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20  he.    ** input 
1fbc0 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c  fields are NULL,
1fbd0 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77   since any key w
1fbe0 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20  ith a NULL will 
1fbf0 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c  not.    ** confl
1fc00 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ict */.    for(i
1fc10 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d  i=0; ii<pIdxKey-
1fc20 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  >nField; ii++){.
1fc30 20 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65        if( pIdxKe
1fc40 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67  y->aMem[ii].flag
1fc50 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
1fc60 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1fc70 2d 3e 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72  ->p2 - 1; VdbeBr
1fc80 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
1fc90 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1fca0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
1fcb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1fcc0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1fcd0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1fce0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1fcf0 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  res);.  if( pOp-
1fd00 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  >p4.i==0 ){.    
1fd10 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1fd20 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20  , pFree);.  }.  
1fd30 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1fd40 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  K ){.    break;.
1fd50 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
1fd60 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
1fd70 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1fd80 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
1fd90 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
1fda0 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
1fdb0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1fdc0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1fdd0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1fde0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
1fdf0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1fe00 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
1fe10 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
1fe20 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
1fe30 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
1fe40 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
1fe50 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
1fe60 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
1fe70 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
1fe80 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
1fe90 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1fea0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1feb0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1fec0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
1fed0 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
1fee0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1fef0 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
1ff00 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
1ff10 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
1ff20 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
1ff30 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
1ff40 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
1ff50 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e  s).  P3 is an in
1ff60 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66  teger rowid.  If
1ff70 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P1 does not con
1ff80 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
1ff90 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74  th.** rowid P3 t
1ffa0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1ffb0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1ffc0 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
1ffd0 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68  a record.** with
1ffe0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c   rowid P3 then l
1fff0 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
20000 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
20010 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
20020 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74  .** through to t
20030 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
20040 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
20050 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
20060 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
20070 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
20080 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
20090 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
200a0 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
200b0 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
200c0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
200d0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
200e0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
200f0 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
20100 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
20110 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
20120 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
20130 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
20140 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
20150 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
20160 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
20170 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
20180 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
20190 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  flict.*/.case OP
201a0 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20  _NotExists: {   
201b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
201c0 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
201d0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
201e0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
201f0 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b  res;.  u64 iKey;
20200 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ..  pIn3 = &aMem
20210 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
20220 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
20230 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
20240 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
20250 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
20260 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
20270 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20280 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
20290 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  pC!=0 );.#ifdef 
202a0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
202b0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23  C->seekOp = 0;.#
202c0 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20  endif.  assert( 
202d0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
202e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
202f0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
20300 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
20310 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
20320 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
20330 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79   res = 0;.  iKey
20340 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
20350 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20360 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
20370 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20  pCrsr, 0, iKey, 
20380 30 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  0, &res);.  pC->
20390 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69  movetoTarget = i
203a0 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79  Key;  /* Used by
203b0 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20   OP_Delete */.  
203c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
203d0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
203e0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
203f0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
20400 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64  Moveto = 0;.  Vd
20410 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
20420 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
20430 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es!=0 ){.    pc 
20440 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
20450 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73   }.  pC->seekRes
20460 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 62 72 65  ult = res;.  bre
20470 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20480 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
20490 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
204a0 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72  is: r[P2]=cursor
204b0 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a  [P1].ctr++.**.**
204c0 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
204d0 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
204e0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
204f0 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
20500 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
20510 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
20520 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
20530 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
20540 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
20550 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
20560 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
20570 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
20580 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
20590 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
205a0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
205b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
205c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
205d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
205e0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
205f0 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
20600 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
20610 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
20620 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
20630 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
20640 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
20650 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
20660 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
20670 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
20680 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
20690 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
206a0 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
206b0 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
206c0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
206d0 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
206e0 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
206f0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
20700 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
20710 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
20720 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
20730 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
20740 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
20750 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
20760 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
20770 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
20780 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
20790 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
207a0 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
207b0 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
207c0 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
207d0 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
207e0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
207f0 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
20800 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
20810 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
20820 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
20830 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
20840 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
20850 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
20860 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
20870 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
20880 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
20890 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
208a0 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
208b0 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
208c0 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
208d0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
208e0 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
208f0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
20900 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
20910 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
20920 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
20930 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36  erelease */.  i6
20940 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
20950 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
20960 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43  rowid */.  VdbeC
20970 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
20980 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74    /* Cursor of t
20990 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20  able to get the 
209a0 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  new rowid */.  i
209b0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
209c0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
209d0 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72  of an sqlite3Btr
209e0 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e  eeLast() */.  in
209f0 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20  t cnt;          
20a00 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
20a10 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
20a20 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20  ber of searches 
20a30 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
20a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
20a50 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
20a60 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f  largest rowid fo
20a70 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  r AUTOINCREMENT 
20a80 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
20a90 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52  pFrame;     /* R
20aa0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42  oot frame of VDB
20ab0 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  E */..  v = 0;. 
20ac0 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
20ad0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
20ae0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
20af0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
20b00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
20b10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
20b20 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  0 );.  if( NEVER
20b30 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29  (pC->pCursor==0)
20b40 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a   ){.    /* The z
20b50 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ero initializati
20b60 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20  on above is all 
20b70 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a  that is needed *
20b80 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  /.  }else{.    /
20b90 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
20ba0 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
20bb0 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
20bc0 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
20bd0 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
20be0 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
20bf0 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
20c00 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
20c10 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
20c20 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
20c30 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
20c40 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
20c50 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
20c60 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
20c70 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
20c80 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
20c90 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
20ca0 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
20cb0 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
20cc0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
20cd0 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
20ce0 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
20cf0 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
20d00 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
20d10 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
20d20 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
20d30 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
20d40 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
20d50 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
20d60 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
20d70 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
20d80 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
20d90 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
20da0 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
20db0 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
20dc0 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
20dd0 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
20de0 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
20df0 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
20e00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
20e10 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66  >isTable );..#if
20e20 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
20e30 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e  _ROWID.#   defin
20e40 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66  e MAX_ROWID 0x7f
20e50 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20  ffffff.#else.   
20e60 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65   /* Some compile
20e70 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
20e80 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74  t constants of t
20e90 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66  he form 0x7fffff
20ea0 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20  ffffffffff..    
20eb0 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61  ** Others compla
20ec0 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66  in about 0x7ffff
20ed0 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20  ffffffffffffLL. 
20ee0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
20ef0 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a  acro seems.    *
20f00 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65  * to provide the
20f10 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20   constant while 
20f20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69  making all compi
20f30 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20  lers happy..    
20f40 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  */.#   define MA
20f50 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20  X_ROWID  (i64)( 
20f60 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66  (((u64)0x7ffffff
20f70 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30  f)<<32) | (u64)0
20f80 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64  xffffffff ).#end
20f90 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d  if..    if( !pC-
20fa0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
20fb0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
20fc0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
20fd0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
20fe0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
20ff0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
21000 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
21010 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
21020 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
21030 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
21040 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
21050 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
21060 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
21070 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
21080 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
21090 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75  rIsValid(pC->pCu
210a0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
210b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
210c0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
210d0 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
210e0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
210f0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
21100 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f  * Cannot fail fo
21110 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73  llowing BtreeLas
21120 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t() */.        i
21130 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20  f( v>=MAX_ROWID 
21140 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  ){.          pC-
21150 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
21160 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
21170 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b  se{.          v+
21180 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  +;   /* IMP: R-2
21190 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20  9538-34987 */.  
211a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
211b0 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
211c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
211d0 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28  NCREMENT.    if(
211e0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
211f0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
21200 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
21210 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
21220 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
21230 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
21240 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
21250 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72  .        for(pFr
21260 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
21270 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
21280 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
21290 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
212a0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
212b0 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
212c0 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
212d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
212e0 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e  p->p3<=pFrame->n
212f0 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70  Mem );.        p
21300 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  Mem = &pFrame->a
21310 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
21320 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21330 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
21340 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
21350 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
21360 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
21370 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
21380 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
21390 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
213a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
213b0 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
213c0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
213d0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
213e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
213f0 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  lid(pMem) );..  
21400 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
21410 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
21420 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
21430 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
21440 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61  y(pMem);.      a
21450 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
21460 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
21470 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
21480 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
21490 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  r */.      if( p
214a0 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
214b0 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
214c0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
214d0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
214e0 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
214f0 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
21500 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
21510 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21520 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
21530 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69   if( v<pMem->u.i
21540 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  +1 ){.        v 
21550 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
21560 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
21570 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
21580 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69    }.#endif.    i
21590 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
215a0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f  Rowid ){.      /
215b0 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
215c0 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38  -OF: R-07677-418
215d0 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73  81 If the larges
215e0 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c  t ROWID is equal
215f0 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   to the.      **
21600 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
21610 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33  e integer (92233
21620 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
21630 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
21640 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e  e.      ** engin
21650 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67  e starts picking
21660 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64   positive candid
21670 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
21680 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20  ndom until.     
21690 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65   ** it finds one
216a0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
216b0 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f  viously used. */
216c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
216d0 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
216e0 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
216f0 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
21700 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
21730 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
21740 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63  able. */.      c
21750 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f  nt = 0;.      do
21760 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
21770 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
21780 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
21790 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
217a0 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20  OWID>>1); v++;  
217b0 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76  /* Ensure that v
217c0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
217d0 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d   zero */.      }
217e0 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73  while(  ((rc = s
217f0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
21800 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
21810 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
21820 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21850 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
21860 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
21870 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
21880 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
21890 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20  (++cnt<100));.  
218a0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
218b0 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
218c0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
218d0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
218e0 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
218f0 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
21900 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21910 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
21920 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
21930 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
21940 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
21950 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
21960 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
21970 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
21980 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
21990 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
219a0 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
219b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
219c0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
219d0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
219e0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
219f0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
21a00 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
21a10 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
21a20 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
21a30 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
21a40 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
21a50 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
21a60 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
21a70 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
21a80 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
21a90 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
21aa0 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
21ab0 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
21ac0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
21ad0 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
21ae0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
21af0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
21b00 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
21b10 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
21b20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
21b30 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
21b40 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
21b50 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
21b60 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
21b70 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
21b80 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
21b90 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
21ba0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
21bb0 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
21bc0 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
21bd0 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
21be0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
21bf0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
21c00 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
21c10 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
21c20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
21c30 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
21c40 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
21c50 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
21c60 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
21c70 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
21c80 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
21c90 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20   (OP_NotExists) 
21ca0 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74  was a success, t
21cb0 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hen this.** oper
21cc0 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61  ation will not a
21cd0 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
21ce0 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72  he appropriate r
21cf0 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a  ow before doing.
21d00 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75  ** the insert bu
21d10 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f  t will instead o
21d20 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77  verwrite the row
21d30 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
21d40 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79   is.** currently
21d50 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50   pointing to.  P
21d60 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70  resumably, the p
21d70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74  rior OP_NotExist
21d80 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20  s opcode.** has 
21d90 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e  already position
21da0 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  ed the cursor co
21db0 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69  rrectly.  This i
21dc0 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
21dd0 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73  n.** that boosts
21de0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20   performance by 
21df0 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61  avoiding redunda
21e00 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20  nt seeks..**.** 
21e10 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
21e20 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
21e30 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
21e40 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
21e50 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
21e60 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
21e70 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
21e80 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
21e90 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
21ea0 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
21eb0 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
21ec0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
21ed0 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
21ee0 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
21ef0 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
21f00 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
21f10 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73  int to a Table s
21f20 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79  tructure, or may
21f30 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
21f40 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c  is .** not NULL,
21f50 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
21f60 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78  -hook (sqlite3.x
21f70 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
21f80 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66  is invoked .** f
21f90 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
21fa0 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
21fb0 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
21fc0 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
21fd0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
21fe0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
21ff0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
22000 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
22010 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
22020 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
22030 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
22040 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
22050 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
22060 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
22070 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
22080 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
22090 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
220a0 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
220b0 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
220c0 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
220d0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
220e0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
220f0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
22100 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
22110 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
22120 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
22130 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
22140 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
22150 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
22160 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
22170 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33  psis:  intkey=P3
22180 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
22190 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
221a0 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
221b0 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
221c0 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
221d0 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
221e0 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
221f0 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
22200 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
22210 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
22220 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
22230 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
22240 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
22250 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
22260 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
22270 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
22280 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
22290 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
222a0 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
222b0 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
222c0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
222d0 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
222e0 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72    /* The integer
222f0 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f   ROWID or key fo
22300 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
22310 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
22320 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22330 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20     /* Cursor to 
22340 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68  table into which
22350 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74   insert is writt
22360 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  en */.  int nZer
22370 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  o;        /* Num
22380 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65  ber of zero-byte
22390 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20  s to append */. 
223a0 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
223b0 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
223c0 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20  prior seek or 0 
223d0 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53  if no USESEEKRES
223e0 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f  ULT flag */.  co
223f0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
22400 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  /* database name
22410 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75   - used by the u
22420 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
22430 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
22440 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63    /* Table struc
22450 74 75 72 65 20 2d 20 75 73 65 64 20 62 79 20 75  ture - used by u
22460 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70  pdate and pre-up
22470 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20  date hooks */.  
22480 69 6e 74 20 6f 70 20 3d 20 30 3b 20 20 20 20 20  int op = 0;     
22490 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20    /* Opcode for 
224a0 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c  update hook: SQL
224b0 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51  ITE_UPDATE or SQ
224c0 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a  LITE_INSERT */..
224d0 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
224e0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
224f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22500 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22510 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
22520 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
22530 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
22540 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22550 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22560 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22570 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
22580 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
22590 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
225a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
225b0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
225c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
225d0 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70  e==P4_TABLE || p
225e0 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53  Op->p4type>=P4_S
225f0 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53  TATIC );.  REGIS
22600 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
22610 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
22620 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
22630 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
22640 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
22650 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
22660 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
22670 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
22680 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
22690 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
226a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
226b0 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
226c0 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
226d0 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
226e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
226f0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
22700 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
22710 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
22720 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
22730 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
22740 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64  AS_UPDATE_HOOK(d
22750 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
22760 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
22770 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22780 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a  >iDb>=0 );.    z
22790 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
227a0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
227b0 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e   pTab = pOp->p4.
227c0 70 54 61 62 3b 0a 20 20 20 20 6f 70 20 3d 20 28  pTab;.    op = (
227d0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
227e0 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
227f0 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
22800 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
22810 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
22820 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
22830 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
22840 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
22850 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a  e hook, if any *
22860 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65  /.  if( db->xPre
22870 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a  UpdateCallback .
22880 20 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70     && pOp->p4typ
22890 65 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26  e==P4_TABLE.   &
228a0 26 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  & !(pOp->p5 & OP
228b0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 0a 20  FLAG_ISUPDATE). 
228c0 20 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54    && HasRowid(pT
228d0 61 62 29 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  ab).  ){.    sql
228e0 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74  ite3VdbePreUpdat
228f0 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c  eHook(p, pC, SQL
22900 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c  ITE_INSERT, zDb,
22910 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 70 4f 70   pTab, iKey, pOp
22920 2d 3e 70 32 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  ->p2);.  }.#endi
22930 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  f..  if( pOp->p5
22940 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
22950 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
22960 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
22970 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  & OPFLAG_LASTROW
22980 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77  ID ) db->lastRow
22990 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d  id = lastRowid =
229a0 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61   iKey;.  if( pDa
229b0 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
229c0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
229d0 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
229e0 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
229f0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
22a00 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
22a10 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
22a20 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b  r) );.  }.  seek
22a30 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e  Result = ((pOp->
22a40 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
22a50 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
22a60 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
22a70 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
22a80 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
22a90 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  ){.    nZero = p
22aa0 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
22ab0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72   }else{.    nZer
22ac0 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20  o = 0;.  }.  rc 
22ad0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
22ae0 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  sert(pC->pCursor
22af0 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20  , 0, iKey,.     
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b10 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70       pData->z, p
22b20 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a  Data->n, nZero,.
22b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b40 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
22b50 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
22b60 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75  ND)!=0, seekResu
22b70 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65  lt.  );.  pC->de
22b80 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
22b90 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
22ba0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
22bb0 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
22bc0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
22bd0 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
22be0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22bf0 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
22c00 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70  teCallback && op
22c10 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61   && HasRowid(pTa
22c20 62 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55  b) ){.    db->xU
22c30 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
22c40 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
22c50 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61  , zDb, pTab->zNa
22c60 6d 65 2c 20 69 4b 65 79 29 3b 0a 20 20 7d 0a 20  me, iKey);.  }. 
22c70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22c80 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20  code: Delete P1 
22c90 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
22ca0 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
22cb0 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
22cc0 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
22cd0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
22ce0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
22cf0 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
22d00 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
22d10 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
22d20 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
22d30 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
22d40 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
22d50 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
22d60 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
22d70 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
22d80 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
22d90 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
22da0 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
22db0 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
22dc0 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
22dd0 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a  in a Next loop..
22de0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
22df0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
22e00 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74   of P2 is set, t
22e10 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
22e20 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
22e30 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
22e40 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
22e50 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
22e60 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
22e70 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
22e80 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
22e90 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
22ea0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
22eb0 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
22ec0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62   points to a Tab
22ed0 6c 65 20 73 74 72 75 74 75 72 65 2e 20 49 6e 20  le struture. In 
22ee0 74 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72  this case either
22ef0 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20   .** the update 
22f00 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  or pre-update ho
22f10 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79  ok, or both, may
22f20 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65   be invoked. The
22f30 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a   P1 cursor must.
22f40 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  ** have been pos
22f50 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50  itioned using OP
22f60 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
22f70 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
22f80 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74   opcode in .** t
22f90 68 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66  his case. Specif
22fa0 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69  ically, if one i
22fb0 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68  s configured, th
22fc0 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  e pre-update hoo
22fd0 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64  k is .** invoked
22fe0 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   if P4 is not NU
22ff0 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68  LL. The update-h
23000 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69  ook is invoked i
23010 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
23020 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e  red, .** P4 is n
23030 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65  ot NULL, and the
23040 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
23050 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
23060 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
23070 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
23080 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
23090 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61  2, then P3 conta
230a0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a  ins the address.
230b0 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ** of the memory
230c0 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
230d0 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68  ins the value th
230e0 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  at the rowid of 
230f0 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20  the row will.** 
23100 62 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65  be set to by the
23110 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65   update..*/.case
23120 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
23130 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23140 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
23150 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  b;.  Table *pTab
23160 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b  ;.  int opflags;
23170 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f  ..  opflags = pO
23180 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
23190 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
231a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
231b0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
231c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
231d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
231e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
231f0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f  pCursor!=0 );  /
23200 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72  * Only valid for
23210 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f   real tables, no
23220 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f   pseudotables */
23230 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
23240 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
23250 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
23260 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
23270 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
23280 41 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64  ABLE && HasRowid
23290 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 29  (pOp->p4.pTab) )
232a0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 73 65 65  {.    /* The see
232b0 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74  k operation that
232c0 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
232d0 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 20  cursor prior to 
232e0 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 0a 20  OP_Delete will. 
232f0 20 20 20 2a 2a 20 68 61 76 65 20 61 6c 73 6f 20     ** have also 
23300 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65  set the pC->move
23310 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74  toTarget field t
23320 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  o the rowid of t
23330 68 65 20 72 6f 77 20 74 68 61 74 0a 20 20 20 20  he row that.    
23340 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65  ** is being dele
23350 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20 69  ted */.    i64 i
23360 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  Key = 0;.    sql
23370 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
23380 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 69  (pC->pCursor, &i
23390 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
233a0 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  ( pC->movetoTarg
233b0 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a  et==iKey );.  }.
233c0 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
233d0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
233e0 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  or pre-update-ho
233f0 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
23400 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20  ed, set iKey to 
23410 0a 20 20 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  .  ** the rowid 
23420 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69 6e 67  of the row being
23430 20 64 65 6c 65 74 65 64 2e 20 53 65 74 20 7a 44   deleted. Set zD
23440 62 20 61 6e 64 20 7a 54 61 62 20 61 73 20 77 65  b and zTab as we
23450 6c 6c 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  ll..  */.  if( p
23460 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 48 41 53 5f  Op->p4.z && HAS_
23470 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
23480 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
23490 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
234a0 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
234b0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
234c0 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70     pTab = pOp->p
234d0 34 2e 70 54 61 62 3b 0a 20 20 7d 0a 0a 23 69 66  4.pTab;.  }..#if
234e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
234f0 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
23500 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
23510 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b   pre-update-hook
23520 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
23530 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55  .  if( db->xPreU
23540 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
23550 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 48 61   pOp->p4.z && Ha
23560 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a  sRowid(pTab) ){.
23570 20 20 20 20 61 73 73 65 72 74 28 20 21 28 6f 70      assert( !(op
23580 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
23590 53 55 50 44 41 54 45 29 20 7c 7c 20 28 61 4d 65  SUPDATE) || (aMe
235a0 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73  m[pOp->p3].flags
235b0 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 3b 0a 20   & MEM_Int) );. 
235c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
235d0 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70  eUpdateHook(p, p
235e0 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66 6c  C,.        (opfl
235f0 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  ags & OPFLAG_ISU
23600 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
23610 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
23620 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20 20  DELETE, .       
23630 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e   zDb, pTab, pC->
23640 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20 20  movetoTarget,.  
23650 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20        pOp->p3.  
23660 20 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a    );.  }.#endif.
23670 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
23680 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29   OPFLAG_ISNOOP )
23690 20 62 72 65 61 6b 3b 0a 20 0a 20 20 72 63 20 3d   break;. .  rc =
236a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
236b0 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ete(pC->pCursor)
236c0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
236d0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
236e0 45 3b 0a 0a 20 20 2f 2a 20 55 70 64 61 74 65 20  E;..  /* Update 
236f0 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74  the change-count
23700 65 72 20 61 6e 64 20 69 6e 76 6f 6b 65 20 74 68  er and invoke th
23710 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
23720 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
23730 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50  if( opflags & OP
23740 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a  FLAG_NCHANGE ){.
23750 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
23760 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
23770 70 2d 3e 70 34 2e 7a 20 29 3b 0a 20 20 20 20 69  p->p4.z );.    i
23780 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
23790 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
237a0 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52 6f  allback && HasRo
237b0 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
237c0 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
237d0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
237e0 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
237f0 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d  LETE, zDb, pTab-
23800 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
23810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23820 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
23830 65 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  et);.    }.  }. 
23840 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63   break;.}./* Opc
23850 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20  ode: ResetCount 
23860 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
23870 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  The value of the
23880 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
23890 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
238a0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
238b0 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
238c0 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
238d0 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
238e0 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
238f0 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20  ges())..** Then 
23900 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c  the VMs internal
23910 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
23920 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20  resets to 0..** 
23930 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
23940 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
23950 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
23960 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c  etCount: {.  sql
23970 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
23980 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
23990 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  e);.  p->nChange
239a0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
239b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
239c0 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32  terCompare P1 P2
239d0 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
239e0 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21  is:  if key(P1)!
239f0 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20  =trim(r[P3],P4) 
23a00 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  goto P2.**.** P1
23a10 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
23a20 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75  sor. This instru
23a30 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61  ction compares a
23a40 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a   prefix of the.*
23a50 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e  * record blob in
23a60 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61   register P3 aga
23a70 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  inst a prefix of
23a80 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
23a90 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63  .** the sorter c
23aa0 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20  ursor currently 
23ab0 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79  points to.  Only
23ac0 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66 69   the first P4 fi
23ad0 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d  elds.** of r[P3]
23ae0 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20   and the sorter 
23af0 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61  record are compa
23b00 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69  red..**.** If ei
23b10 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73  ther P3 or the s
23b20 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61  orter contains a
23b30 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20   NULL in one of 
23b40 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e  their significan
23b50 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74  t.** fields (not
23b60 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34   counting the P4
23b70 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
23b80 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e  nd which are ign
23b90 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68  ored) then.** th
23ba0 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
23bb0 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71  assumed to be eq
23bc0 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20  ual..**.** Fall 
23bd0 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20  through to next 
23be0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74  instruction if t
23bf0 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63  he two records c
23c00 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a  ompare equal to.
23c10 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  ** each other.  
23c20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
23c30 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  ey are different
23c40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
23c50 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  terCompare: {.  
23c60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23c70 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
23c80 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20   nKeyCol;..  pC 
23c90 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23ca0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
23cb0 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
23cc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
23cd0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
23ce0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
23cf0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65  [pOp->p3];.  nKe
23d00 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  yCol = pOp->p4.i
23d10 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72  ;.  res = 0;.  r
23d20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
23d30 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c  orterCompare(pC,
23d40 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20   pIn3, nKeyCol, 
23d50 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61  &res);.  VdbeBra
23d60 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
23d70 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b  2);.  if( res ){
23d80 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
23d90 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
23da0 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.};../* Opcode:
23db0 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50   SorterData P1 P
23dc0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
23dd0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
23de0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
23df0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
23e00 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72  e current sorter
23e10 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72   data for sorter
23e20 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
23e30 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f  hen clear the co
23e40 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68  lumn header cach
23e50 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a  e on cursor P3..
23e60 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
23e70 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73  e is normally us
23e80 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f  e to move a reco
23e90 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f  rd out of the so
23ea0 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a  rter and into.**
23eb0 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
23ec0 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66   is the source f
23ed0 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  or a pseudo-tabl
23ee0 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64  e cursor created
23ef0 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73   using.** OpenPs
23f00 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75  eudo.  That pseu
23f10 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20  do-table cursor 
23f20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20  is the one that 
23f30 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
23f40 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33  .** parameter P3
23f50 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20  .  Clearing the 
23f60 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  P3 column cache 
23f70 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
23f80 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20  opcode saves.** 
23f90 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74  us from having t
23fa0 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61  o issue a separa
23fb0 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72  te NullRow instr
23fc0 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20  uction to clear 
23fd0 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63  that cache..*/.c
23fe0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74  ase OP_SorterDat
23ff0 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
24000 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d  r *pC;..  pOut =
24010 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
24020 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24030 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24040 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
24050 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
24060 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77  te3VdbeSorterRow
24070 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20  key(pC, pOut);. 
24080 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c   assert( rc!=SQL
24090 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d  ITE_OK || (pOut-
240a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
240b0 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
240c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
240d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
240e0 20 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70   );.  p->apCsr[p
240f0 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74  Op->p3]->cacheSt
24100 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24110 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  LE;.  break;.}..
24120 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
24130 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
24140 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
24150 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
24160 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
24170 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
24180 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
24190 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
241a0 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
241b0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
241c0 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
241d0 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
241e0 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
241f0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
24200 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
24210 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
24220 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
24230 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
24240 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
24250 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
24260 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
24270 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
24280 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
24290 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
242a0 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
242b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
242c0 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57  [P2]=key.**.** W
242d0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
242e0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
242f0 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
24300 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
24310 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
24320 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
24330 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
24340 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
24350 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
24360 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
24370 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
24380 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
24390 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
243a0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
243b0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
243c0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
243d0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
243e0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
243f0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
24400 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
24410 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
24420 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
24430 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
24440 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
24450 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
24460 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
24470 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
24480 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
24490 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f   pOut);..  /* No
244a0 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
244b0 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
244c0 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
244d0 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
244e0 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
244f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
24500 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
24510 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
24520 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
24530 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
24540 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  (pC)==0 );.  ass
24550 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24560 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
24570 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
24580 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
24590 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  able==0 || pOp->
245a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
245b0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
245c0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
245d0 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
245e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
245f0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
24600 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
24610 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
24620 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
24630 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a  ->pCursor;..  /*
24640 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
24650 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
24660 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
24670 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
24680 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
24690 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
246a0 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
246b0 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
246c0 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
246d0 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
246e0 72 2e 20 20 49 66 20 74 68 69 73 20 77 68 65 72  r.  If this wher
246f0 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20  e not the case, 
24700 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  on of the follow
24710 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20  ing assert()s.  
24720 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20  ** would fail.  
24730 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72  Should this ever
24740 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65   change (because
24750 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74   of changes in t
24760 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e  he code.  ** gen
24770 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65  erator) then the
24780 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f   fix would be to
24790 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74   insert a call t
247a0 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
247b0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
247c0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
247d0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
247e0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
247f0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
24800 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
24810 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f  rsr) );.#if 0  /
24820 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64  * Not required d
24830 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ue to the previo
24840 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73  us to assert() s
24850 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72  tatements */.  r
24860 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
24870 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
24880 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
24890 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
248a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
248b0 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43  #endif..  if( pC
248c0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
248d0 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d      assert( !pC-
248e0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
248f0 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
24900 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
24910 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b  ze(pCrsr, &n64);
24920 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
24930 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
24940 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
24950 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
24960 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
24970 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d  .    if( n64>db-
24980 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
24990 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
249a0 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
249b0 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20  ig;.    }.    n 
249c0 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65  = (u32)n64;.  }e
249d0 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c  lse{.    VVA_ONL
249e0 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
249f0 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
24a00 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73  sr, &n);.    ass
24a10 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
24a20 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61  OK );    /* Data
24a30 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
24a40 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e  il */.    if( n>
24a50 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
24a60 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
24a70 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
24a80 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
24a90 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65  }.  }.  testcase
24aa0 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  ( n==0 );.  if( 
24ab0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
24ac0 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
24ad0 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b  t, MAX(n,32)) ){
24ae0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
24af0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20  ;.  }.  pOut->n 
24b00 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = n;.  MemSetTyp
24b10 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
24b20 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d  Blob);.  if( pC-
24b30 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
24b40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
24b50 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30  treeKey(pCrsr, 0
24b60 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
24b70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
24b80 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
24b90 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  a(pCrsr, 0, n, p
24ba0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70  Out->z);.  }.  p
24bb0 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
24bc0 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
24bd0 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
24be0 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78  ever cast to tex
24bf0 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41  t */.  UPDATE_MA
24c00 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
24c10 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
24c20 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
24c30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
24c40 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
24c50 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
24c60 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
24c70 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  owid.**.** Store
24c80 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
24c90 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
24ca0 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
24cb0 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
24cc0 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
24cd0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
24ce0 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
24cf0 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
24d00 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
24d10 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
24d20 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
24d30 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
24d40 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
24d50 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
24d60 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
24d70 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
24d80 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
24d90 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
24da0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
24db0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
24dc0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
24dd0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
24de0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
24df0 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
24e00 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
24e10 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
24e20 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
24e30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24e40 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24e50 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24e60 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24e70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24e80 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
24e90 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
24ea0 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70  TableReg==0 || p
24eb0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
24ec0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
24ed0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
24ee0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
24ef0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
24f00 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72  e if( pC->deferr
24f10 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20  edMoveto ){.    
24f20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  v = pC->movetoTa
24f30 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rget;.#ifndef SQ
24f40 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24f50 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
24f60 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73  f( pC->pVtabCurs
24f70 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20  or ){.    pVtab 
24f80 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  = pC->pVtabCurso
24f90 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d  r->pVtab;.    pM
24fa0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
24fb0 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65  Module;.    asse
24fc0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  rt( pModule->xRo
24fd0 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  wid );.    rc = 
24fe0 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
24ff0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  pC->pVtabCursor,
25000 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   &v);.    sqlite
25010 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
25020 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e  g(p, pVtab);.#en
25030 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
25040 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
25050 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
25060 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
25070 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  sor!=0 );.    rc
25080 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
25090 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
250a0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
250b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
250c0 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
250d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
250e0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
250f0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
25100 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
25110 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
25120 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
25130 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
25140 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
25150 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41  LITE_OK );  /* A
25160 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65  lways so because
25170 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74 6f 72   of CursorRestor
25180 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 7d  e() above */.  }
25190 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
251a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
251b0 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
251c0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
251d0 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
251e0 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
251f0 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
25200 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
25210 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
25220 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
25230 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
25240 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
25250 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
25260 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
25270 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
25280 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
25290 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
252a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
252b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
252c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
252d0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
252e0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
252f0 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   1;.  pC->cacheS
25300 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25310 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  ALE;.  if( pC->p
25320 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71  Cursor ){.    sq
25330 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43  lite3BtreeClearC
25340 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f  ursor(pC->pCurso
25350 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  r);.  }.  break;
25360 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .}../* Opcode: L
25370 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
25380 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
25390 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
253a0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65  or Column or Pre
253b0 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  v instruction fo
253c0 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
253d0 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
253e0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
253f0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
25400 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
25410 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
25420 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
25430 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
25440 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
25450 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
25460 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
25470 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
25480 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
25490 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
254a0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
254b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
254c0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
254d0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
254e0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
254f0 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
25500 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
25510 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
25520 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
25530 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
25540 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
25550 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
25560 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ext..*/.case OP_
25570 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
25580 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
25590 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
255a0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
255b0 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
255c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
255d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
255e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
255f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25600 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
25610 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
25620 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72  pC->pCursor;.  r
25630 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  es = 0;.  assert
25640 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
25650 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25660 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
25670 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
25680 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
25690 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
256a0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
256b0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
256c0 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53  _STALE;.#ifdef S
256d0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
256e0 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61  ->seekOp = OP_La
256f0 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  st;.#endif.  if(
25700 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20   pOp->p2>0 ){.  
25710 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
25720 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20  n(res!=0,2);.   
25730 20 69 66 28 20 72 65 73 20 29 20 70 63 20 3d 20   if( res ) pc = 
25740 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
25750 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
25760 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
25770 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
25780 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
25790 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
257a0 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
257b0 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
257c0 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
257d0 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
257e0 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
257f0 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
25800 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
25810 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
25820 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
25830 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
25840 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
25850 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
25860 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
25870 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
25880 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
25890 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
258a0 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
258b0 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
258c0 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
258d0 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
258e0 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
258f0 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
25900 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
25910 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
25920 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
25930 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
25940 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
25950 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
25960 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
25970 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
25980 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
25990 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
259a0 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
259b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
259c0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
259d0 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
259e0 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
259f0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
25a00 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
25a10 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
25a20 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b  MTSTATUS_SORT]++
25a30 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
25a40 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
25a50 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
25a60 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
25a70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
25a80 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
25a90 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
25aa0 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
25ab0 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
25ac0 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
25ad0 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
25ae0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
25af0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
25b00 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
25b10 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20  index is empty, 
25b20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
25b30 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68   to P2..** If th
25b40 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
25b50 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
25b60 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
25b70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a  he following .**
25b80 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
25b90 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25ba0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
25bb0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
25bc0 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
25bd0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
25be0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
25bf0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
25c00 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
25c10 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
25c20 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
25c30 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
25c40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
25c50 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
25c60 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
25c70 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
25c80 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
25c90 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
25ca0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25cb0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25cc0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25cd0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25ce0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25cf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
25d00 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
25d10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
25d20 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
25d30 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
25d40 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
25d50 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
25d60 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
25d70 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
25d80 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
25d90 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
25da0 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  nd(pC, &res);.  
25db0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72  }else{.    pCrsr
25dc0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
25dd0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
25de0 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
25df0 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
25e00 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
25e10 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
25e20 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
25e30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
25e40 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
25e50 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
25e60 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65   (u8)res;.  asse
25e70 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
25e80 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
25e90 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
25ea0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
25eb0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
25ec0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
25ed0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
25ee0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  }../* Opcode: Ne
25ef0 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  xt P1 P2 P3 P4 P
25f00 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
25f10 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
25f20 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
25f30 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
25f40 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
25f50 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
25f60 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
25f70 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
25f80 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
25f90 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
25fa0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
25fb0 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
25fc0 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
25fd0 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
25fe0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
25ff0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
26000 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70  *.** The Next op
26010 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
26020 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
26030 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
26040 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20  or.** OP_Rewind 
26050 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70  opcode used to p
26060 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73  osition the curs
26070 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74  or.  Next is not
26080 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66   allowed.** to f
26090 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65  ollow SeekLT, Se
260a0 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74  ekLE, or OP_Last
260b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
260c0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
260d0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
260e0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
260f0 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76  le.  P1 must hav
26100 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64  e.** been opened
26110 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f   prior to this o
26120 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f  pcode or the pro
26130 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75  gram will segfau
26140 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  lt..**.** The P3
26150 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
26160 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
26170 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
26180 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
26190 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
261a0 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
261b0 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
261c0 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
261d0 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
261e0 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
261f0 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
26200 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
26210 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
26220 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
26230 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
26240 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
26250 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
26260 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
26270 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
26280 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a  treeNext()..**.*
26290 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
262a0 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
262b0 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
262c0 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
262d0 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
262e0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
262f0 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
26300 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ented..**.** See
26310 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78   also: Prev, Nex
26320 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70  tIfOpen.*/./* Op
26330 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e  code: NextIfOpen
26340 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
26350 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
26360 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
26370 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74 68  e Next except th
26380 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  at if cursor P1 
26390 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69  is not.** open i
263a0 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f  t behaves a no-o
263b0 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  p..*/./* Opcode:
263c0 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20 50   Prev P1 P2 P3 P
263d0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20  4 P5.**.** Back 
263e0 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  up cursor P1 so 
263f0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
26400 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b  o the previous k
26410 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
26420 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
26430 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
26440 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20   is no previous 
26450 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
26460 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
26470 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
26480 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
26490 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
264a0 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73  ursor backup was
264b0 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
264c0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
264d0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a   to P2..**.**.**
264e0 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65   The Prev opcode
264f0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66   is only valid f
26500 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b  ollowing an Seek
26510 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a  LT, SeekLE, or.*
26520 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65  * OP_Last opcode
26530 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
26540 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50  n the cursor.  P
26550 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  rev is not allow
26560 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
26570 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
26580 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a  or OP_Rewind..**
26590 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
265a0 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
265b0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
265c0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
265d0 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74   If P1 is.** not
265e0 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62   open then the b
265f0 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
26600 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ined..**.** The 
26610 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
26620 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
26630 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
26640 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
26650 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
26660 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
26670 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
26680 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
26690 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
266a0 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
266b0 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
266c0 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
266d0 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
266e0 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
266f0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
26700 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
26710 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
26720 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
26730 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
26740 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29  3BtreePrevious()
26750 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
26760 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
26770 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
26780 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
26790 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
267a0 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
267b0 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
267c0 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
267d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49  /* Opcode: PrevI
267e0 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
267f0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
26800 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
26810 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65  t like Prev exce
26820 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
26830 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
26840 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
26850 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
26860 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b  OP_SorterNext: {
26870 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
26880 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
26890 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20   int res;..  pC 
268a0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
268b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
268c0 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
268d0 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
268e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
268f0 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26  erNext(db, pC, &
26900 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78  res);.  goto nex
26910 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f  t_tail;.case OP_
26920 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f  PrevIfOpen:    /
26930 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
26940 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20  P_NextIfOpen:   
26950 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
26960 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
26970 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  p1]==0 ) break;.
26980 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
26990 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65  h */.case OP_Pre
269a0 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
269b0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
269c0 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  ext:          /*
269d0 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
269e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
269f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26a00 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
26a10 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69   pOp->p5<ArraySi
26a20 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20  ze(p->aCounter) 
26a30 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26a40 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72  sr[pOp->p1];.  r
26a50 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  es = pOp->p3;.  
26a60 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
26a70 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
26a80 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
26a90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26aa0 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->pCursor );.  a
26ab0 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c  ssert( res==0 ||
26ac0 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e   (res==1 && pC->
26ad0 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20  isTable==0) );. 
26ae0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d   testcase( res==
26af0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
26b00 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
26b10 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  ext || pOp->p4.x
26b20 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
26b30 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
26b40 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26b50 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
26b60 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
26b70 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
26b80 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72  vious );.  asser
26b90 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26ba0 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c  OP_NextIfOpen ||
26bb0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
26bc0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
26bd0 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
26be0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
26bf0 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70  _PrevIfOpen || p
26c00 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
26c10 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
26c20 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68  vious);..  /* Th
26c30 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
26c40 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
26c50 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
26c60 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a   and Rewind..  *
26c70 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
26c80 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
26c90 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65  fter SeekLT, See
26ca0 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a  kLE, and Last. *
26cb0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
26cc0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
26cd0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
26ce0 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20  =OP_NextIfOpen. 
26cf0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
26d00 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c  kOp==OP_SeekGT |
26d10 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
26d20 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c  _SeekGE.       |
26d30 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
26d40 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73  _Rewind || pC->s
26d50 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29  eekOp==OP_Found)
26d60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26d70 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
26d80 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
26d90 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20  =OP_PrevIfOpen. 
26da0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
26db0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c  kOp==OP_SeekLT |
26dc0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
26dd0 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c  _SeekLE.       |
26de0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
26df0 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d  _Last );..  rc =
26e00 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
26e10 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
26e20 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a  res);.next_tail:
26e30 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
26e40 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
26e50 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
26e60 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20  ken(res==0,2);. 
26e70 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
26e80 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
26e90 20 30 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   0;.    pc = pOp
26ea0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d  ->p2 - 1;.    p-
26eb0 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
26ec0 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  5]++;.#ifdef SQL
26ed0 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
26ee0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
26ef0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  t++;.#endif.  }e
26f00 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  lse{.    pC->nul
26f10 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  lRow = 1;.  }.  
26f20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
26f30 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
26f40 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72  Opcode: IdxInser
26f50 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  t P1 P2 P3 * P5.
26f60 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
26f70 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
26f80 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
26f90 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
26fa0 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
26fb0 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
26fc0 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
26fd0 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
26fe0 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
26ff0 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44  the index P1.  D
27000 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
27010 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20  y is nil..**.** 
27020 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61  P3 is a flag tha
27030 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e  t provides a hin
27040 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20  t to the b-tree 
27050 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a  layer that this.
27060 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b  ** insert is lik
27070 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
27080 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  end..**.** If P5
27090 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
270a0 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c  NCHANGE bit set,
270b0 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
270c0 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69   counter is.** i
270d0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
270e0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
270f0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
27100 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c  CHANGE bit is cl
27110 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  ear,.** then the
27120 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
27130 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a  is unchanged..**
27140 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
27150 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
27160 52 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20  RESULT bit set, 
27170 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
27180 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73  must have.** jus
27190 74 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f  t done a seek to
271a0 20 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20   the spot where 
271b0 74 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73  the new entry is
271c0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
271d0 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76  .** This flag av
271e0 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78  oids doing an ex
271f0 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20  tra seek..**.** 
27200 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
27210 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
27220 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
27230 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
27240 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
27250 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
27260 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
27270 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20  erInsert:       
27280 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f  /* in2 */.case O
27290 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
272a0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
272b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
272c0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
272d0 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  rsr;.  int nKey;
272e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
272f0 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Key;..  assert( 
27300 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27310 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
27320 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
27330 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27340 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
27350 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
27360 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
27370 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
27380 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e  Insert) );.  pIn
27390 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
273a0 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  2];.  assert( pI
273b0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
273c0 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20  Blob );.  pCrsr 
273d0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
273e0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
273f0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
27400 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
27410 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
27420 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
27430 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
27440 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
27450 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72  b(pIn2);.  if( r
27460 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
27470 20 20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72      if( isSorter
27480 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20 72 63  (pC) ){.      rc
27490 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
274a0 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49  rterWrite(pC, pI
274b0 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  n2);.    }else{.
274c0 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e        nKey = pIn
274d0 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79  2->n;.      zKey
274e0 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20   = pIn2->z;.    
274f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27500 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c  reeInsert(pCrsr,
27510 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c   zKey, nKey, "",
27520 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20   0, 0, pOp->p3, 
27530 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70  .          ((pOp
27540 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
27550 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
27560 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
27570 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a  0).          );.
27580 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
27590 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
275a0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  ==0 );.      pC-
275b0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
275c0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
275d0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
275e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
275f0 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
27600 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
27610 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a   key=r[P2@P3].**
27620 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
27630 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
27640 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
27650 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
27660 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
27670 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
27680 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
27690 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
276a0 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
276b0 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
276c0 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
276d0 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
276e0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
276f0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
27700 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
27710 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
27720 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
27730 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27740 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
27750 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d  +pOp->p3<=(p->nM
27760 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
27770 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
27780 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27790 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
277a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
277b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
277c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
277d0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
277e0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
277f0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73  pCrsr!=0 );.  as
27800 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
27810 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
27820 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
27830 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
27840 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e  16)pOp->p3;.  r.
27850 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
27860 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
27870 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65  [pOp->p2];.#ifde
27880 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
27890 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
278a0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
278b0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
278c0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
278d0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
278e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
278f0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
27900 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
27910 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
27920 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
27930 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  res==0 ){.    rc
27940 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
27950 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20  elete(pCrsr);.  
27960 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  }.  assert( pC->
27970 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
27980 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  0 );.  pC->cache
27990 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
279a0 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
279b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
279c0 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
279d0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
279e0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
279f0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
27a00 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
27a10 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
27a20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
27a30 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
27a40 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
27a50 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
27a60 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
27a70 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
27a80 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
27a90 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
27aa0 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
27ab0 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
27ac0 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
27ad0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
27ae0 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
27af0 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
27b00 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
27b10 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
27b20 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73  ease */.  BtCurs
27b30 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62  or *pCrsr;.  Vdb
27b40 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
27b50 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73  64 rowid;..  ass
27b60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27b70 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27b80 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
27b90 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27ba0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
27bb0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
27bc0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
27bd0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
27be0 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
27bf0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 61   = MEM_Null;.  a
27c00 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
27c10 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  le==0 );.  asser
27c20 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
27c30 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 2f  oveto==0 );..  /
27c40 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73  * sqlite3VbeCurs
27c50 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20  orRestore() can 
27c60 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65  only fail if the
27c70 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e   record has been
27c80 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75   deleted.  ** ou
27c90 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65  t from under the
27ca0 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77   cursor.  That w
27cb0 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e  ill never happen
27cc0 64 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69  d for an IdxRowi
27cd0 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20 68  d.  ** opcode, h
27ce0 65 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28 29  ence the NEVER()
27cf0 20 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68 65   arround the che
27d00 63 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e  ck of the return
27d10 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 72   value..  */.  r
27d20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
27d30 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
27d40 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
27d50 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
27d60 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27d70 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21  _error;..  if( !
27d80 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
27d90 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f     rowid = 0;  /
27da0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
27db0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
27dc0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
27dd0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
27de0 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
27df0 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64  b, pCrsr, &rowid
27e00 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
27e10 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
27e20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
27e30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
27e40 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
27e50 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75 74   rowid;.    pOut
27e60 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
27e70 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  t;.  }.  break;.
27e80 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
27e90 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
27ea0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
27eb0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
27ec0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
27ed0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
27ee0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
27ef0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
27f00 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
27f10 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
27f20 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
27f30 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
27f40 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
27f50 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
27f60 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
27f70 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
27f80 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
27f90 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
27fa0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
27fb0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
27fc0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
27fd0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
27fe0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
27ff0 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
28000 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
28010 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
28020 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
28030 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
28040 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50   Opcode: IdxGT P
28050 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
28060 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
28070 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
28080 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
28090 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
280a0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
280b0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
280c0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
280d0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
280e0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
280f0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
28100 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
28110 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
28120 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
28130 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
28140 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
28150 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
28160 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
28170 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
28180 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
28190 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
281a0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
281b0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
281c0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
281d0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
281e0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
281f0 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
28200 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
28210 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
28220 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
28230 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
28240 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
28250 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
28260 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
28270 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
28280 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
28290 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
282a0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
282b0 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
282c0 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
282d0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
282e0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
282f0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
28300 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
28310 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
28320 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
28330 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
28340 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
28350 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
28360 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
28370 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
28380 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
28390 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
283a0 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31  Opcode: IdxLE P1
283b0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
283c0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
283d0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
283e0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
283f0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
28400 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
28410 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
28420 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
28430 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
28440 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
28450 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
28460 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
28470 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
28480 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
28490 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
284a0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
284b0 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
284c0 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
284d0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
284e0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
284f0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
28500 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
28510 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  e then jump.** t
28520 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20  o P2. Otherwise 
28530 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
28540 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
28550 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
28560 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20  _IdxLE:         
28570 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
28580 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20   OP_IdxGT:      
28590 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
285a0 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
285b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
285c0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
285d0 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d    {       /* jum
285e0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
285f0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
28600 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
28610 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
28620 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28630 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28640 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28650 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28660 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28670 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28680 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
28690 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
286a0 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
286b0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
286c0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
286d0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
286e0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
286f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28700 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
28710 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
28720 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
28730 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
28740 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
28750 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
28760 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
28770 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
28780 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
28790 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
287a0 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
287b0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
287c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
287d0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
287e0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
287f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
28800 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
28810 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
28820 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
28830 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
28840 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28850 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
28860 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
28870 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
28880 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
28890 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
288a0 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
288b0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
288c0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
288d0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
288e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
288f0 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
28900 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73  db, pC, &r, &res
28910 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
28920 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
28930 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
28940 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
28950 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
28960 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
28970 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
28980 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
28990 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
289a0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
289b0 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
289c0 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
289d0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
289e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
289f0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
28a00 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
28a10 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
28a20 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
28a30 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a  Taken(res>0,2);.
28a40 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
28a50 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
28a60 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61  - 1 ;.  }.  brea
28a70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28a80 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50   Destroy P1 P2 P
28a90 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  3 * *.**.** Dele
28aa0 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74  te an entire dat
28ab0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
28ac0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
28ad0 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61  page in the data
28ae0 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20  base.** file is 
28af0 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a  given by P1..**.
28b00 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
28b10 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20  ng destroyed is 
28b20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
28b30 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d  base file if P3=
28b40 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31  =0.  If.** P3==1
28b50 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
28b60 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
28b70 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
28b80 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
28b90 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
28ba0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
28bb0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
28bc0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
28bd0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f  E..**.** If AUTO
28be0 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65  VACUUM is enable
28bf0 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73  d then it is pos
28c00 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
28c10 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  er root page.** 
28c20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69  might be moved i
28c30 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65  nto the newly de
28c40 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20  leted root page 
28c50 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
28c60 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   all.** root pag
28c70 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74  es contiguous at
28c80 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
28c90 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  f the database. 
28ca0 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76   The former.** v
28cb0 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74  alue of the root
28cc0 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64   page that moved
28cd0 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66   - its value bef
28ce0 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63  ore the move occ
28cf0 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74  urred -.** is st
28d00 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
28d10 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65   P2.  If no page
28d20 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61   .** movement wa
28d30 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61  s required (beca
28d40 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65  use the table be
28d50 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20  ing dropped was 
28d60 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20  already .** the 
28d70 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
28d80 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
28d90 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
28da0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
28db0 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
28dc0 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65   is disabled the
28dd0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
28de0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
28df0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
28e00 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65  o: Clear.*/.case
28e10 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20   OP_Destroy: {  
28e20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
28e30 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
28e40 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62  Moved;.  int iDb
28e50 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
28e60 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
28e70 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
28e80 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64  EM_Null;.  if( d
28e90 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64  b->nVdbeRead > d
28ea0 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29  b->nVDestroy+1 )
28eb0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
28ec0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
28ed0 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
28ee0 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
28ef0 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
28f00 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
28f10 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
28f20 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
28f30 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
28f40 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
28f50 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
28f60 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
28f70 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
28f80 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
28f90 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
28fa0 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
28fb0 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
28fc0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
28fd0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
28fe0 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
28ff0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
29000 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
29010 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
29020 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
29030 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
29040 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
29050 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
29060 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
29070 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
29080 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
29090 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
290a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
290b0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
290c0 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
290d0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
290e0 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
290f0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
29100 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
29110 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
29120 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
29130 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
29140 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
29150 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
29160 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
29170 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
29180 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
29190 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
291a0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
291b0 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
291c0 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
291d0 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
291e0 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
291f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
29200 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
29210 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
29220 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
29230 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
29240 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
29250 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
29260 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
29270 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
29280 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
29290 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
292a0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
292b0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
292c0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
292d0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
292e0 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
292f0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
29300 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
29310 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
29320 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
29330 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
29340 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
29350 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
29360 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
29370 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
29380 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
29390 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
293a0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
293b0 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
293c0 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
293d0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
293e0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
293f0 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
29400 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
29410 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
29420 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
29430 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
29440 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
29450 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
29460 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
29470 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
29480 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
29490 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
294a0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
294b0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
294c0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
294d0 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
294e0 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
294f0 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
29500 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
29510 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
29520 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
29530 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
29540 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
29550 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
29560 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
29570 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
29580 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
29590 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
295a0 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
295b0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
295c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
295d0 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
295e0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
295f0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
29600 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29610 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72  ode: ResetSorter
29620 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
29630 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
29640 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65  tents from the e
29650 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f  phemeral table o
29660 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74  r sorter.** that
29670 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73   is open on curs
29680 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P1..**.** Thi
29690 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f  s opcode only wo
296a0 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  rks for cursors 
296b0 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67  used for sorting
296c0 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77   and.** opened w
296d0 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ith OP_OpenEphem
296e0 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  eral or OP_Sorte
296f0 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rOpen..*/.case O
29700 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b  P_ResetSorter: {
29710 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
29720 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70  C;. .  assert( p
29730 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29740 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
29750 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
29760 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29770 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
29780 20 20 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65    if( pC->pSorte
29790 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
297a0 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
297b0 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29  db, pC->pSorter)
297c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
297d0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68  ssert( pC->isEph
297e0 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63  emeral );.    rc
297f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
29800 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f  learTableOfCurso
29810 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  r(pC->pCursor);.
29820 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
29830 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
29840 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  eTable P1 P2 * *
29850 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
29860 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
29870 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
29880 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
29890 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
298a0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
298b0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
298c0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
298d0 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
298e0 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
298f0 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
29900 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
29910 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
29920 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
29930 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
29940 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
29950 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
29960 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
29970 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
29980 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
29990 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
299a0 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
299b0 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
299c0 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
299d0 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
299e0 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
299f0 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
29a00 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
29a10 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
29a20 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
29a30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
29a40 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
29a50 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
29a60 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
29a70 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
29a80 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
29a90 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
29aa0 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
29ab0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
29ac0 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
29ad0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
29ae0 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
29af0 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
29b00 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
29b10 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
29b20 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
29b30 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
29b40 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
29b50 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
29b60 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
29b70 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
29b80 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
29b90 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
29ba0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73  rerelease */.cas
29bb0 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
29bc0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
29bd0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
29be0 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
29bf0 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62   int flags;.  Db
29c00 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d   *pDb;..  pgno =
29c10 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
29c20 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
29c30 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
29c40 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
29c50 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
29c60 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
29c70 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
29c80 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
29c90 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
29ca0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
29cb0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
29cc0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
29cd0 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
29ce0 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
29cf0 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
29d00 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
29d10 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
29d20 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
29d30 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b  = BTREE_BLOBKEY;
29d40 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
29d50 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
29d60 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
29d70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70  gno, flags);.  p
29d80 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
29d90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
29da0 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
29db0 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
29dc0 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
29dd0 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
29de0 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
29df0 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
29e00 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
29e10 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
29e20 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
29e30 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
29e40 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
29e50 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
29e60 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
29e70 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
29e80 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
29e90 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
29ea0 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
29eb0 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
29ec0 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
29ed0 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
29ee0 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
29ef0 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
29f00 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
29f10 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
29f20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
29f30 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
29f40 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
29f50 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
29f60 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
29f70 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
29f80 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
29f90 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
29fa0 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
29fb0 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
29fc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
29fd0 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
29fe0 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
29ff0 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
2a000 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
2a010 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
2a020 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
2a030 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
2a040 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
2a050 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
2a060 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
2a070 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2a080 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
2a090 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
2a0a0 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20  emaLoaded) );.  
2a0b0 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20  /* Used to be a 
2a0c0 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b  conditional */ {
2a0d0 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53  .    zMaster = S
2a0e0 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
2a0f0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
2a100 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
2a110 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
2a120 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  p1;.    initData
2a130 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
2a140 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71  zErrMsg;.    zSq
2a150 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
2a160 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
2a170 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
2a180 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
2a190 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20  %q'.%s WHERE %s 
2a1a0 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c  ORDER BY rowid",
2a1b0 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
2a1c0 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73  iDb].zName, zMas
2a1d0 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
2a1e0 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
2a1f0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
2a200 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
2a210 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
2a220 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
2a230 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
2a240 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2a250 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
2a260 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
2a270 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2a280 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
2a290 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
2a2a0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2a2b0 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
2a2c0 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
2a2d0 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
2a2e0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2a2f0 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
2a300 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
2a310 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
2a320 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
2a330 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
2a340 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
2a350 63 20 29 20 73 71 6c 69 74 65 33 52 65 73 65 74  c ) sqlite3Reset
2a360 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
2a370 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66  ection(db);.  if
2a380 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ( rc==SQLITE_NOM
2a390 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  EM ){.    goto n
2a3a0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65  o_mem;.  }.  bre
2a3b0 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65  ak;  .}..#if !de
2a3c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a3d0 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70  T_ANALYZE)./* Op
2a3e0 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73  code: LoadAnalys
2a3f0 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  is P1 * * * *.**
2a400 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
2a410 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
2a420 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
2a430 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
2a440 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
2a450 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
2a460 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
2a470 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
2a480 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
2a490 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
2a4a0 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
2a4b0 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
2a4c0 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
2a4d0 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
2a4e0 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74  ysis: {.  assert
2a4f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2a500 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2a510 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2a520 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
2a530 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72  , pOp->p1);.  br
2a540 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
2a550 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
2a560 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2a570 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2a580 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a  DropTable P1 * *
2a590 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2a5a0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2a5b0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2a5c0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2a5d0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2a5e0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20   table named P4 
2a5f0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2a600 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2a610 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a  after a table.**
2a620 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2a630 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2a640 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2a650 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2a660 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2a670 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2a680 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2a690 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2a6a0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2a6b0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2a6c0 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
2a6d0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2a6e0 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
2a6f0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2a700 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2a710 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
2a720 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
2a730 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2a740 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2a750 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2a760 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2a770 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
2a780 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2a790 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2a7a0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2a7b0 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
2a7c0 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2a7d0 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2a7e0 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69  roy opcode).** i
2a7f0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2a800 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2a810 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2a820 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2a830 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2a840 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2a850 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
2a860 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
2a870 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
2a880 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
2a890 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2a8a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a8b0 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
2a8c0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2a8d0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2a8e0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2a8f0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2a900 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2a910 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
2a920 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2a930 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2a940 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
2a950 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
2a960 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2a970 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2a980 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
2a990 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
2a9a0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2a9b0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2a9c0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2a9d0 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2a9e0 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2a9f0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
2aa00 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
2aa10 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2aa20 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
2aa30 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2aa40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2aa50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2aa60 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2aa70 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
2aa80 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
2aa90 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20  3 * P5.**.** Do 
2aaa0 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
2aab0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
2aac0 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
2aad0 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
2aae0 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
2aaf0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2ab00 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
2ab10 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
2ab20 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
2ab30 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
2ab40 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
2ab50 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
2ab60 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
2ab70 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
2ab80 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
2ab90 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
2aba0 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
2abb0 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
2abc0 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
2abd0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
2abe0 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
2abf0 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
2ac00 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
2ac10 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
2ac20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
2ac30 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
2ac40 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
2ac50 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
2ac60 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
2ac70 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
2ac80 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
2ac90 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  er.** stored in 
2aca0 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
2acb0 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  1), reg(P1+2), .
2acc0 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50  ...  There are P
2acd0 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61  2 tables.** tota
2ace0 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  l..**.** If P5 i
2acf0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
2ad00 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
2ad10 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
2ad20 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
2ad30 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
2ad40 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
2ad50 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2ad60 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
2ad70 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
2ad80 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
2ad90 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
2ada0 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
2adb0 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
2adc0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
2add0 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
2ade0 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
2adf0 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
2ae00 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
2ae10 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
2ae20 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
2ae30 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
2ae40 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
2ae50 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2ae60 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  er */.  int nErr
2ae70 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
2ae80 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
2ae90 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
2aea0 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
2aeb0 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
2aec0 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
2aed0 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
2aee0 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
2aef0 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
2af00 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
2af10 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2af20 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
2af30 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
2af40 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20  rt( nRoot>0 );. 
2af50 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33   aRoot = sqlite3
2af60 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
2af70 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f  sizeof(int)*(nRo
2af80 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61  ot+1) );.  if( a
2af90 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Root==0 ) goto n
2afa0 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  o_mem;.  assert(
2afb0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2afc0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
2afd0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2afe0 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
2aff0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2b000 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2b010 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
2b020 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
2b030 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
2b040 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
2b050 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
2b060 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b070 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f   for(j=0; j<nRoo
2b080 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f  t; j++){.    aRo
2b090 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c  ot[j] = (int)sql
2b0a0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
2b0b0 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a  (&pIn1[j]);.  }.
2b0c0 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a    aRoot[j] = 0;.
2b0d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b0e0 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  5<db->nDb );.  a
2b0f0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2b100 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2b110 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20  pOp->p5) );.  z 
2b120 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
2b130 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d  tegrityCheck(db-
2b140 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42  >aDb[pOp->p5].pB
2b150 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c  t, aRoot, nRoot,
2b160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b180 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e    (int)pnErr->u.
2b190 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  i, &nErr);.  sql
2b1a0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61  ite3DbFree(db, a
2b1b0 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e  Root);.  pnErr->
2b1c0 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73  u.i -= nErr;.  s
2b1d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2b1e0 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66  Null(pIn1);.  if
2b1f0 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20  ( nErr==0 ){.   
2b200 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b   assert( z==0 );
2b210 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d  .  }else if( z==
2b220 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  0 ){.    goto no
2b230 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _mem;.  }else{. 
2b240 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2b250 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c  mSetStr(pIn1, z,
2b260 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
2b270 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
2b280 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
2b290 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
2b2a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2b2b0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49  hangeEncoding(pI
2b2c0 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
2b2d0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2b2e0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2b2f0 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20  INTEGRITY_CHECK 
2b300 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  */../* Opcode: R
2b310 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a  owSetAdd P1 P2 *
2b320 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b330 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b  :  rowset(P1)=r[
2b340 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74  P2].**.** Insert
2b350 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
2b360 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73  ue held by regis
2b370 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f  ter P2 into a bo
2b380 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  olean index.** h
2b390 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
2b3a0 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73  P1..**.** An ass
2b3b0 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20  ertion fails if 
2b3c0 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P2 is not an int
2b3d0 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
2b3e0 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20  _RowSetAdd: {   
2b3f0 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
2b400 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2b410 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2b420 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2b430 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
2b440 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
2b450 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
2b460 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2b470 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2b480 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2b490 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
2b4a0 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
2b4b0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2b4c0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
2b4d0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2b4e0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
2b4f0 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
2b500 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69  owSet, pIn2->u.i
2b510 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2b520 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2b530 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
2b540 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
2b550 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29  r[P3]=rowset(P1)
2b560 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  .**.** Extract t
2b570 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
2b580 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69  e from boolean i
2b590 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20  ndex P1 and put 
2b5a0 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a  that value into.
2b5b0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  ** register P3. 
2b5c0 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20   Or, if boolean 
2b5d0 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74  index P1 is init
2b5e0 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61  ially empty, lea
2b5f0 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67  ve P3.** unchang
2b600 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69  ed and jump to i
2b610 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
2b620 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2b630 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  Read: {       /*
2b640 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33   jump, in1, out3
2b650 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a   */.  i64 val;..
2b660 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2b670 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
2b680 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2b690 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20  M_RowSet)==0 .  
2b6a0 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
2b6b0 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tNext(pIn1->u.pR
2b6c0 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a  owSet, &val)==0.
2b6d0 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
2b6e0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
2b6f0 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
2b700 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2b710 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70  ull(pIn1);.    p
2b720 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2b730 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2b740 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d 65 6c  aken(1,2);.  }el
2b750 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c  se{.    /* A val
2b760 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72  ue was pulled fr
2b770 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  om the index */.
2b780 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2b790 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2b7a0 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
2b7b0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2b7c0 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d 0a 20  aken(0,2);.  }. 
2b7d0 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
2b7e0 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
2b7f0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
2b800 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
2b810 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2b820 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28  r[P3] in rowset(
2b830 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P1) goto P2.**.*
2b840 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
2b850 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64   assumed to hold
2b860 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
2b870 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69  r value. If regi
2b880 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61  ster P1.** conta
2b890 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  ins a RowSet obj
2b8a0 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77  ect and that Row
2b8b0 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61  Set object conta
2b8c0 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ins.** the value
2b8d0 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d   held in P3, jum
2b8e0 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  p to register P2
2b8f0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73  . Otherwise, ins
2b900 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  ert the.** integ
2b910 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68  er in P3 into th
2b920 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e  e RowSet and con
2b930 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a  tinue on to the.
2b940 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a  ** next opcode..
2b950 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74  **.** The RowSet
2b960 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d   object is optim
2b970 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73  ized for the cas
2b980 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69  e where successi
2b990 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e  ve sets.** of in
2b9a0 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61  tegers, where ea
2b9b0 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
2b9c0 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45  no duplicates. E
2b9d0 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61  ach set.** of va
2b9e0 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69  lues is identifi
2b9f0 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
2ba00 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
2ba10 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
2ba20 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
2ba30 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20  inal set P4=-1. 
2ba40 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68   P4 must be eith
2ba50 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d  er -1 or.** non-
2ba60 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e  negative.  For n
2ba70 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
2ba80 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68  es of P4 only th
2ba90 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74  e lower 4.** bit
2baa0 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e  s are significan
2bab0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c  t..**.** This al
2bac0 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  lows optimizatio
2bad0 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d  ns: (a) when P4=
2bae0 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  =0 there is no n
2baf0 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74  eed to test.** t
2bb00 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74  he rowset object
2bb10 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69   for P3, as it i
2bb20 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74  s guaranteed not
2bb30 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a   to contain it,.
2bb40 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d  ** (b) when P4==
2bb50 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  -1 there is no n
2bb60 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68  eed to insert th
2bb70 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77  e value, as it w
2bb80 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20  ill.** never be 
2bb90 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20  tested for, and 
2bba0 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65  (c) when a value
2bbb0 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
2bbc0 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73   set X is.** ins
2bbd0 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20  erted, there is 
2bbe0 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63  no need to searc
2bbf0 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  h to see if the 
2bc00 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a  same value was.*
2bc10 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  * previously ins
2bc20 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
2bc30 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20   set X (only if 
2bc40 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  it was previousl
2bc50 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73  y.** inserted as
2bc60 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74   part of some ot
2bc70 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73  her set)..*/.cas
2bc80 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a  e OP_RowSetTest:
2bc90 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
2bca0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2bcb0 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
2bcc0 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78  t iSet;.  int ex
2bcd0 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  ists;..  pIn1 = 
2bce0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2bcf0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
2bd00 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20  Op->p3];.  iSet 
2bd10 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61  = pOp->p4.i;.  a
2bd20 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
2bd30 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20  gs&MEM_Int );.. 
2bd40 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
2bd50 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74  anything other t
2bd60 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a  han a rowset obj
2bd70 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  ect in memory ce
2bd80 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65  ll P1,.  ** dele
2bd90 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e  te it now and in
2bda0 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68  itialize P1 with
2bdb0 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74   an empty rowset
2bdc0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  .  */.  if( (pIn
2bdd0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2bde0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2bdf0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2be00 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2be10 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2be20 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2be30 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2be40 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  mem;.  }..  asse
2be50 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
2be60 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
2be70 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20  ssert( iSet==-1 
2be80 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20  || iSet>=0 );.  
2be90 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20  if( iSet ){.    
2bea0 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33  exists = sqlite3
2beb0 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d  RowSetTest(pIn1-
2bec0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74  >u.pRowSet, iSet
2bed0 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2bee0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2bef0 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  n(exists!=0,2);.
2bf00 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
2bf10 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2bf20 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
2bf30 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
2bf40 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29  .  if( iSet>=0 )
2bf50 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77  {.    sqlite3Row
2bf60 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
2bf70 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d  u.pRowSet, pIn3-
2bf80 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
2bf90 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
2bfa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2bfb0 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
2bfc0 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
2bfd0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
2bfe0 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72  cute the trigger
2bff0 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20   program passed 
2c000 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53  as P4 (type P4_S
2c010 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a  UBPROGRAM). .**.
2c020 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74  ** P1 contains t
2c030 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2c040 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2c050 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
2c060 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a  first memory .**
2c070 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61   cell in an arra
2c080 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64  y of values used
2c090 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   as arguments to
2c0a0 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
2c0b0 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e  . P2 .** contain
2c0c0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f  s the address to
2c0d0 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20   jump to if the 
2c0e0 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f  sub-program thro
2c0f0 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a  ws an IGNORE .**
2c100 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67   exception using
2c110 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e   the RAISE() fun
2c120 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20  ction. Register 
2c130 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
2c140 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61  address .** of a
2c150 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
2c160 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74  this (the parent
2c170 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65  ) VM that is use
2c180 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68  d to allocate th
2c190 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71  e .** memory req
2c1a0 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62  uired by the sub
2c1b0 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65  -vdbe at runtime
2c1c0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
2c1d0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56  pointer to the V
2c1e0 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  M containing the
2c1f0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2c200 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2c210 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2c220 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61  recursive progra
2c230 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20  m invocation is 
2c240 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65  enabled..*/.case
2c250 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20   OP_Program: {  
2c260 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2c270 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
2c280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
2c290 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72  mber of memory r
2c2a0 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62  egisters for sub
2c2b0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
2c2c0 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  t nByte;        
2c2d0 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
2c2e0 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  f runtime space 
2c2f0 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62  required for sub
2c300 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65  -program */.  Me
2c310 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20  m *pRt;         
2c320 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
2c330 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75  r to allocate ru
2c340 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20  ntime space */. 
2c350 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2c360 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
2c370 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f   to iterate thro
2c380 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ugh memory cells
2c390 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b   */.  Mem *pEnd;
2c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c3b0 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c   Last memory cel
2c3c0 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a  l in new array *
2c3d0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
2c3e0 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  Frame;      /* N
2c3f0 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f  ew vdbe frame to
2c400 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20   execute in */. 
2c410 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
2c420 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d  ogram;   /* Sub-
2c430 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
2c440 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b  te */.  void *t;
2c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c460 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66  /* Token identif
2c470 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a  ying trigger */.
2c480 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f  .  pProgram = pO
2c490 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a  p->p4.pProgram;.
2c4a0 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f    pRt = &aMem[pO
2c4b0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2c4c0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e  ( pProgram->nOp>
2c4d0 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20  0 );.  .  /* If 
2c4e0 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63  the p5 flag is c
2c4f0 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72  lear, then recur
2c500 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
2c510 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a  of triggers is .
2c520 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f    ** disabled fo
2c530 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
2c540 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73  atibility (p5 is
2c550 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62   set if this sub
2c560 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73  -program.  ** is
2c570 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65   really a trigge
2c580 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e  r, not a foreign
2c590 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64   key action, and
2c5a0 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20   the flag set.  
2c5b0 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62  ** and cleared b
2c5c0 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65  y the "PRAGMA re
2c5d0 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
2c5e0 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65  " command is cle
2c5f0 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ar)..  ** .  ** 
2c600 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20  It is recursive 
2c610 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
2c620 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53  iggers, at the S
2c630 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69  QL level, that i
2c640 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
2c650 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20  . In some cases 
2c660 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  a single trigger
2c670 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f   may generate mo
2c680 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a  re than one .  *
2c690 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66  * SubProgram (if
2c6a0 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79   the trigger may
2c6b0 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74   be executed wit
2c6c0 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  h more than one 
2c6d0 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20  different .  ** 
2c6e0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
2c6f0 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72  rithm). SubProgr
2c700 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73  am structures as
2c710 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a  sociated with a.
2c720 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67    ** single trig
2c730 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65  ger all have the
2c740 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
2c750 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74  the SubProgram.t
2c760 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61  oken .  ** varia
2c770 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70  ble.  */.  if( p
2c780 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20  Op->p5 ){.    t 
2c790 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2c7a0 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  n;.    for(pFram
2c7b0 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2c7c0 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74  ame && pFrame->t
2c7d0 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d  oken!=t; pFrame=
2c7e0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
2c7f0 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65  ;.    if( pFrame
2c800 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20   ) break;.  }.. 
2c810 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d   if( p->nFrame>=
2c820 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
2c830 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
2c840 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63  DEPTH] ){.    rc
2c850 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2c860 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2c870 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2c880 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79  g, db, "too many
2c890 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
2c8a0 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
2c8b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
2c8c0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
2c8d0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2c8e0 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
2c8f0 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
2c900 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
2c910 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
2c920 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
2c930 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
2c940 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
2c950 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
2c960 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
2c970 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
2c980 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
2c990 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
2c9a0 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
2c9b0 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
2c9c0 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
2c9d0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
2c9e0 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
2c9f0 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30  gs&MEM_Frame)==0
2ca00 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
2ca10 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
2ca20 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
2ca30 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
2ca40 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
2ca50 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
2ca60 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
2ca70 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
2ca80 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
2ca90 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
2caa0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
2cab0 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
2cac0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
2cad0 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
2cae0 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
2caf0 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
2cb00 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
2cb10 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
2cb20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
2cb30 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
2cb40 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2cb50 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f  ;.    nByte = RO
2cb60 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
2cb70 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  Frame)).        
2cb80 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73        + nMem * s
2cb90 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20  izeof(Mem).     
2cba0 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
2cbb0 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65  ram->nCsr * size
2cbc0 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29  of(VdbeCursor *)
2cbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2cbe0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65   pProgram->nOnce
2cbf0 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20   * sizeof(u8);. 
2cc00 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69     pFrame = sqli
2cc10 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
2cc20 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
2cc30 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20  if( !pFrame ){. 
2cc40 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
2cc50 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2cc60 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2cc70 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d  e(pRt);.    pRt-
2cc80 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61  >flags = MEM_Fra
2cc90 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70  me;.    pRt->u.p
2cca0 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
2ccb0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d  .    pFrame->v =
2ccc0 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e   p;.    pFrame->
2ccd0 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d  nChildMem = nMem
2cce0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
2ccf0 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72  hildCsr = pProgr
2cd00 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46  am->nCsr;.    pF
2cd10 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  rame->pc = pc;. 
2cd20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20     pFrame->aMem 
2cd30 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
2cd40 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d  Frame->nMem = p-
2cd50 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >nMem;.    pFram
2cd60 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70  e->apCsr = p->ap
2cd70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
2cd80 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43  >nCursor = p->nC
2cd90 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d  ursor;.    pFram
2cda0 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  e->aOp = p->aOp;
2cdb0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70  .    pFrame->nOp
2cdc0 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70   = p->nOp;.    p
2cdd0 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70  Frame->token = p
2cde0 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
2cdf0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63      pFrame->aOnc
2ce00 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65  eFlag = p->aOnce
2ce10 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65  Flag;.    pFrame
2ce20 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->nOnceFlag = p-
2ce30 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66 64  >nOnceFlag;.#ifd
2ce40 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2ce50 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
2ce60 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45  .    pFrame->anE
2ce70 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b  xec = p->anExec;
2ce80 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e  .#endif..    pEn
2ce90 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
2cea0 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
2ceb0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
2cec0 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
2ced0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
2cee0 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
2cef0 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
2cf00 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
2cf10 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
2cf20 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
2cf30 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
2cf40 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
2cf50 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
2cf60 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2cf70 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
2cf80 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
2cf90 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73  ldMem );.    ass
2cfa0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2cfb0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
2cfc0 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
2cfd0 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65  sert( pc==pFrame
2cfe0 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
2cff0 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
2d000 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
2d010 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
2d020 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
2d030 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46   lastRowid;.  pF
2d040 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
2d050 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46  p->nChange;.  pF
2d060 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20  rame->nDbChange 
2d070 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65  = p->db->nChange
2d080 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
2d090 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
2d0a0 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
2d0b0 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64  Mem = aMem = &Vd
2d0c0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2d0d0 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65  e)[-1];.  p->nMe
2d0e0 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2d0f0 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2d100 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2d110 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2d120 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2d130 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2d140 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d  p->nMem+1];.  p-
2d150 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
2d160 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
2d170 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
2d180 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65  >nOp;.  p->aOnce
2d190 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d  Flag = (u8 *)&p-
2d1a0 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f  >apCsr[p->nCurso
2d1b0 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c  r];.  p->nOnceFl
2d1c0 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ag = pProgram->n
2d1d0 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c  Once;.#ifdef SQL
2d1e0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2d1f0 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e  SCANSTATUS.  p->
2d200 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64  anExec = 0;.#end
2d210 69 66 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20  if.  pc = -1;.  
2d220 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46  memset(p->aOnceF
2d230 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65  lag, 0, p->nOnce
2d240 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b  Flag);..  break;
2d250 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
2d260 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
2d270 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2d280 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
2d290 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
2d2a0 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
2d2b0 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
2d2c0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
2d2d0 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
2d2e0 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
2d2f0 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
2d300 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
2d310 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
2d320 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
2d330 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
2d340 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
2d350 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
2d360 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
2d370 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
2d380 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
2d390 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
2d3a0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
2d3b0 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
2d3c0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
2d3d0 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
2d3e0 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
2d3f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2d400 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
2d410 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2d420 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
2d430 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
2d440 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
2d450 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2d460 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
2d470 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
2d480 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
2d490 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2d4a0 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46    Mem *pIn;.  pF
2d4b0 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
2d4c0 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d  ;.  pIn = &pFram
2d4d0 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20  e->aMem[pOp->p1 
2d4e0 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46  + pFrame->aOp[pF
2d4f0 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20  rame->pc].p1];  
2d500 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d   .  sqlite3VdbeM
2d510 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
2d520 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68  ut, pIn, MEM_Eph
2d530 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  em);.  break;.}.
2d540 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
2d550 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2d560 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64  RIGGER */..#ifnd
2d570 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2d580 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70  OREIGN_KEY./* Op
2d590 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20  code: FkCounter 
2d5a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2d5b0 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50  ynopsis: fkctr[P
2d5c0 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63  1]+=P2.**.** Inc
2d5d0 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
2d5e0 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
2d5f0 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
2d600 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
2d610 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
2d620 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2d630 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2d640 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
2d650 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
2d660 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
2d670 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2d680 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
2d690 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
2d6a0 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
2d6b0 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2d6c0 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
2d6d0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2d6e0 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
2d6f0 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
2d700 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61   {.  if( db->fla
2d710 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65  gs & SQLITE_Defe
2d720 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e  rFKs ){.    db->
2d730 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2d740 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2d750 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31  else if( pOp->p1
2d760 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2d770 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
2d780 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
2d790 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
2d7a0 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
2d7b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d7c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
2d7d0 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2d7e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2d7f0 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74  fkctr[P1]==0 got
2d800 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
2d810 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20  opcode tests if 
2d820 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  a foreign key co
2d830 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2d840 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
2d850 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75  ro..** If so, ju
2d860 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2d870 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
2d880 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2d890 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e   the next .** in
2d8a0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
2d8b0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2d8c0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d  ro, then the jum
2d8d0 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
2d8e0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
2d8f0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a  raint-counter.**
2d900 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e   is zero (the on
2d910 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65  e that counts de
2d920 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
2d930 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49  t violations). I
2d940 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c  f P1 is.** zero,
2d950 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2d960 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d  en if the statem
2d970 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ent constraint-c
2d980 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a  ounter is zero.*
2d990 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  * (immediate for
2d9a0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2d9b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
2d9c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66  .*/.case OP_FkIf
2d9d0 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Zero: {         
2d9e0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
2d9f0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2da00 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2da10 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2da20 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
2da30 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
2da40 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d   2);.    if( db-
2da50 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2da60 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2da70 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70  edImmCons==0 ) p
2da80 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
2da90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
2daa0 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e  BranchTaken(p->n
2dab0 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
2dac0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
2dad0 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a  ImmCons==0, 2);.
2dae0 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f      if( p->nFkCo
2daf0 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64  nstraint==0 && d
2db00 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2db10 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  ons==0 ) pc = pO
2db20 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
2db30 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2db40 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
2db50 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2db60 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
2db70 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2db80 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
2db90 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
2dba0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2dbb0 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50  s: r[P1]=max(r[P
2dbc0 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  1],r[P2]).**.** 
2dbd0 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
2dbe0 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
2dbf0 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
2dc00 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
2dc10 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
2dc20 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
2dc30 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
2dc40 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
2dc50 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
2dc60 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
2dc70 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
2dc80 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2dc90 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
2dca0 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
2dcb0 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
2dcc0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2dcd0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
2dce0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
2dcf0 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2dd00 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2dd10 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
2dd20 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
2dd30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
2dd40 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
2dd50 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72   in2 */.  VdbeFr
2dd60 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
2dd70 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
2dd80 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
2dd90 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
2dda0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
2ddb0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2ddc0 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
2ddd0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2dde0 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
2ddf0 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
2de00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
2de10 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2de20 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
2de30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2de40 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
2de50 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2de60 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
2de70 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2de80 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
2de90 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
2dea0 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
2deb0 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
2dec0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2ded0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2dee0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2def0 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
2df00 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a  e: IfPos P1 P2 *
2df10 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2df20 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74  : if r[P1]>0 got
2df30 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2df40 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2df50 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
2df60 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2df70 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2df80 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2df90 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e 64 0a 2a  jump to P2 and.*
2dfa0 2a 20 61 64 64 20 74 68 65 20 6c 69 74 65 72 61  * add the litera
2dfb0 6c 20 76 61 6c 75 65 20 50 33 20 74 6f 20 72 65  l value P3 to re
2dfc0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2dfd0 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20   If the initial 
2dfe0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2dff0 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
2e000 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  n 1, then the.**
2e010 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e   value is unchan
2e020 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20  ged and control 
2e030 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74  passes through t
2e040 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2e050 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2e060 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
2e070 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2e080 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2e090 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2e0a0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2e0b0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2e0c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
2e0d0 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b  pIn1->u.i>0, 2);
2e0e0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2e0f0 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  >0 ){.     pc = 
2e100 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2e110 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e120 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31  Opcode: IfNeg P1
2e130 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2e140 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50  nopsis: r[P1]+=P
2e150 33 2c 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f  3, if r[P1]<0 go
2e160 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
2e170 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2e180 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2e190 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33    Add literal P3
2e1a0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
2e1b0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
2e1c0 74 68 65 6e 20 69 66 20 74 68 65 20 76 61 6c 75  then if the valu
2e1d0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2e1e0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65   is less than ze
2e1f0 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  ro, jump to P2. 
2e200 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65  .*/.case OP_IfNe
2e210 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  g: {        /* j
2e220 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2e230 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2e240 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e250 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2e260 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
2e270 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i += pOp->p3;.  
2e280 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2e290 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b  pIn1->u.i<0, 2);
2e2a0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2e2b0 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
2e2c0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2e2d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e2e0 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72  Opcode: IfNotZer
2e2f0 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
2e300 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2e310 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50  [P1]!=0 then r[P
2e320 31 5d 2b 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a  1]+=P3, goto P2.
2e330 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2e340 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
2e350 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
2e360 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
2e370 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20  gister P1 is.** 
2e380 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72  initially nonzer
2e390 6f 2c 20 74 68 65 6e 20 61 64 64 20 50 33 20 74  o, then add P3 t
2e3a0 6f 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f  o P1 and jump to
2e3b0 20 50 32 2e 20 20 49 66 20 72 65 67 69 73 74 65   P2.  If registe
2e3c0 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69  r P1 is.** initi
2e3d0 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65  ally zero, leave
2e3e0 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   it unchanged an
2e3f0 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  d fall through..
2e400 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
2e410 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
2e420 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
2e430 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2e440 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2e450 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
2e460 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
2e470 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
2e480 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i<0, 2);.  if
2e490 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20  ( pIn1->u.i ){. 
2e4a0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d      pIn1->u.i +=
2e4b0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 20 70   pOp->p3;.     p
2e4c0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2e4d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2e4e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72  ./* Opcode: Decr
2e4f0 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a  JumpZero P1 P2 *
2e500 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2e510 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d  : if (--r[P1])==
2e520 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2e530 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
2e540 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72   hold an integer
2e550 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65  .  Decrement the
2e560 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2e570 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a 75  er P1.** then ju
2e580 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
2e590 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61  new value is exa
2e5a0 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61  ctly zero..*/.ca
2e5b0 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65  se OP_DecrJumpZe
2e5c0 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75  ro: {      /* ju
2e5d0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2e5e0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2e5f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2e600 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2e610 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  t );.  pIn1->u.i
2e620 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
2e630 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
2e640 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
2e650 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
2e660 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2e670 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2e680 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
2e690 20 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 20 50 31   JumpZeroIncr P1
2e6a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2e6b0 6f 70 73 69 73 3a 20 69 66 20 28 72 5b 50 31 5d  opsis: if (r[P1]
2e6c0 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 50 32  ++)==0 ) goto P2
2e6d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
2e6e0 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2e6f0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2e700 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20   If register P1 
2e710 69 73 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  is initially.** 
2e720 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
2e730 74 6f 20 50 32 2e 20 20 49 6e 63 72 65 6d 65 6e  to P2.  Incremen
2e740 74 20 72 65 67 69 73 74 65 72 20 50 31 20 72 65  t register P1 re
2e750 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2e760 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68  her or.** not th
2e770 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e  e jump is taken.
2e780 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
2e790 5a 65 72 6f 49 6e 63 72 3a 20 7b 20 20 20 20 20  ZeroIncr: {     
2e7a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2e7b0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2e7c0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2e7d0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2e7e0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2e7f0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2e800 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
2e810 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 75 2e  .  if( (pIn1->u.
2e820 69 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  i++)==0 ){.     
2e830 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2e840 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2e850 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
2e860 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
2e870 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2e880 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
2e890 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
2e8a0 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
2e8b0 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
2e8c0 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
2e8d0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
2e8e0 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
2e8f0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
2e900 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
2e910 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
2e920 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
2e930 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20   function.  Use 
2e940 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61  register.** P3 a
2e950 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2e960 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
2e970 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
2e980 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
2e990 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
2e9a0 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63  successors..*/.c
2e9b0 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
2e9c0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
2e9d0 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   i;.  Mem *pMem;
2e9e0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20  .  Mem *pRec;.  
2e9f0 4d 65 6d 20 74 3b 0a 20 20 73 71 6c 69 74 65 33  Mem t;.  sqlite3
2ea00 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
2ea10 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2ea20 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f  apVal;..  n = pO
2ea30 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
2ea40 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20   n>=0 );.  pRec 
2ea50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2ea60 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
2ea70 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
2ea80 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
2ea90 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
2eaa0 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20   i++, pRec++){. 
2eab0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2eac0 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
2ead0 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52     apVal[i] = pR
2eae0 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ec;.    memAbout
2eaf0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63  ToChange(p, pRec
2eb00 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75  );.  }.  ctx.pFu
2eb10 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
2eb20 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nc;.  assert( pO
2eb30 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2eb40 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
2eb50 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63 74  nCursor) );.  ct
2eb60 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20  x.pMem = pMem = 
2eb70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2eb80 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73    pMem->n++;.  s
2eb90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69  qlite3VdbeMemIni
2eba0 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75  t(&t, db, MEM_Nu
2ebb0 6c 6c 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20  ll);.  ctx.pOut 
2ebc0 3d 20 26 74 3b 0a 20 20 63 74 78 2e 69 73 45 72  = &t;.  ctx.isEr
2ebd0 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70  ror = 0;.  ctx.p
2ebe0 56 64 62 65 20 3d 20 70 3b 0a 20 20 63 74 78 2e  Vdbe = p;.  ctx.
2ebf0 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e  iOp = pc;.  ctx.
2ec00 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20  skipFlag = 0;.  
2ec10 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
2ec20 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
2ec30 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  l); /* IMP: R-24
2ec40 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69  505-23230 */.  i
2ec50 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
2ec60 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2ec70 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2ec80 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2ec90 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
2eca0 28 26 74 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  (&t));.    rc = 
2ecb0 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
2ecc0 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46  .  if( ctx.skipF
2ecd0 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72  lag ){.    asser
2ece0 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
2ecf0 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
2ed00 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d  .    i = pOp[-1]
2ed10 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29  .p1;.    if( i )
2ed20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ed30 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d  etInt64(&aMem[i]
2ed40 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  , 1);.  }.  sqli
2ed50 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2ed60 65 28 26 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  e(&t);.  break;.
2ed70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
2ed80 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
2ed90 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2eda0 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50   accum=r[P1] N=P
2edb0 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  2.**.** Execute 
2edc0 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
2edd0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2ede0 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
2edf0 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
2ee00 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
2ee10 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
2ee20 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
2ee30 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
2ee40 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
2ee50 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
2ee60 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
2ee70 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
2ee80 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2ee90 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
2eea0 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
2eeb0 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
2eec0 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
2eed0 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
2eee0 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
2eef0 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
2ef00 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
2ef10 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
2ef20 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
2ef30 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
2ef40 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
2ef50 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
2ef60 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
2ef70 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
2ef80 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
2ef90 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
2efa0 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
2efb0 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
2efc0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
2efd0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
2efe0 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
2eff0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
2f000 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
2f010 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2f020 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
2f030 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
2f040 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
2f050 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2f060 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
2f070 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
2f080 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  nc);.  if( rc ){
2f090 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2f0a0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2f0b0 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
2f0c0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
2f0d0 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71  pMem));.  }.  sq
2f0e0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2f0f0 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e  ncoding(pMem, en
2f100 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
2f110 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
2f120 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Mem);.  if( sqli
2f130 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
2f140 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f  (pMem) ){.    go
2f150 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2f160 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
2f170 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f180 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  WAL./* Opcode: C
2f190 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20  heckpoint P1 P2 
2f1a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
2f1b0 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
2f1c0 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
2f1d0 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
2f1e0 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
2f1f0 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61  * WAL mode. Para
2f200 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20  meter P2 is one 
2f210 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  of SQLITE_CHECKP
2f220 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55  OINT_PASSIVE, FU
2f230 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20  LL,.** RESTART, 
2f240 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72  or TRUNCATE.  Wr
2f250 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20  ite 1 or 0 into 
2f260 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63  mem[P3] if the c
2f270 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e  heckpoint return
2f280 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  s.** SQLITE_BUSY
2f290 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74   or not, respect
2f2a0 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68  ively.  Write th
2f2b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
2f2c0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20  s in the.** WAL 
2f2d0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2f2e0 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  oint into mem[P3
2f2f0 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  +1] and the numb
2f300 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69  er of pages.** i
2f310 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
2f320 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ave been checkpo
2f330 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20  inted after the 
2f340 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f  checkpoint.** co
2f350 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d  mpletes into mem
2f360 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72  [P3+2].  However
2f370 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65   on an error, me
2f380 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d  m[P3+1] and.** m
2f390 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69  em[P3+2] are ini
2f3a0 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a  tialized to -1..
2f3b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b  */.case OP_Check
2f3c0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  point: {.  int i
2f3d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2f3e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
2f3f0 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
2f400 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20  int aRes[3];    
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f420 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20  /* Results */.  
2f430 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
2f460 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
2f470 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2f480 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20  =0 );.  aRes[0] 
2f490 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
2f4a0 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
2f4b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2f4c0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2f4d0 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
2f4e0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
2f4f0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2f500 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
2f510 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2f520 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
2f530 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  RT.       || pOp
2f540 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2f550 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
2f560 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .  );.  rc = sql
2f570 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64  ite3Checkpoint(d
2f580 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2f590 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26  >p2, &aRes[1], &
2f5a0 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20  aRes[2]);.  if( 
2f5b0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
2f5c0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
2f5d0 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
2f5e0 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
2f5f0 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
2f600 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
2f610 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
2f620 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2f630 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
2f640 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
2f650 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
2f660 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
2f670 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f680 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
2f690 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
2f6a0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2f6b0 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
2f6c0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
2f6d0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
2f6e0 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
2f6f0 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
2f700 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
2f710 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
2f720 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
2f730 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
2f740 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
2f750 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
2f760 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
2f770 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
2f780 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
2f790 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
2f7a0 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
2f7b0 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
2f7c0 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
2f7d0 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
2f7e0 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
2f7f0 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
2f800 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
2f810 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
2f820 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
2f830 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
2f840 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
2f850 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
2f860 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2f870 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
2f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f890 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63     /* Btree to c
2f8a0 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  hange journal mo
2f8b0 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72  de of */.  Pager
2f8c0 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20   *pPager;       
2f8d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
2f8e0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
2f8f0 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74  ith pBt */.  int
2f900 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20   eNew;          
2f910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f920 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  New journal mode
2f930 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20   */.  int eOld; 
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f950 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64        /* The old
2f960 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
2f970 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f980 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74  OMIT_WAL.  const
2f990 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
2f9a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
2f9b0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66  me of database f
2f9c0 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a  ile for pPager *
2f9d0 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65 77  /.#endif..  eNew
2f9e0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
2f9f0 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45  sert( eNew==PAGE
2fa00 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
2fa10 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  LETE .       || 
2fa20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2fa30 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
2fa40 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2fa50 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2fa60 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20  ODE_PERSIST .   
2fa70 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2fa80 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
2fa90 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  FF.       || eNe
2faa0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2fab0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20  MODE_MEMORY.    
2fac0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2fad0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2fae0 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  L.       || eNew
2faf0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2fb00 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20  ODE_QUERY.  );. 
2fb10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2fb20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2fb30 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2fb40 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2fb50 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64  =0 );..  pBt = d
2fb60 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2fb70 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20  pBt;.  pPager = 
2fb80 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
2fb90 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d  r(pBt);.  eOld =
2fba0 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74   sqlite3PagerGet
2fbb0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2fbc0 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d  er);.  if( eNew=
2fbd0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2fbe0 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20  DE_QUERY ) eNew 
2fbf0 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73  = eOld;.  if( !s
2fc00 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43  qlite3PagerOkToC
2fc10 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65  hangeJournalMode
2fc20 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20  (pPager) ) eNew 
2fc30 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66  = eOld;..#ifndef
2fc40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2fc50 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73  .  zFilename = s
2fc60 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e  qlite3PagerFilen
2fc70 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a  ame(pPager, 1);.
2fc80 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  .  /* Do not all
2fc90 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20  ow a transition 
2fca0 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  to journal_mode=
2fcb0 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61  WAL for a databa
2fcc0 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f  se.  ** in tempo
2fcd0 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20  rary storage or 
2fce0 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20  if the VFS does 
2fcf0 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72  not support shar
2fd00 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a  ed memory .  */.
2fd10 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
2fd20 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2fd30 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33  L.   && (sqlite3
2fd40 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
2fd50 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20  me)==0          
2fd60 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f   /* Temp file */
2fd70 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69  .       || !sqli
2fd80 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
2fd90 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20  rted(pPager))   
2fda0 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d  /* No shared-mem
2fdb0 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20  ory support */. 
2fdc0 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
2fdd0 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  Old;.  }..  if( 
2fde0 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20  (eNew!=eOld).   
2fdf0 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  && (eOld==PAGER_
2fe00 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2fe10 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2fe20 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a  OURNALMODE_WAL).
2fe30 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62    ){.    if( !db
2fe40 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
2fe50 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20  db->nVdbeRead>1 
2fe60 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
2fe70 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
2fe80 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2fe90 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2fea0 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22  db, .          "
2feb0 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73  cannot change %s
2fec0 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77   wal mode from w
2fed0 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
2fee0 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ion",.          
2fef0 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2ff00 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22  RNALMODE_WAL ? "
2ff10 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22  into" : "out of"
2ff20 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
2ff30 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73   break;.    }els
2ff40 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65  e{. .      if( e
2ff50 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2ff60 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20  ALMODE_WAL ){.  
2ff70 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76        /* If leav
2ff80 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c  ing WAL mode, cl
2ff90 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ose the log file
2ffa0 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  . If successful,
2ffb0 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20   the call.      
2ffc0 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f    ** to PagerClo
2ffd0 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69  seWal() checkpoi
2ffe0 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  nts and deletes 
2fff0 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
30000 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  log .        ** 
30010 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49  file. An EXCLUSI
30020 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c  VE lock may stil
30030 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65  l be held on the
30040 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a   database file .
30050 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72          ** after
30060 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65   a successful re
30070 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a  turn. .        *
30080 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  /.        rc = s
30090 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
300a0 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20  Wal(pPager);.   
300b0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
300c0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
300d0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
300e0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
300f0 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
30100 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
30110 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
30120 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30130 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
30140 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
30150 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
30160 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
30170 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
30180 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
30190 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
301a0 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
301b0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
301c0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
301d0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
301e0 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
301f0 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
30200 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
30210 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
30220 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
30230 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
30240 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
30250 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
30260 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
30270 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
30280 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
30290 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
302a0 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
302b0 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
302c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
302d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
302e0 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
302f0 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
30300 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
30310 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
30320 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
30330 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
30340 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30350 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
30360 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
30370 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20  Old;.  }.  eNew 
30380 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
30390 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
303a0 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
303b0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
303c0 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  >p2];.  pOut->fl
303d0 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
303e0 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
303f0 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
30400 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
30410 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
30420 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
30430 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
30440 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
30450 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
30460 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
30470 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
30480 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
30490 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23  );.  break;.};.#
304a0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
304b0 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a  OMIT_PRAGMA */..
304c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
304d0 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29  ITE_OMIT_VACUUM)
304e0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
304f0 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29  ITE_OMIT_ATTACH)
30500 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75  ./* Opcode: Vacu
30510 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  um * * * * *.**.
30520 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
30530 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20  tire database.  
30540 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  This opcode will
30550 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72   cause other vir
30560 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73  tual.** machines
30570 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61   to be created a
30580 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20  nd run.  It may 
30590 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72  not be called fr
305a0 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74  om within.** a t
305b0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  ransaction..*/.c
305c0 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
305d0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
305e0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72  adOnly==0 );.  r
305f0 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61  c = sqlite3RunVa
30600 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67  cuum(&p->zErrMsg
30610 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  , db);.  break;.
30620 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
30630 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
30640 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
30650 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
30660 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
30670 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
30680 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
30690 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
306a0 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
306b0 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
306c0 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
306d0 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
306e0 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
306f0 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
30700 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
30710 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
30720 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
30730 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
30740 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
30750 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
30760 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
30770 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
30780 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
30790 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
307a0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
307b0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
307c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
307d0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
307e0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
307f0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
30800 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
30810 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
30820 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
30830 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44  ken(rc==SQLITE_D
30840 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  ONE,2);.  if( rc
30850 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
30860 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
30870 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  2 - 1;.    rc = 
30880 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
30890 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
308a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
308b0 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
308c0 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
308d0 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
308e0 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68  s to expire.  Wh
308f0 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74  en an expired st
30900 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78  atement.** is ex
30910 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c  ecuted using sql
30920 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77  ite3_step() it w
30930 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d  ill either autom
30940 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72  atically.** repr
30950 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66  epare itself (if
30960 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c   it was original
30970 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ly created using
30980 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
30990 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20  _v2()).** or it 
309a0 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53  will fail with S
309b0 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a  QLITE_SCHEMA..**
309c0 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
309d0 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
309e0 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
309f0 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
30a00 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
30a10 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
30a20 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
30a30 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
30a40 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pired..*/.case O
30a50 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66  P_Expire: {.  if
30a60 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  ( !pOp->p1 ){.  
30a70 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
30a80 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
30a90 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s(db);.  }else{.
30aa0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
30ab0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
30ac0 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
30ad0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
30ae0 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
30af0 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
30b00 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
30b10 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
30b20 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
30b30 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
30b40 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
30b50 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
30b60 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
30b70 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
30b80 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
30b90 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
30ba0 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
30bb0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
30bc0 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
30bd0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
30be0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
30bf0 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
30c00 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
30c10 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
30c20 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
30c30 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
30c40 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
30c50 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
30c60 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
30c70 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
30c80 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
30c90 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
30ca0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
30cb0 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
30cc0 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
30cd0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
30ce0 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
30cf0 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
30d00 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
30d10 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
30d20 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
30d30 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
30d40 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
30d50 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
30d60 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
30d70 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
30d80 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20  mmitted) ){.    
30d90 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
30da0 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ; .    assert( p
30db0 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
30dc0 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
30dd0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
30de0 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29  btreeMask, p1) )
30df0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73  ;.    assert( is
30e00 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
30e10 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
30e20 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
30e30 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
30e40 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
30e50 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
30e60 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28  teLock);.    if(
30e70 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
30e80 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
30e90 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
30ea0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
30eb0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
30ec0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
30ed0 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  , db, "database 
30ee0 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a  table is locked:
30ef0 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a   %s", z);.    }.
30f00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
30f10 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
30f20 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
30f30 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
30f40 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
30f50 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
30f60 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
30f70 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
30f80 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
30f90 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
30fa0 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
30fb0 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
30fc0 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
30fd0 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
30fe0 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
30ff0 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
31000 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
31010 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
31020 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
31030 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
31040 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
31050 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
31060 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74  hod. If it is, t
31070 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65  he error.** code
31080 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
31090 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a  SQLITE_LOCKED..*
310a0 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e  /.case OP_VBegin
310b0 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56  : {.  VTable *pV
310c0 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70  Tab;.  pVTab = p
310d0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
310e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
310f0 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29  Begin(db, pVTab)
31100 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20  ;.  if( pVTab ) 
31110 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
31120 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62  tErrmsg(p, pVTab
31130 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61  ->pVtab);.  brea
31140 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
31150 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31160 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
31170 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31180 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
31190 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
311a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
311b0 2a 20 50 32 20 69 73 20 61 20 72 65 67 69 73 74  * P2 is a regist
311c0 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
311d0 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
311e0 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
311f0 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61  abase .** P1. Ca
31200 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
31210 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
31220 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
31230 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65  _VCreate: {.  Me
31240 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
31250 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
31260 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
31270 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
31280 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20  nst char *zTab; 
31290 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
312a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
312b0 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ..  memset(&sMem
312c0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
312d0 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20  ));.  sMem.db = 
312e0 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65  db;.  /* Because
312f0 20 50 32 20 69 73 20 61 6c 77 61 79 73 20 61 20   P2 is always a 
31300 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69  static string, i
31310 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
31320 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  for the.  ** sql
31330 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
31340 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61  ) to fail */.  a
31350 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70  ssert( (aMem[pOp
31360 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p2].flags & ME
31370 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61  M_Str)!=0 );.  a
31380 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70  ssert( (aMem[pOp
31390 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p2].flags & ME
313a0 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a  M_Static)!=0 );.
313b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
313c0 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c  beMemCopy(&sMem,
313d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
313e0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
313f0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a  SQLITE_OK );.  z
31400 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Tab = (const cha
31410 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
31420 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20  _text(&sMem);.  
31430 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20  assert( zTab || 
31440 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
31450 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29   );.  if( zTab )
31460 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
31470 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
31480 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54  (db, pOp->p1, zT
31490 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  ab, &p->zErrMsg)
314a0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
314b0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
314c0 4d 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Mem);.  break;.}
314d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
314e0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
314f0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
31500 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
31510 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
31520 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20  de: VDestroy P1 
31530 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
31540 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
31550 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
31560 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
31570 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74    Call the xDest
31580 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66  roy method.** of
31590 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
315a0 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  case OP_VDestroy
315b0 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  : {.  db->nVDest
315c0 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71  roy++;.  rc = sq
315d0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
315e0 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
315f0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
31600 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b  db->nVDestroy--;
31610 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
31620 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
31630 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
31640 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
31650 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31660 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
31670 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
31680 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
31690 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
316a0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
316b0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
316c0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
316d0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
316e0 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
316f0 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
31700 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
31710 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
31720 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
31730 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
31740 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
31750 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
31760 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
31770 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
31780 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
31790 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
317a0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
317b0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
317c0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
317d0 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
317e0 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   0;.  pVtabCurso
317f0 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
31800 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
31810 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74  pVtab;.  if( pVt
31820 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70  ab==0 || NEVER(p
31830 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30  Vtab->pModule==0
31840 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ) ){.    rc = SQ
31850 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
31860 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d   break;.  }.  pM
31870 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
31880 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70  Module;.  rc = p
31890 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
318a0 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f  tab, &pVtabCurso
318b0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  r);.  sqlite3Vta
318c0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
318d0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
318e0 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
318f0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
31900 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
31910 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
31920 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
31930 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
31940 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
31950 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73  ialize vdbe curs
31960 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
31970 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
31980 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
31990 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
319a0 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
319b0 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
319c0 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
319d0 73 6f 72 3b 0a 20 20 20 20 20 20 70 56 74 61 62  sor;.      pVtab
319e0 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 20 20 7d 65  ->nRef++;.    }e
319f0 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d  lse{.      db->m
31a00 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
31a10 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  .      pModule->
31a20 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73  xClose(pVtabCurs
31a30 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
31a40 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31a50 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31a60 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
31a70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31a80 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31a90 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
31aa0 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
31ab0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31ac0 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61  iplan=r[P3] zpla
31ad0 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20  n='P4'.**.** P1 
31ae0 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  is a cursor open
31af0 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20  ed using VOpen. 
31b00 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73   P2 is an addres
31b10 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a  s to jump to if.
31b20 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  ** the filtered 
31b30 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
31b40 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  pty..**.** P4 is
31b50 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20   either NULL or 
31b60 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61  a string that wa
31b70 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
31b80 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a  he xBestIndex.**
31b90 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
31ba0 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65  odule.  The inte
31bb0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
31bc0 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c  e P4 string is l
31bd0 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f  eft.** to the mo
31be0 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
31bf0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
31c00 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
31c10 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
31c20 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  d on the virtual
31c30 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64   table specified
31c40 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20  .** by P1.  The 
31c50 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c  integer query pl
31c60 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  an parameter to 
31c70 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65  xFilter is store
31c80 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
31c90 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33   P3. Register P3
31ca0 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72  +1 stores the ar
31cb0 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  gc parameter to 
31cc0 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  be passed to the
31cd0 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68  .** xFilter meth
31ce0 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33  od. Registers P3
31cf0 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72  +2..P3+1+argc ar
31d00 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64  e the argc.** ad
31d10 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74  ditional paramet
31d20 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61  ers which are pa
31d30 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74  ssed to.** xFilt
31d40 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69  er as argv. Regi
31d50 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65  ster P3+2 become
31d60 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70  s argv[0] when p
31d70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72  assed to xFilter
31d80 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69  ..**.** A jump i
31d90 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20  s made to P2 if 
31da0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61  the result set a
31db0 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77  fter filtering w
31dc0 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a  ould be empty..*
31dd0 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65  /.case OP_VFilte
31de0 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  r: {   /* jump *
31df0 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  /.  int nArg;.  
31e00 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f  int iQuery;.  co
31e10 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
31e20 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
31e30 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65  em *pQuery;.  Me
31e40 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69  m *pArgc;.  sqli
31e50 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
31e60 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
31e70 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
31e80 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
31e90 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
31ea0 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
31eb0 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
31ec0 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
31ed0 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
31ee0 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
31ef0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
31f00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
31f10 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
31f20 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49  Query) );.  REGI
31f30 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
31f40 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
31f50 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
31f60 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
31f70 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
31f80 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
31f90 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
31fa0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
31fb0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
31fc0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
31fd0 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
31fe0 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
31ff0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
32000 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
32010 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
32020 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
32030 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
32040 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
32050 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
32060 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
32070 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
32080 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
32090 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  hod */.  {.    r
320a0 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72  es = 0;.    apAr
320b0 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
320c0 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e    for(i = 0; i<n
320d0 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
320e0 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
320f0 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a  gc[i+1];.    }..
32100 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
32110 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43  ->xFilter(pVtabC
32120 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70  ursor, iQuery, p
32130 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20  Op->p4.z, nArg, 
32140 61 70 41 72 67 29 3b 0a 20 20 20 20 73 71 6c 69  apArg);.    sqli
32150 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
32160 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
32170 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
32180 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
32190 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
321a0 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  f(pVtabCursor);.
321b0 20 20 20 20 7d 0a 20 20 20 20 56 64 62 65 42 72      }.    VdbeBr
321c0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
321d0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  ,2);.    if( res
321e0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
321f0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
32200 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
32210 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
32220 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
32230 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32240 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
32250 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32260 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
32270 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
32280 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
32290 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
322a0 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a  ]=vcolumn(P2).**
322b0 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
322c0 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
322d0 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
322e0 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
322f0 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
32300 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
32310 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
32320 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
32330 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
32340 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
32350 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
32360 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
32370 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
32380 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
32390 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
323a0 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
323b0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
323c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
323d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
323e0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
323f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
32400 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
32410 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
32420 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
32430 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
32440 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
32450 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
32460 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
32470 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
32480 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
32490 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
324a0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
324b0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
324c0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
324d0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
324e0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
324f0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
32500 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
32510 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
32520 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
32530 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f  );.  sContext.pO
32540 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65  ut = pDest;.  Me
32550 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
32560 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
32570 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
32580 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74  Column(pCur->pVt
32590 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74  abCursor, &sCont
325a0 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  ext, pOp->p2);. 
325b0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
325c0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
325d0 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65  b);.  if( sConte
325e0 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  xt.isError ){.  
325f0 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
32600 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  isError;.  }.  s
32610 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
32620 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20  Encoding(pDest, 
32630 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
32640 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
32650 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
32660 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
32670 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
32680 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
32690 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
326a0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
326b0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
326c0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
326d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
326e0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
326f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32700 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
32710 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
32720 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
32730 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
32740 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
32750 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
32760 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
32770 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
32780 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
32790 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
327a0 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
327b0 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
327c0 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
327d0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
327e0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
327f0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
32800 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
32810 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
32820 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
32830 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
32840 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
32850 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
32860 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
32870 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
32880 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
32890 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
328a0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
328b0 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
328c0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
328d0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
328e0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
328f0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
32900 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
32910 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
32920 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
32930 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
32940 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
32950 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
32960 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
32970 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
32980 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
32990 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
329a0 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
329b0 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
329c0 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
329d0 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
329e0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
329f0 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
32a00 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
32a10 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
32a20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
32a30 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
32a40 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
32a50 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
32a60 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
32a70 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
32a80 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
32a90 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
32aa0 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64    */.  rc = pMod
32ab0 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
32ac0 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
32ad0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
32ae0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
32af0 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
32b00 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
32b10 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
32b20 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
32b30 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62  rsor);.  }.  Vdb
32b40 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65  eBranchTaken(!re
32b50 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73  s,2);.  if( !res
32b60 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
32b70 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
32b80 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70  p to P2 */.    p
32b90 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
32ba0 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
32bb0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
32bc0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
32bd0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
32be0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
32bf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
32c00 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
32c10 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31  code: VRename P1
32c20 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
32c30 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
32c40 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
32c50 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
32c60 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
32c70 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
32c80 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
32c90 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
32ca0 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54  Rename method. T
32cb0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72  he value.** in r
32cc0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61  egister P1 is pa
32cd0 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d  ssed as the zNam
32ce0 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
32cf0 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
32d00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65  ..*/.case OP_VRe
32d10 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  name: {.  sqlite
32d20 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
32d30 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20   Mem *pName;..  
32d40 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
32d50 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
32d60 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f  pName = &aMem[pO
32d70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
32d80 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  ( pVtab->pModule
32d90 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61  ->xRename );.  a
32da0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
32db0 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73  d(pName) );.  as
32dc0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
32dd0 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54  y==0 );.  REGIST
32de0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
32df0 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65  , pName);.  asse
32e00 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73  rt( pName->flags
32e10 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20   & MEM_Str );.  
32e20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
32e30 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
32e40 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  8 );.  testcase(
32e50 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
32e60 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20  ITE_UTF16BE );. 
32e70 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
32e80 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
32e90 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20  F16LE );.  rc = 
32ea0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
32eb0 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c  eEncoding(pName,
32ec0 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
32ed0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
32ee0 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70  OK ){.    rc = p
32ef0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
32f00 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e  Rename(pVtab, pN
32f10 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c  ame->z);.    sql
32f20 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
32f30 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
32f40 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
32f50 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   0;.  }.  break;
32f60 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
32f70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
32f80 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
32f90 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50  pcode: VUpdate P
32fa0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
32fb0 20 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d   Synopsis: data=
32fc0 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50  r[P3@P2].**.** P
32fd0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
32fe0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
32ff0 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
33000 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
33010 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
33020 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
33030 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55  corresponding xU
33040 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32  pdate method. P2
33050 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63   values.** are c
33060 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79  ontiguous memory
33070 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20   cells starting 
33080 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f  at P3 to pass to
33090 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a   the xUpdate .**
330a0 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65   invocation. The
330b0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
330c0 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72  er (P3+P2-1) cor
330d0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
330e0 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74  .** p2th element
330f0 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72   of the argv arr
33100 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70  ay passed to xUp
33110 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  date..**.** The 
33120 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77  xUpdate method w
33130 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20  ill do a DELETE 
33140 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  or an INSERT or 
33150 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67  both..** The arg
33160 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68  v[0] element (wh
33170 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ich corresponds 
33180 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
33190 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77  3).** is the row
331a0 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64  id of a row to d
331b0 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b  elete.  If argv[
331c0 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  0] is NULL then 
331d0 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20  no .** deletion 
331e0 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67  occurs.  The arg
331f0 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20  v[1] element is 
33200 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
33210 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54   new .** row.  T
33220 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20  his can be NULL 
33230 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74  to have the virt
33240 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74  ual table select
33250 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
33260 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20  id for itself.  
33270 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65  The subsequent e
33280 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  lements in the a
33290 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65  rray are .** the
332a0 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
332b0 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ns in the new ro
332c0 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d  w..**.** If P2==
332d0 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74  1 then no insert
332e0 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20   is performed.  
332f0 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72  argv[0] is the r
33300 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77  owid of.** a row
33310 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a   to delete..**.*
33320 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61  * P1 is a boolea
33330 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73  n flag. If it is
33340 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64   set to true and
33350 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c   the xUpdate cal
33360 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66  l.** is successf
33370 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ul, then the val
33380 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
33390 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
333a0 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69  rt_rowid() .** i
333b0 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
333c0 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20  ue of the rowid 
333d0 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74  for the row just
333e0 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   inserted..**.**
333f0 20 50 35 20 69 73 20 74 68 65 20 65 72 72 6f 72   P5 is the error
33400 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70   actions (OE_Rep
33410 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f  lace, OE_Fail, O
33420 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74  E_Ignore, etc) t
33430 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68  o.** apply in th
33440 65 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73  e case of a cons
33450 74 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f  traint failure o
33460 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75  n an insert or u
33470 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pdate..*/.case O
33480 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73  P_VUpdate: {.  s
33490 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
334a0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
334b0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
334c0 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ule;.  int nArg;
334d0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
334e0 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a  te_int64 rowid;.
334f0 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20    Mem **apArg;. 
33500 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73   Mem *pX;..  ass
33510 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20  ert( pOp->p2==1 
33520 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
33530 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20  5==OE_Fail   || 
33540 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c  pOp->p5==OE_Roll
33550 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20  back .       || 
33560 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72  pOp->p5==OE_Abor
33570 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45  t || pOp->p5==OE
33580 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e  _Ignore || pOp->
33590 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20  p5==OE_Replace. 
335a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
335b0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
335c0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
335d0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
335e0 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c    if( pVtab==0 |
335f0 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70  | NEVER(pVtab->p
33600 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20  Module==0) ){.  
33610 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
33620 43 4b 45 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b  CKED;.    break;
33630 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  .  }.  pModule =
33640 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
33650 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  .  nArg = pOp->p
33660 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
33670 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
33680 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  B );.  if( ALWAY
33690 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  S(pModule->xUpda
336a0 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74  te) ){.    u8 vt
336b0 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64  abOnConflict = d
336c0 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
336d0 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  t;.    apArg = p
336e0 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20  ->apArg;.    pX 
336f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
33700 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
33710 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
33720 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
33730 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20  Valid(pX) );.   
33740 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
33750 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20  nge(p, pX);.    
33760 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b    apArg[i] = pX;
33770 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20  .      pX++;.   
33780 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f   }.    db->vtabO
33790 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d  nConflict = pOp-
337a0 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  >p5;.    rc = pM
337b0 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
337c0 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
337d0 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
337e0 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
337f0 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c  ct = vtabOnConfl
33800 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ict;.    sqlite3
33810 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
33820 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
33830 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
33840 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a  K && pOp->p1 ){.
33850 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
33860 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
33870 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
33880 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
33890 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
338a0 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
338b0 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d  d = rowid;.    }
338c0 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66  .    if( (rc&0xf
338d0 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
338e0 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34  RAINT && pOp->p4
338f0 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61  .pVtab->bConstra
33900 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  int ){.      if(
33910 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e   pOp->p5==OE_Ign
33920 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ore ){.        r
33930 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
33940 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
33950 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
33960 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d  on = ((pOp->p5==
33970 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45  OE_Replace) ? OE
33980 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35  _Abort : pOp->p5
33990 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
339a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e  else{.      p->n
339b0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Change++;.    }.
339c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
339d0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
339e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
339f0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
33a00 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
33a10 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
33a20 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
33a30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
33a40 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
33a50 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
33a60 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
33a70 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
33a80 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
33a90 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
33aa0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
33ab0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
33ac0 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
33ad0 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
33ae0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
33af0 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pBt);.  break;.
33b00 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  }.#endif...#ifnd
33b10 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
33b20 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
33b30 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e   Opcode: MaxPgcn
33b40 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
33b50 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20  *.** Try to set 
33b60 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
33b70 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62   count for datab
33b80 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61  ase P1 to the va
33b90 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f  lue in P3..** Do
33ba0 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78   not let the max
33bb0 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
33bc0 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63  fall below the c
33bd0 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e  urrent page coun
33be0 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20  t and.** do not 
33bf0 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d  change the maxim
33c00 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61  um page count va
33c10 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a  lue if P3==0..**
33c20 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61  .** Store the ma
33c30 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
33c40 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67   after the chang
33c50 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
33c60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78  ..*/.case OP_Max
33c70 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Pgcnt: {        
33c80 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
33c90 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69  elease */.  unsi
33ca0 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b  gned int newMax;
33cb0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
33cc0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
33cd0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
33ce0 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66  newMax = 0;.  if
33cf0 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
33d00 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65   newMax = sqlite
33d10 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70  3BtreeLastPage(p
33d20 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77  Bt);.    if( new
33d30 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29  Max < (unsigned)
33d40 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78  pOp->p3 ) newMax
33d50 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70   = (unsigned)pOp
33d60 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->p3;.  }.  pOut
33d70 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
33d80 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74  treeMaxPageCount
33d90 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20  (pBt, newMax);. 
33da0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
33db0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  .../* Opcode: In
33dc0 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  it * P2 * P4 *.*
33dd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61  * Synopsis:  Sta
33de0 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50  rt at P2.**.** P
33df0 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20  rograms contain 
33e00 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  a single instanc
33e10 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  e of this opcode
33e20 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69 72   as the very fir
33e30 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a  st.** opcode..**
33e40 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69  .** If tracing i
33e50 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68  s enabled (by th
33e60 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  e sqlite3_trace(
33e70 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68  )) interface, th
33e80 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20  en.** the UTF-8 
33e90 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64  string contained
33ea0 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65   in P4 is emitte
33eb0 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63  d on the trace c
33ec0 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69  allback..** Or i
33ed0 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75  f P4 is blank, u
33ee0 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72 65  se the string re
33ef0 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
33f00 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  3_sql()..**.** I
33f10 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P2 is not zero
33f20 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
33f30 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
33f40 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20  e OP_Init: {    
33f50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
33f60 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b  .  char *zTrace;
33f70 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69  .  char *z;..  i
33f80 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  f( pOp->p2 ){.  
33f90 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
33fa0 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20   1;.  }.#ifndef 
33fb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
33fc0 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61  E.  if( db->xTra
33fd0 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69  ce.   && !p->doi
33fe0 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a  ngRerun.   && (z
33ff0 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
34000 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
34010 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
34020 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
34030 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28  e3VdbeExpandSql(
34040 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  p, zTrace);.    
34050 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
34060 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
34070 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
34080 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64  db, z);.  }.#ifd
34090 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  ef SQLITE_USE_FC
340a0 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61  NTL_TRACE.  zTra
340b0 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
340c0 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
340d0 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54  >zSql);.  if( zT
340e0 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  race ){.    int 
340f0 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
34100 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
34110 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d 61 73  .      if( DbMas
34120 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
34130 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74  sk, i)==0 ) cont
34140 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
34150 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
34160 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  (db, db->aDb[i].
34170 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43  zName, SQLITE_FC
34180 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63  NTL_TRACE, zTrac
34190 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  e);.    }.  }.#e
341a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
341b0 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a  SE_FCNTL_TRACE *
341c0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
341d0 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d  DEBUG.  if( (db-
341e0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
341f0 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20  SqlTrace)!=0.   
34200 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
34210 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
34220 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
34230 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69  =0.  ){.    sqli
34240 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
34250 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
34260 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23  , zTrace);.  }.#
34270 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
34280 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
34290 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  /* SQLITE_OMIT_T
342a0 52 41 43 45 20 2a 2f 0a 20 20 62 72 65 61 6b 3b  RACE */.  break;
342b0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
342c0 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  Noop * * * * *.*
342d0 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e  *.** Do nothing.
342e0 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69    This instructi
342f0 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66  on is often usef
34300 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20  ul as a jump.** 
34310 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a  destination..*/.
34320 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20  /*.** The magic 
34330 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61  Explain opcode a
34340 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64  re only inserted
34350 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32   when explain==2
34360 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f   (which.** is to
34370 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58   say when the EX
34380 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
34390 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e   syntax is used.
343a0 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ).** This opcode
343b0 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61   records informa
343c0 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70  tion from the op
343d0 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20  timizer.  It is 
343e0 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  the.** the same 
343f0 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69  as a no-op.  Thi
34400 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61  s opcodesnever a
34410 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c  ppears in a real
34420 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a   VM program..*/.
34430 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20  default: {      
34440 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72      /* This is r
34450 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e  eally OP_Noop an
34460 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a  d OP_Explain */.
34470 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
34480 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c  pcode==OP_Noop |
34490 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
344a0 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62  P_Explain );.  b
344b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a  reak;.}../******
344c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
344d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
344e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
344f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34500 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63  *******.** The c
34510 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74  ases of the swit
34520 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  ch statement abo
34530 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f  ve this line sho
34540 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e  uld all be inden
34550 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63  ted.** by 6 spac
34560 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66  es.  But the lef
34570 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20  t-most 6 spaces 
34580 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65  have been remove
34590 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65  d to improve the
345a0 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e  .** readability.
345b0 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e    From this poin
345c0 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e  t on down, the n
345d0 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
345e0 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72  n rules are.** r
345f0 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a  estored..*******
34600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34640 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23  ******/.    }..#
34650 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
34660 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  LE.    {.      u
34670 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71 6c  64 endTime = sql
34680 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20 20  ite3Hwtime();.  
34690 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65 3e      if( endTime>
346a0 73 74 61 72 74 20 29 20 70 4f 70 2d 3e 63 79 63  start ) pOp->cyc
346b0 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d  les += endTime -
346c0 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
346d0 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  p->cnt++;.    }.
346e0 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54  #endif..    /* T
346f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64  he following cod
34700 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74  e adds nothing t
34710 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e  o the actual fun
34720 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a  ctionality.    *
34730 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  * of the program
34740 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65  .  It is only he
34750 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61  re for testing a
34760 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20  nd debugging..  
34770 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65    ** On the othe
34780 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20  r hand, it does 
34790 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20  burn CPU cycles 
347a0 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75  every time throu
347b0 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76  gh.    ** the ev
347c0 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53  aluator loop.  S
347d0 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69  o we can leave i
347e0 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55  t out when NDEBU
347f0 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
34800 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45    */.#ifndef NDE
34810 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20  BUG.    assert( 
34820 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e  pc>=-1 && pc<p->
34830 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  nOp );..#ifdef S
34840 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
34850 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
34860 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
34870 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63   ){.      if( rc
34880 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72 63  !=0 ) printf("rc
34890 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20  =%d\n",rc);.    
348a0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
348b0 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32  gs & (OPFLG_OUT2
348c0 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c  _PRERELEASE|OPFL
348d0 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20  G_OUT2) ){.     
348e0 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
348f0 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
34900 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  pOp->p2]);.     
34910 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70   }.      if( pOp
34920 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
34930 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20  G_OUT3 ){.      
34940 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
34950 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
34960 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
34970 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20  }.    }.#endif  
34980 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
34990 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44  */.#endif  /* ND
349a0 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20  EBUG */.  }  /* 
349b0 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  The end of the f
349c0 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20  or(;;) loop the 
349d0 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70  loops through op
349e0 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  codes */..  /* I
349f0 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
34a00 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20  point, it means 
34a10 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69  that execution i
34a20 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a  s finished with.
34a30 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66    ** an error of
34a40 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f   some kind..  */
34a50 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74  .vdbe_error_halt
34a60 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29  :.  assert( rc )
34a70 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
34a80 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69    testcase( sqli
34a90 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
34aa0 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c  xLog!=0 );.  sql
34ab0 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74  ite3_log(rc, "st
34ac0 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61  atement aborts a
34ad0 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20  t %d: [%s] %s", 
34ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34af0 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c      pc, p->zSql,
34b00 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
34b10 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
34b20 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
34b30 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
34b40 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
34b50 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
34b60 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
34b70 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  if( resetSchemaO
34b80 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20  nFault>0 ){.    
34b90 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
34ba0 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53  chema(db, resetS
34bb0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b  chemaOnFault-1);
34bc0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20  .  }..  /* This 
34bd0 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
34be0 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63  out of this proc
34bf0 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20  edure.  We have 
34c00 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20  to.  ** release 
34c10 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62  the mutexes on b
34c20 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20  trees that were 
34c30 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a  acquired at the.
34c40 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62    ** top. */.vdb
34c50 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e  e_return:.  db->
34c60 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
34c70 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73  Rowid;.  testcas
34c80 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a  e( nVmStep>0 );.
34c90 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
34ca0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
34cb0 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74  VM_STEP] += (int
34cc0 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69  )nVmStep;.  sqli
34cd0 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b  te3VdbeLeave(p);
34ce0 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
34cf0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
34d00 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
34d10 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
34d20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
34d30 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
34d40 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
34d50 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
34d60 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
34d70 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
34d80 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
34d90 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
34da0 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
34db0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
34dc0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
34dd0 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
34de0 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
34df0 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
34e00 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
34e10 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
34e20 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
34e30 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
34e40 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
34e50 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
34e60 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
34e70 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
34e80 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74   here for any ot
34e90 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61  her kind of fata
34ea0 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72  l error.  The "r
34eb0 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a  c" variable.  **
34ec0 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65   should hold the
34ed0 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20   error number.. 
34ee0 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
34ef0 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74  _error:.  assert
34f00 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20  ( p->zErrMsg==0 
34f10 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  );.  if( db->mal
34f20 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d  locFailed ) rc =
34f30 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
34f40 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
34f50 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  IOERR_NOMEM ){. 
34f60 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
34f70 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
34f80 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
34f90 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
34fa0 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65   }.  goto vdbe_e
34fb0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
34fc0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
34fd0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74   the sqlite3_int
34fe0 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74  errupt() API set
34ff0 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a  s the interrupt.
35000 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a    ** flag..  */.
35010 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
35020 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74  errupt:.  assert
35030 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
35040 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d  rupted );.  rc =
35050 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
35060 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  T;.  p->rc = rc;
35070 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
35080 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
35090 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
350a0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
350b0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
350c0 5f 68 61 6c 74 3b 0a 7d 0a                       _halt;.}.