/ Hex Artifact Content
Login

Artifact 678170cc7e8217b1926ead14108bc7d87202b3d9:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
40e0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
40f0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4100: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
4110: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
4120: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
4130: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
4140: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4150: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
4160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4170: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4180: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
41a0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
41b0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
41c0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
41d0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
41e0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4210: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4220: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
4230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4240: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4250: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4260: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4270: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4280: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4290: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
42a0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
42b0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
42c0: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
42d0: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
42e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
42f0: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4300: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4310: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4320: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4330: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4340: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4350: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
4360: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4370: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4380: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
43a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
43b0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
43c0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
43d0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
43e0: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
43f0: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4400: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4410: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4420: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4430: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4440: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4460: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4470: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4490: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
44a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
44b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
44c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
44d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
44e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4500: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4510: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4520: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4530: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4540: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4550: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4560: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4570: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4580: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4590: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
45a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
45e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
45f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4600: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4610: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4620: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4630: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4640: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4650: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4660: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4670: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4680: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4690: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
46a0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
46b0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
46c0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
46d0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
46e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
46f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4710: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4720: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4730: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4740: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4750: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4760: 55 53 59 20 7c 7c 20 28 28 70 2d 3e 72 63 26 30  USY || ((p->rc&0
4770: 78 46 46 29 20 3d 3d 20 53 51 4c 49 54 45 5f 4c  xFF) == SQLITE_L
4780: 4f 43 4b 45 44 29 29 3b 0a 20 20 61 73 73 65 72  OCKED));.  asser
4790: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
47a0: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
47b0: 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  0 );.  p->rc = S
47c0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69  QLITE_OK;.  p->i
47d0: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
47e0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
47f0: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4800: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4810: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4820: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4830: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
4840: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
4850: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
4860: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
4870: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4880: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4890: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
48a0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
48b0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
48c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
48d0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
48e0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
48f0: 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67  ssLimit = (unsig
4900: 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  ned)p->aCounter[
4910: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
4920: 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20  S_VM_STEP];.    
4930: 69 66 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d  if( nProgressLim
4940: 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e  it==0 ){.      n
4950: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
4960: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4970: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4980: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4990: 74 20 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64  t %= (unsigned)d
49a0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  b->nProgressOps;
49b0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
49c0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
49d0: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
49e0: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
49f0: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
4a00: 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d  =0.   && (p->db-
4a10: 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45  >flags & (SQLITE
4a20: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
4a30: 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49  ITE_VdbeEQP|SQLI
4a40: 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d  TE_VdbeTrace))!=
4a50: 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  0.  ){.    int i
4a60: 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d  ;.    int once =
4a70: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   1;.    sqlite3V
4a80: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4a90: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4aa0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4ab0: 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20  beListing ){.   
4ac0: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4ad0: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4ae0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  \n");.      for(
4af0: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4b00: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
4b10: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4b20: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
4b30: 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i]);.      }.   
4b40: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
4b50: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4b60: 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20  _VdbeEQP ){.    
4b70: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4b80: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4b90: 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70     if( aOp[i].op
4ba0: 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
4bb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
4bc0: 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28  ( once ) printf(
4bd0: 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e  "VDBE Query Plan
4be0: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  :\n");.         
4bf0: 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
4c00: 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20  aOp[i].p4.z);.  
4c10: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30          once = 0
4c20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4c30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4c40: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4c50: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
4c60: 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42  e )  printf("VDB
4c70: 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  E Trace:\n");.  
4c80: 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  }.  sqlite3EndBe
4c90: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65  nignMalloc();.#e
4ca0: 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d  ndif.  for(pc=p-
4cb0: 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  >pc; rc==SQLITE_
4cc0: 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61  OK; pc++){.    a
4cd0: 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20  ssert( pc>=0 && 
4ce0: 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20  pc<p->nOp );.   
4cf0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
4d00: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
4d10: 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45  mem;.#ifdef VDBE
4d20: 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61  _PROFILE.    sta
4d30: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
4d40: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
4d50: 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20   nVmStep++;.    
4d60: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a  pOp = &aOp[pc];.
4d70: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c  .    /* Only all
4d80: 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51  ow tracing if SQ
4d90: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
4da0: 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
4db0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4dc0: 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
4dd0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4de0: 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
4df0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4e00: 4f 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70  Op(stdout, pc, p
4e10: 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  Op);.    }.#endi
4e20: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
4e30: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
4e40: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
4e50: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
4e60: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
4e70: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
4e80: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
4e90: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
4ea0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
4eb0: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
4ec0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4ed0: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
4ee0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
4ef0: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
4f00: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
4f10: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
4f20: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
4f30: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
4f40: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
4f50: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
4f60: 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20  * On any opcode 
4f70: 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70  with the "out2-p
4f80: 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20  rerelease" tag, 
4f90: 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20  free any.    ** 
4fa0: 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74  external allocat
4fb0: 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b  ions out of mem[
4fc0: 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b  p2] and set mem[
4fd0: 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a  p2] to be.    **
4fe0: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   an undefined in
4ff0: 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20  teger.  Opcodes 
5000: 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c  will either fill
5010: 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a   in the integer.
5020: 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20      ** value or 
5030: 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20  convert mem[p2] 
5040: 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74  to a different t
5050: 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ype..    */.    
5060: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66  assert( pOp->opf
5070: 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63  lags==sqlite3Opc
5080: 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d  odeProperty[pOp-
5090: 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20  >opcode] );.    
50a0: 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
50b0: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
50c0: 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  ERELEASE ){.    
50d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
50e0: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
50f0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
5100: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
5110: 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  r) );.      pOut
5120: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
5130: 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  ];.      memAbou
5140: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
5150: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56 64  t);.      if( Vd
5160: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
5170: 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  t) ) sqlite3Vdbe
5180: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
5190: 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
51a0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
51b0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e     }..    /* San
51c0: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
51d0: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
51e0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
51f0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70  DEBUG.    if( (p
5200: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5210: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
5220: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5230: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
5240: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
5250: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5260: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5270: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5280: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
5290: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
52a0: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
52b0: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
52c0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
52d0: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
52e0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
52f0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
5300: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5310: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5320: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
5330: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5340: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5350: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5360: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
5370: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5380: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5390: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
53a0: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73  p2]) );.      as
53b0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
53c0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
53d0: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
53e0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  2]) );.      REG
53f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5400: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
5410: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
5420: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5430: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  s & OPFLG_IN3)!=
5440: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5450: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5460: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5470: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
5480: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5490: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
54a0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
54b0: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
54c0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
54d0: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
54e0: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
54f0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
5500: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5510: 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
5520: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p3]);.    }. 
5530: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5540: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
5550: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  2)!=0 ){.      a
5560: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5570: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5580: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
5590: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
55a0: 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
55b0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
55c0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
55d0: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
55e0: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
55f0: 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20  G_OUT3)!=0 ){.  
5600: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5610: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p3>0 );.      a
5620: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
5630: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5640: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
5650: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5660: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
5670: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
5680: 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70    .    switch( p
5690: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f  Op->opcode ){../
56a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
56f0: 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73   What follows is
5700: 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63   a massive switc
5710: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72  h statement wher
5720: 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c  e each case impl
5730: 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61  ements a.** sepa
5740: 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  rate instruction
5750: 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
5760: 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20  machine.  If we 
5770: 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c  follow the usual
5780: 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  .** indentation 
5790: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63  conventions, eac
57a0: 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65  h case should be
57b0: 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73   indented by 6 s
57c0: 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74  paces.  But.** t
57d0: 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20  hat is a lot of 
57e0: 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20  wasted space on 
57f0: 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e  the left margin.
5800: 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69    So the code wi
5810: 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74  thin.** the swit
5820: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c  ch statement wil
5830: 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e  l break with con
5840: 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66  vention and be f
5850: 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68  lush-left. Anoth
5860: 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e  er.** big commen
5870: 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  t (similar to th
5880: 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72  is one) will mar
5890: 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74  k the point in t
58a0: 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a  he code where.**
58b0: 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62   we transition b
58c0: 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e  ack to normal in
58d0: 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  dentation..**.**
58e0: 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   The formatting 
58f0: 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20  of each case is 
5900: 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20  important.  The 
5910: 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c  makefile for SQL
5920: 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73  ite.** generates
5930: 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70   two C files "op
5940: 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70  codes.h" and "op
5950: 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e  codes.c" by scan
5960: 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c  ning this.** fil
5970: 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69  e looking for li
5980: 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77  nes that begin w
5990: 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20  ith "case OP_". 
59a0: 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66   The opcodes.h f
59b0: 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  iles.** will be 
59c0: 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66  filled with #def
59d0: 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75  ines that give u
59e0: 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61  nique integer va
59f0: 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20  lues to each.** 
5a00: 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f  opcode and the o
5a10: 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73  pcodes.c file is
5a20: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20   filled with an 
5a30: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
5a40: 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73   where.** each s
5a50: 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d  tring is the sym
5a60: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
5a70: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
5a80: 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65   opcode.  If the
5a90: 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65  .** case stateme
5aa0: 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  nt is followed b
5ab0: 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74  y a comment of t
5ac0: 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65  he form "/# same
5ad0: 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74   as ... #/".** t
5ae0: 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75  hat comment is u
5af0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
5b00: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
5b10: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
5b20: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ode..**.** Other
5b30: 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65   keywords in the
5b40: 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f   comment that fo
5b50: 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20  llows each case 
5b60: 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63  are used to.** c
5b70: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46  onstruct the OPF
5b80: 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76  LG_INITIALIZER v
5b90: 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61  alue that initia
5ba0: 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70  lizes opcodeProp
5bb0: 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f  erty[]..** Keywo
5bc0: 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31  rds include: in1
5bd0: 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32  , in2, in3, out2
5be0: 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74  _prerelease, out
5bf0: 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a  2, out3.  See.**
5c00: 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61   the mkopcodeh.a
5c10: 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64  wk script for ad
5c20: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
5c30: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75  tion..**.** Docu
5c40: 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20  mentation about 
5c50: 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20  VDBE opcodes is 
5c60: 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61  generated by sca
5c70: 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a  nning this file.
5c80: 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20  ** for lines of 
5c90: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70  that contain "Op
5ca0: 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69  code:".  That li
5cb0: 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65  ne and all subse
5cc0: 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74  quent.** comment
5cd0: 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20   lines are used 
5ce0: 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
5cf0: 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  n of the opcode.
5d00: 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69  html documentati
5d10: 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  on.** file..**.*
5d20: 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a  * SUMMARY:.**.**
5d30: 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20       Formatting 
5d40: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
5d50: 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61  scripts that sca
5d60: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20  n this file..** 
5d70: 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61      Do not devia
5d80: 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d  te from the form
5d90: 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72  atting style cur
5da0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a  rently in use..*
5db0: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *.**************
5dc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5de0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
5e00: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
5e10: 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  to * P2 * * *.**
5e20: 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69  .** An unconditi
5e30: 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64  onal jump to add
5e40: 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ress P2..** The 
5e50: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
5e60: 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62   executed will b
5e70: 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74  e .** the one at
5e80: 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74   index P2 from t
5e90: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a  he beginning of.
5ea0: 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  ** the program..
5eb0: 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72  **.** The P1 par
5ec0: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63  ameter is not ac
5ed0: 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74  tually used by t
5ee0: 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77  his opcode.  How
5ef0: 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73  ever, it.** is s
5f00: 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20  ometimes set to 
5f10: 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61  1 instead of 0 a
5f20: 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
5f30: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
5f40: 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  ll.** that this 
5f50: 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74  Goto is the bott
5f60: 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64  om of a loop and
5f70: 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20   that the lines 
5f80: 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20  from P2 down.** 
5f90: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  to the current l
5fa0: 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ine should be in
5fb0: 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41  dented for EXPLA
5fc0: 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  IN output..*/.ca
5fd0: 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20  se OP_Goto: {   
5fe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
5ff0: 70 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d  p */.  pc = pOp-
6000: 3e 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f  >p2 - 1;..  /* O
6010: 70 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20  pcodes that are 
6020: 75 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74  used as the bott
6030: 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50  om of a loop (OP
6040: 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a  _Next, OP_Prev,.
6050: 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f    ** OP_VNext, O
6060: 50 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72  P_RowSetNext, or
6070: 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20   OP_SorterNext) 
6080: 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70  all jump here up
6090: 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69  on.  ** completi
60a0: 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65  on.  Check to se
60b0: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
60c0: 65 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65  errupt() has bee
60d0: 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72  n called.  ** or
60e0: 20 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   if the progress
60f0: 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20   callback needs 
6100: 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a  to be invoked. .
6110: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63    **.  ** This c
6120: 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63  ode uses unstruc
6130: 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61  tured "goto" sta
6140: 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73  tements and does
6150: 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e   not look clean.
6160: 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69  .  ** But that i
6170: 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f  s not due to slo
6180: 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74  ppy coding habit
6190: 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77  s. The code is w
61a0: 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a  ritten this.  **
61b0: 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d   way for perform
61c0: 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68  ance, to avoid h
61d0: 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65  aving to run the
61e0: 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70   interrupt and p
61f0: 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65  rogress.  ** che
6200: 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63  cks on every opc
6210: 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73  ode.  This helps
6220: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
6230: 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35  to run about 1.5
6240: 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63  %.  ** faster ac
6250: 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67  cording to "valg
6260: 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68  rind --tool=cach
6270: 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b  egrind" */.check
6280: 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a  _for_interrupt:.
6290: 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49    if( db->u1.isI
62a0: 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74  nterrupted ) got
62b0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  o abort_due_to_i
62c0: 6e 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65  nterrupt;.#ifnde
62d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
62e0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
62f0: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72    /* Call the pr
6300: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6310: 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75  if it is configu
6320: 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75  red and the requ
6330: 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a  ired number.  **
6340: 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76   of VDBE ops hav
6350: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
6360: 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68  (either since th
6370: 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  is invocation of
6380: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
6390: 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65  eExec() or since
63a0: 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70   last time the p
63b0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
63c0: 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20   was called)..  
63d0: 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65  ** If the progre
63e0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  ss callback retu
63f0: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78  rns non-zero, ex
6400: 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  it the virtual m
6410: 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a  achine with.  **
6420: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53   a return code S
6430: 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a  QLITE_ABORT..  *
6440: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  /.  if( db->xPro
6450: 67 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53  gress!=0 && nVmS
6460: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
6470: 6d 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72  mit ){.    asser
6480: 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  t( db->nProgress
6490: 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50  Ops!=0 );.    nP
64a0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e  rogressLimit = n
64b0: 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72  VmStep + db->nPr
64c0: 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d  ogressOps - (nVm
64d0: 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65  Step%db->nProgre
64e0: 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20  ssOps);.    if( 
64f0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
6500: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20  ->pProgressArg) 
6510: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
6520: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
6530: 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
6540: 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20  error_halt;.    
6550: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a  }.  }.#endif.  .
6560: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6570: 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31  pcode:  Gosub P1
6580: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6590: 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
65a0: 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72  t address onto r
65b0: 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e  egister P1.** an
65c0: 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61  d then jump to a
65d0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61  ddress P2..*/.ca
65e0: 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20  se OP_Gosub: {  
65f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
6600: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
6610: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
6620: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
6630: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
6640: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6650: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6660: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
6670: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d  In1)==0 );.  mem
6680: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
6690: 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e   pIn1);.  pIn1->
66a0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
66b0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70  .  pIn1->u.i = p
66c0: 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  c;.  REGISTER_TR
66d0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
66e0: 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  1);.  pc = pOp->
66f0: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6700: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6710: 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20  Return P1 * * * 
6720: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
6730: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
6740: 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61  tion after the a
6750: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
6760: 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a  er P1.  After.**
6770: 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73   the jump, regis
6780: 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75  ter P1 becomes u
6790: 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  ndefined..*/.cas
67a0: 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20  e OP_Return: {  
67b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
67c0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
67d0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
67e0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
67f0: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
6800: 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  pc = (int)pIn1->
6810: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  u.i;.  pIn1->fla
6820: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
6830: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
6840: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43  /* Opcode: InitC
6850: 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50  oroutine P1 P2 P
6860: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  3 * *.**.** Set 
6870: 75 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73  up register P1 s
6880: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59  o that it will Y
6890: 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f  ield to the coro
68a0: 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64  utine.** located
68b0: 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a   at address P3..
68c0: 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74  **.** If P2!=0 t
68d0: 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  hen the coroutin
68e0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
68f0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
6900: 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63  lows.** this opc
6910: 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76  ode.  So jump ov
6920: 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  er the coroutine
6930: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6940: 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32  to.** address P2
6950: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
6960: 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a  : EndCoroutine.*
6970: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f  /.case OP_InitCo
6980: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f  routine: {     /
6990: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
69a0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
69b0: 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e    pOp->p1<=(p->n
69c0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
69d0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
69e0: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p2>=0 && pOp->
69f0: 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61  p2<p->nOp );.  a
6a00: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
6a10: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e  0 && pOp->p3<p->
6a20: 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  nOp );.  pOut = 
6a30: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6a40: 20 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d    assert( !VdbeM
6a50: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20  emDynamic(pOut) 
6a60: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
6a70: 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20   pOp->p3 - 1;.  
6a80: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
6a90: 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70  M_Int;.  if( pOp
6aa0: 2d 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70 2d  ->p2 ) pc = pOp-
6ab0: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
6ac0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6ad0: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31   EndCoroutine P1
6ae0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
6af0: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
6b00: 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  t the address in
6b10: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
6b20: 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70  a Yield..** Jump
6b30: 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d   to the P2 param
6b40: 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69 65  eter of that Yie
6b50: 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65  ld..** After the
6b60: 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20   jump, register 
6b70: 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66  P1 becomes undef
6b80: 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ined..**.** See 
6b90: 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74  also: InitCorout
6ba0: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  ine.*/.case OP_E
6bb0: 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  ndCoroutine: {  
6bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
6bd0: 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61  */.  VdbeOp *pCa
6be0: 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26  ller;.  pIn1 = &
6bf0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6c00: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
6c10: 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
6c20: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
6c30: 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d  >u.i>=0 && pIn1-
6c40: 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  >u.i<p->nOp );. 
6c50: 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b   pCaller = &aOp[
6c60: 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73  pIn1->u.i];.  as
6c70: 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f  sert( pCaller->o
6c80: 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20  pcode==OP_Yield 
6c90: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  );.  assert( pCa
6ca0: 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70  ller->p2>=0 && p
6cb0: 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f  Caller->p2<p->nO
6cc0: 70 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c  p );.  pc = pCal
6cd0: 6c 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70  ler->p2 - 1;.  p
6ce0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6cf0: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
6d00: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6d10: 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20  e:  Yield P1 P2 
6d20: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
6d30: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
6d40: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
6d50: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
6d60: 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73  P1.  This.** has
6d70: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79   the effect of y
6d80: 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72  ielding to a cor
6d90: 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  outine..**.** If
6da0: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74   the coroutine t
6db0: 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20  hat is launched 
6dc0: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
6dd0: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
6de0: 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e   Yield or Return
6df0: 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74   then continue t
6e00: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6e10: 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a  uction.  But if.
6e20: 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  ** the coroutine
6e30: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
6e40: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
6e50: 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f  ds with.** EndCo
6e60: 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75  routine, then ju
6e70: 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20  mp to P2 rather 
6e80: 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20  than continuing 
6e90: 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74  with the.** next
6ea0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
6eb0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
6ec0: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
6ed0: 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20  ase OP_Yield: { 
6ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6ef0: 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  1, jump */.  int
6f00: 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20   pcDest;.  pIn1 
6f10: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6f20: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
6f30: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
6f40: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
6f50: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6f60: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
6f70: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
6f80: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6f90: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6fa0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6fb0: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
6fc0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6fd0: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
6fe0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
6ff0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
7000: 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74   r[P3]=null halt
7010: 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
7020: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
7030: 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73  er P3.  If it is
7040: 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20   NULL then Halt 
7050: 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74  using.** paramet
7060: 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50  er P1, P2, and P
7070: 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72  4 as if this wer
7080: 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63  e a Halt instruc
7090: 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  tion.  If the.**
70a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
70b0: 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  er P3 is not NUL
70c0: 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  L, then this rou
70d0: 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tine is a no-op.
70e0: 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
70f0: 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31  eter should be 1
7100: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
7110: 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  tIfNull: {      
7120: 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  /* in3 */.  pIn3
7130: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
7140: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  ];.  if( (pIn3->
7150: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
7160: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
7170: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
7180: 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a  into OP_Halt */.
7190: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
71a0: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50  alt P1 P2 * P4 P
71b0: 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d  5.**.** Exit imm
71c0: 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f  ediately.  All o
71d0: 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63  pen cursors, etc
71e0: 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61   are closed.** a
71f0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a  utomatically..**
7200: 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65  .** P1 is the re
7210: 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e  sult code return
7220: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78  ed by sqlite3_ex
7230: 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65  ec(), sqlite3_re
7240: 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c  set(),.** or sql
7250: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e  ite3_finalize().
7260: 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68    For a normal h
7270: 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  alt, this should
7280: 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30   be SQLITE_OK (0
7290: 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73  )..** For errors
72a0: 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65  , it can be some
72b0: 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49   other value.  I
72c0: 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20  f P1!=0 then P2 
72d0: 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a  will determine.*
72e0: 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  * whether or not
72f0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   to rollback the
7300: 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
7310: 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f  tion.  Do not ro
7320: 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d  llback.** if P2=
7330: 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65  =OE_Fail. Do the
7340: 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d   rollback if P2=
7350: 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49  =OE_Rollback.  I
7360: 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a  f P2==OE_Abort,.
7370: 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74  ** then back out
7380: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
7390: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
73a0: 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63  during this exec
73b0: 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ution of the.** 
73c0: 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74  VDBE, but do not
73d0: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
73e0: 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a  ansaction. .**.*
73f0: 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e  * If P4 is not n
7400: 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ull then it is a
7410: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
7420: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35  string..**.** P5
7430: 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77   is a value betw
7440: 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63  een 0 and 4, inc
7450: 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64  lusive, that mod
7460: 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72  ifies the P4 str
7470: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a  ing..**.**    0:
7480: 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a    (no change).**
7490: 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c      1:  NOT NULL
74a0: 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65   contraint faile
74b0: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20  d: P4.**    2:  
74c0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
74d0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
74e0: 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e     3:  CHECK con
74f0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
7500: 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52  P4.**    4:  FOR
7510: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
7520: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7530: 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
7540: 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73  t zero and P4 is
7550: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72   NULL, then ever
7560: 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65  ything after the
7570: 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74   ":" is.** omitt
7580: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ed..**.** There 
7590: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
75a0: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
75b0: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
75c0: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
75d0: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
75e0: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
75f0: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
7600: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
7610: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
7620: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
7630: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
7640: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
7650: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
7660: 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  e;.  const char 
7670: 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28  *zLogFmt;..  if(
7680: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
7690: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
76a0: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
76b0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
76c0: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
76d0: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
76e0: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65  ame. */.    Vdbe
76f0: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20  Frame *pFrame = 
7700: 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  p->pFrame;.    p
7710: 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
7720: 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20  e->pParent;.    
7730: 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20  p->nFrame--;.   
7740: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7750: 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
7760: 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d  hange);.    pc =
7770: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
7780: 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29  eRestore(pFrame)
7790: 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20  ;.    lastRowid 
77a0: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
77b0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
77c0: 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
77d0: 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74       /* Instruct
77e0: 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50  ion pc is the OP
77f0: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
7800: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
7810: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
7820: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
7830: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
7840: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
7850: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
7860: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
7870: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
7880: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
7890: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
78a0: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
78b0: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
78c0: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
78d0: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
78e0: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
78f0: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
7900: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
7910: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
7920: 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70   */.      pc = p
7930: 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a  ->aOp[pc].p2-1;.
7940: 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20      }.    aOp = 
7950: 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d  p->aOp;.    aMem
7960: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
7970: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e  break;.  }.  p->
7980: 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  rc = pOp->p1;.  
7990: 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
79a0: 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20   (u8)pOp->p2;.  
79b0: 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66  p->pc = pc;.  if
79c0: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
79d0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
79e0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
79f0: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
7a00: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
7a10: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
7a20: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
7a60: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73  KEY" };.      as
7a70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31  sert( pOp->p5>=1
7a80: 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29   && pOp->p5<=4 )
7a90: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7aa0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  ( pOp->p5==1 );.
7ab0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7ac0: 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20  pOp->p5==2 );.  
7ad0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7ae0: 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20  p->p5==3 );.    
7af0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7b00: 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20  >p5==4 );.      
7b10: 7a 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70  zType = azType[p
7b20: 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d  Op->p5-1];.    }
7b30: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70  else{.      zTyp
7b40: 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  e = 0;.    }.   
7b50: 20 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d   assert( zType!=
7b60: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  0 || pOp->p4.z!=
7b70: 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74  0 );.    zLogFmt
7b80: 20 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20   = "abort at %d 
7b90: 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20  in [%s]: %s";.  
7ba0: 20 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70    if( zType && p
7bb0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
7bc0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
7bd0: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
7be0: 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  db, "%s constrai
7bf0: 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20  nt failed: %s", 
7c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c10: 20 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70          zType, p
7c20: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
7c30: 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
7c40: 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  .z ){.      sqli
7c50: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
7c60: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
7c70: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
7c80: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7c90: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
7ca0: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
7cb0: 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  b, "%s constrain
7cc0: 74 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65  t failed", zType
7cd0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
7ce0: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
7cf0: 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70  , zLogFmt, pc, p
7d00: 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d  ->zSql, p->zErrM
7d10: 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  sg);.  }.  rc = 
7d20: 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
7d30: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  p);.  assert( rc
7d40: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
7d50: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7d60: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52  | rc==SQLITE_ERR
7d70: 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  OR );.  if( rc==
7d80: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
7d90: 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
7da0: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
7db0: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
7dc0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
7dd0: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
7de0: 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
7df0: 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  NT );.    assert
7e00: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
7e10: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
7e20: 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44  Cons>0 || db->nD
7e30: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30  eferredImmCons>0
7e40: 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e   );.    rc = p->
7e50: 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc ? SQLITE_ERRO
7e60: 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  R : SQLITE_DONE;
7e70: 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
7e80: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
7e90: 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50  pcode: Integer P
7ea0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
7eb0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31  nopsis: r[P2]=P1
7ec0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
7ed0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
7ee0: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
7ef0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
7f00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
7f10: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
7f20: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7f30: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
7f40: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
7f50: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7f60: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
7f70: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
7f80: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
7f90: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
7fa0: 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  to a 64-bit inte
7fb0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  ger value..** Wr
7fc0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
7fd0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7fe0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36  .*/.case OP_Int6
7ff0: 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  4: {           /
8000: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
8010: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
8020: 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29  Op->p4.pI64!=0 )
8030: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
8040: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
8050: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
8060: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
8070: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
8080: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20   Opcode: Real * 
8090: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
80a0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
80b0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
80c0: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
80d0: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
80e0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
80f0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
8100: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8110: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b  .case OP_Real: {
8120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
8130: 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c  ame as TK_FLOAT,
8140: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8150: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
8160: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
8170: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
8180: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
8190: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
81a0: 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.r = *pOp->p4.
81b0: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
81c0: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
81d0: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
81e0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
81f0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8200: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
8210: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
8220: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
8230: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
8240: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
8250: 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20  * into a String 
8260: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
8270: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
8280: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
8290: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
82a0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
82b0: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
82c0: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
82d0: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
82e0: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
82f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
8300: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
8310: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
8320: 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  ING, out2-prerel
8330: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
8340: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
8350: 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
8360: 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70  = OP_String;.  p
8370: 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33  Op->p1 = sqlite3
8380: 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34  Strlen30(pOp->p4
8390: 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .z);..#ifndef SQ
83a0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
83b0: 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d    if( encoding!=
83c0: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
83d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
83e0: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
83f0: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31  t, pOp->p4.z, -1
8400: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
8410: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8420: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
8430: 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20  E_TOOBIG ) goto 
8440: 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28  too_big;.    if(
8450: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
8460: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
8470: 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
8480: 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ding) ) goto no_
8490: 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
84a0: 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e   pOut->szMalloc>
84b0: 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  0 && pOut->zMall
84c0: 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20  oc==pOut->z );. 
84d0: 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d     assert( VdbeM
84e0: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d  emDynamic(pOut)=
84f0: 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 );.    pOut->
8500: 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  szMalloc = 0;.  
8510: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
8520: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
8530: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
8540: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
8550: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
8560: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
8570: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
8580: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
8590: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
85a0: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
85b0: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
85c0: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64  Out->n;.  }.#end
85d0: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
85e0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
85f0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
8600: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
8610: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
8620: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
8630: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
8640: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
8650: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
8660: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
8670: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8680: 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a  ]='P4' (len=P1).
8690: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
86a0: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
86b0: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
86c0: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
86d0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
86e0: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
86f0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8700: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
8710: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8720: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
8730: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
8740: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
8750: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
8760: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
8770: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
8780: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
8790: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
87a0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
87b0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
87c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
87d0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
87e0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
87f0: 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  ..P3]=NULL.**.**
8800: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
8810: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
8820: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
8830: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
8840: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
8850: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8860: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
8870: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
8880: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
8890: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
88a0: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
88b0: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
88c0: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
88d0: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
88e0: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
88f0: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
8900: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
8910: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
8920: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
8930: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
8940: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
8950: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
8960: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
8970: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
8980: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
8990: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
89a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
89b0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
89c0: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
89d0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20  nullFlag;.  cnt 
89e0: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
89f0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
8a00: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
8a10: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8a20: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
8a30: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
8a40: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
8a50: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
8a60: 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63  Null;.  while( c
8a70: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  nt>0 ){.    pOut
8a80: 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ++;.    memAbout
8a90: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
8aa0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
8ab0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
8ac0: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  t);.    pOut->fl
8ad0: 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a  ags = nullFlag;.
8ae0: 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20      cnt--;.  }. 
8af0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8b00: 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50  code: SoftNull P
8b10: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e  1 * * * *.** Syn
8b20: 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55  opsis:  r[P1]=NU
8b30: 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67  LL.**.** Set reg
8b40: 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76 65  ister P1 to have
8b50: 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20   the value NULL 
8b60: 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f  as seen by the O
8b70: 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20  P_MakeRecord.** 
8b80: 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74  instruction, but
8b90: 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79   do not free any
8ba0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
8bb0: 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65  memory associate
8bc0: 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65  d with.** the re
8bd0: 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20  gister, so that 
8be0: 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61 73  if the value was
8bf0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
8c00: 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72  b that was.** pr
8c10: 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20  eviously copied 
8c20: 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20  using OP_SCopy, 
8c30: 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20  the copies will 
8c40: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76  continue to be v
8c50: 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alid..*/.case OP
8c60: 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61  _SoftNull: {.  a
8c70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
8c80: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
8c90: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
8ca0: 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  ) );.  pOut = &a
8cb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
8cc0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pOut->flags = (p
8cd0: 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e  Out->flags|MEM_N
8ce0: 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69  ull)&~MEM_Undefi
8cf0: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
8d00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
8d10: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
8d20: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8d30: 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  =P4 (len=P1).**.
8d40: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
8d50: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
8d60: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
8d70: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
8d80: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
8d90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f  ..*/.case OP_Blo
8da0: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
8db0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
8dc0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
8dd0: 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53  rt( pOp->p1 <= S
8de0: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
8df0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
8e00: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
8e10: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
8e20: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
8e30: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
8e40: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
8e50: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
8e60: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8e70: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
8e80: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
8e90: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8ea0: 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34  =parameter(P1,P4
8eb0: 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ).**.** Transfer
8ec0: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
8ed0: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
8ee0: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
8ef0: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
8f00: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
8f10: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
8f20: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e  e appears in P4.
8f30: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
8f40: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
8f50: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
8f60: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
8f70: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
8f80: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
8f90: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8fa0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20  */.  Mem *pVar; 
8fb0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62        /* Value b
8fc0: 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64  eing transferred
8fd0: 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
8fe0: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
8ff0: 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  >p1<=p->nVar );.
9000: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9010: 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  4.z==0 || pOp->p
9020: 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f  4.z==p->azVar[pO
9030: 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56  p->p1-1] );.  pV
9040: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f  ar = &p->aVar[pO
9050: 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66  p->p1 - 1];.  if
9060: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
9070: 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a  TooBig(pVar) ){.
9080: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
9090: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
90a0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
90b0: 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45  y(pOut, pVar, ME
90c0: 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44  M_Static);.  UPD
90d0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
90e0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
90f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
9100: 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ove P1 P2 P3 * *
9110: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
9120: 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d  [P2@P3]=r[P1@P3]
9130: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
9140: 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  P3 values in reg
9150: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
9160: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
9170: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
9180: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
9190: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65   P1..P1+P3-1 are
91a0: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
91b0: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
91c0: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
91d0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
91e0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
91f0: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
9200: 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61  verlap.  It is a
9210: 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50  n error.** for P
9220: 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  3 to be less tha
9230: 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n 1..*/.case OP_
9240: 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Move: {.  int n;
9250: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9260: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
9270: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
9280: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
9290: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
92a0: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
92b0: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
92c0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
92d0: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
92e0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
92f0: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
9300: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
9310: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
9320: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
9330: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
9340: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
9350: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9360: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
9370: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
9380: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
9390: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
93a0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
93b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
93c0: 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  1<=&aMem[(p->nMe
93d0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
93e0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
93f0: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
9400: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9410: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9420: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9430: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
9440: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
9450: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
9460: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9470: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
9480: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9490: 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70  <&aMem[p1+pOp->p
94a0: 33 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  3] ){.      pOut
94b0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
94c0: 70 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p1 - pOp->p2;.  
94d0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 52    }.#endif.    R
94e0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
94f0: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
9500: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
9510: 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e  +;.  }while( --n
9520: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
9530: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
9540: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9550: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50  Synopsis: r[P2@P
9560: 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a  3+1]=r[P1@P3+1].
9570: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70  **.** Make a cop
9580: 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 50  y of registers P
9590: 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65  1..P1+P3 into re
95a0: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
95b0: 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  3..**.** This in
95c0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
95d0: 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74  a deep copy of t
95e0: 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70  he value.  A dup
95f0: 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64  licate.** is mad
9600: 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20  e of any string 
9610: 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74  or blob constant
9620: 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53  .  See also OP_S
9630: 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Copy..*/.case OP
9640: 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e  _Copy: {.  int n
9650: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  ;..  n = pOp->p3
9660: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
9670: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9680: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9690: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
96a0: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68  ut!=pIn1 );.  wh
96b0: 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71  ile( 1 ){.    sq
96c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
96d0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
96e0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
96f0: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
9700: 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66  ze(pOut);.#ifdef
9710: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9720: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
9730: 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  om = 0;.#endif. 
9740: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
9750: 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  E(pOp->p2+pOp->p
9760: 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  3-n, pOut);.    
9770: 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62  if( (n--)==0 ) b
9780: 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b  reak;.    pOut++
9790: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
97a0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
97b0: 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50   Opcode: SCopy P
97c0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
97d0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b  nopsis: r[P2]=r[
97e0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  P1].**.** Make a
97f0: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
9800: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
9810: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
9820: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
9830: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68  ction makes a sh
9840: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68  allow copy of th
9850: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65  e value.  If the
9860: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73   value.** is a s
9870: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74  tring or blob, t
9880: 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20  hen the copy is 
9890: 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  only a pointer t
98a0: 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  o the.** origina
98b0: 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74  l and hence if t
98c0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e  he original chan
98d0: 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20  ges so will the 
98e0: 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20  copy..** Worse, 
98f0: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
9900: 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20  is deallocated, 
9910: 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73  the copy becomes
9920: 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75   invalid..** Thu
9930: 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75  s the program mu
9940: 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  st guarantee tha
9950: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  t the original w
9960: 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a  ill not change.*
9970: 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66  * during the lif
9980: 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70  etime of the cop
9990: 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20  y.  Use OP_Copy 
99a0: 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65  to make a comple
99b0: 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63  te.** copy..*/.c
99c0: 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20  ase OP_SCopy: { 
99d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
99e0: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
99f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9a00: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9a10: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
9a20: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
9a30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9a40: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
9a50: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
9a60: 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  m);.#ifdef SQLIT
9a70: 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
9a80: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d  ut->pScopyFrom==
9a90: 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  0 ) pOut->pScopy
9aa0: 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e  From = pIn1;.#en
9ab0: 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  dif.  break;.}..
9ac0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
9ad0: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
9ae0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f  .** Synopsis:  o
9af0: 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a  utput=r[P1@P2].*
9b00: 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
9b10: 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31  rs P1 through P1
9b20: 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20  +P2-1 contain a 
9b30: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a  single row of.**
9b40: 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f   results. This o
9b50: 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65  pcode causes the
9b60: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
9b70: 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74  call to terminat
9b80: 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c  e.** with an SQL
9b90: 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63  ITE_ROW return c
9ba0: 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20  ode and it sets 
9bb0: 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  up the sqlite3_s
9bc0: 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  tmt.** structure
9bd0: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65   to provide acce
9be0: 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e  ss to the r(P1).
9bf0: 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75  .r(P1+P2-1) valu
9c00: 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  es as.** the res
9c10: 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65  ult row..*/.case
9c20: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b   OP_ResultRow: {
9c30: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
9c40: 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28  int i;.  assert(
9c50: 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d   p->nResColumn==
9c60: 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73  pOp->p2 );.  ass
9c70: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
9c80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
9c90: 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  >p1+pOp->p2<=(p-
9ca0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
9cb0: 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20  )+1 );..#ifndef 
9cc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
9cd0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
9ce0: 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72  /* Run the progr
9cf0: 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74  ess counter just
9d00: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
9d10: 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  g..  */.  if( db
9d20: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20  ->xProgress!=0. 
9d30: 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50    && nVmStep>=nP
9d40: 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20  rogressLimit.   
9d50: 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  && db->xProgress
9d60: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
9d70: 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72  g)!=0.  ){.    r
9d80: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
9d90: 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76  RUPT;.    goto v
9da0: 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
9db0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
9dc0: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
9dd0: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
9de0: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
9df0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
9e00: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
9e10: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
9e20: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
9e30: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
9e40: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
9e50: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
9e60: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
9e70: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
9e80: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
9e90: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
9ea0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
9eb0: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
9ec0: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
9ed0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9ee0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
9ef0: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
9f00: 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  al );.    break;
9f10: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
9f20: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
9f30: 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ws flag is set i
9f40: 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20  n sqlite3.flags 
9f50: 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  mask, then .  **
9f60: 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   DML statements 
9f70: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
9f80: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65  de to return the
9f90: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
9fa0: 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74  .  ** modified t
9fb0: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
9fc0: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
9fd0: 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a   that a VM that.
9fe0: 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61    ** opens a sta
9ff0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a000: 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68  on may invoke th
a010: 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a  is opcode..  **.
a020: 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69    ** In case thi
a030: 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74  s is such a stat
a040: 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79  ement, close any
a050: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a060: 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e  action.  ** open
a070: 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65  ed by this VM be
a080: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63  fore returning c
a090: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73  ontrol to the us
a0a0: 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20  er. This is to. 
a0b0: 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20   ** ensure that 
a0c0: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
a0d0: 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79  ctions are alway
a0e0: 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76  s nested, not ov
a0f0: 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20  erlapping..  ** 
a100: 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74  If the open stat
a110: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
a120: 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20  n is not closed 
a130: 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75  here, then the u
a140: 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65  ser.  ** may ste
a150: 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61  p another VM tha
a160: 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20  t opens its own 
a170: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a180: 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a  ction. This.  **
a190: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65   may lead to ove
a1a0: 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65  rlapping stateme
a1b0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  nt transactions.
a1c0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
a1d0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
a1e0: 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20  tion is never a 
a1f0: 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61  top-level transa
a200: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20  ction.  Hence.  
a210: 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ** the RELEASE c
a220: 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65  all below can ne
a230: 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20  ver fail..  */. 
a240: 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61   assert( p->iSta
a250: 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  tement==0 || db-
a260: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
a270: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20  untRows );.  rc 
a280: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f  = sqlite3VdbeClo
a290: 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53  seStatement(p, S
a2a0: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
a2b0: 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
a2c0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b  c!=SQLITE_OK) ){
a2d0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
a2e0: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
a2f0: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
a300: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
a310: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
a320: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
a330: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
a340: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
a350: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
a360: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
a370: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
a380: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
a390: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
a3a0: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
a3b0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
a3c0: 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66  .  ** a side eff
a3d0: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
a3e0: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
a3f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a400: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
a410: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
a420: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
a430: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
a440: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
a450: 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  alize(&pMem[i]);
a460: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
a470: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  em[i].flags & ME
a480: 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20  M_Ephem)==0.    
a490: 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d          || (pMem
a4a0: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d  [i].flags & (MEM
a4b0: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
a4c0: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
a4d0: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
a4e0: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
a4f0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
a500: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
a510: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
a520: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
a530: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
a540: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
a550: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
a560: 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31    p->pc = pc + 1
a570: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
a580: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
a590: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
a5a0: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
a5b0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
a5c0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
a5d0: 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]+r[P1].**.** 
a5e0: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
a5f0: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
a600: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
a610: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
a620: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
a630: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
a640: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
a650: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
a660: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
a670: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
a680: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
a690: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
a6a0: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
a6b0: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
a6c0: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
a6d0: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
a6e0: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
a6f0: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
a700: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
a710: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
a720: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
a730: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
a740: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
a750: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
a760: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
a770: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
a780: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
a790: 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  e;..  pIn1 = &aM
a7a0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
a7b0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
a7c0: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
a7d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
a7e0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
a7f0: 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49  Out );.  if( (pI
a800: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
a810: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
a820: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
a830: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
a840: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
a850: 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70  k;.  }.  if( Exp
a860: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c  andBlob(pIn1) ||
a870: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
a880: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
a890: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
a8a0: 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
a8b0: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20  Stringify(pIn2, 
a8c0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79  encoding);.  nBy
a8d0: 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70  te = pIn1->n + p
a8e0: 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42  In2->n;.  if( nB
a8f0: 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
a900: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
a910: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
a920: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69  too_big;.  }.  i
a930: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
a940: 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
a950: 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d  )nByte+2, pOut==
a960: 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74  pIn2) ){.    got
a970: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
a980: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
a990: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
a9a0: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
a9b0: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
a9c0: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
a9d0: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20  pIn2->n);.  }.  
a9e0: 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b  memcpy(&pOut->z[
a9f0: 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e  pIn2->n], pIn1->
aa00: 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70  z, pIn1->n);.  p
aa10: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b  Out->z[nByte]=0;
aa20: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
aa30: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
aa40: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
aa50: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
aa60: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
aa70: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
aa80: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
aa90: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
aaa0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
aab0: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
aac0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
aad0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
aae0: 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41  1]+r[P2].**.** A
aaf0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
ab00: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
ab10: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ab20: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
ab30: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
ab40: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
ab50: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
ab60: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
ab70: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
ab80: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
ab90: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
aba0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
abb0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b    r[P3]=r[P1]*r[
abc0: 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  P2].**.**.** Mul
abd0: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
abe0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
abf0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
ac00: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
ac10: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
ac20: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
ac30: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
ac40: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
ac50: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
ac60: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
ac70: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
ac80: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
ac90: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
aca0: 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62  -r[P1].**.** Sub
acb0: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
acc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
acd0: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
ace0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
acf0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
ad00: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ad10: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ad20: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
ad30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ad40: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ad50: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
ad60: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
ad70: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
ad80: 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76  /r[P1].**.** Div
ad90: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
ada0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
adb0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
adc0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
add0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
ade0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
adf0: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
ae00: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
ae10: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
ae20: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
ae30: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
ae40: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ae50: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
ae60: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
ae70: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
ae80: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
ae90: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
aea0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b    r[P3]=r[P2]%r[
aeb0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  P1].**.** Comput
aec0: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
aed0: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65  after integer re
aee0: 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76  gister P2 is div
aef0: 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69  ided by .** regi
af00: 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72  ster P1 and stor
af10: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
af20: 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a  register P3. .**
af30: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
af40: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
af50: 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20  zero the result 
af60: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65  is NULL..** If e
af70: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
af80: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
af90: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
afa0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
afc0: 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c  same as TK_PLUS,
afd0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
afe0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72  */.case OP_Subtr
aff0: 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  act:            
b000: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b010: 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  MINUS, in1, in2,
b020: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b030: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20  _Multiply:      
b040: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b050: 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c  as TK_STAR, in1,
b060: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b070: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20  se OP_Divide:   
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b090: 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48  same as TK_SLASH
b0a0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b0b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61   */.case OP_Rema
b0c0: 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20  inder: {        
b0d0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b0e0: 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _REM, in1, in2, 
b0f0: 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62  out3 */.  char b
b100: 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61  Intint;   /* Sta
b110: 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20  rted out as two 
b120: 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73  integer operands
b130: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
b140: 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65        /* Combine
b150: 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72  d MEM_* flags fr
b160: 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a  om both inputs *
b170: 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20  /.  u16 type1;  
b180: 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74      /* Numeric t
b190: 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  ype of left oper
b1a0: 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  and */.  u16 typ
b1b0: 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e2;      /* Nume
b1c0: 72 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68  ric type of righ
b1d0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
b1e0: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
b1f0: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
b200: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
b210: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
b220: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
b230: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
b240: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
b250: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
b260: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
b270: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
b280: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
b290: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
b2a0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
b2b0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
b2c0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70  [pOp->p1];.  typ
b2d0: 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65  e1 = numericType
b2e0: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
b2f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
b300: 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72  .  type2 = numer
b310: 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20  icType(pIn2);.  
b320: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
b330: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
b340: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
b350: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
b360: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
b370: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
b380: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
b390: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
b3a0: 28 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26  (type1 & type2 &
b3b0: 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a   MEM_Int)!=0 ){.
b3c0: 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75      iA = pIn1->u
b3d0: 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e  .i;.    iB = pIn
b3e0: 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74  2->u.i;.    bInt
b3f0: 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69  int = 1;.    swi
b400: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
b410: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
b420: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28  P_Add:       if(
b430: 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
b440: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
b450: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
b460: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
b470: 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71  ubtract:  if( sq
b480: 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69  lite3SubInt64(&i
b490: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
b4a0: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
b4b0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
b4c0: 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74  iply:  if( sqlit
b4d0: 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69  e3MulInt64(&iB,i
b4e0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
b4f0: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
b500: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
b510: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
b520: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
b530: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
b540: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
b550: 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d  f( iA==-1 && iB=
b560: 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  =SMALLEST_INT64 
b570: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a  ) goto fp_math;.
b580: 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41          iB /= iA
b590: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
b5a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
b5b0: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
b5c0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b5d0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b5e0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b5f0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b600: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
b610: 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20     iB %= iA;.   
b620: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b630: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f    }.    }.    pO
b640: 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20  ut->u.i = iB;.  
b650: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b660: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
b670: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49  .  }else{.    bI
b680: 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61  ntint = 0;.fp_ma
b690: 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  th:.    rA = sql
b6a0: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
b6b0: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
b6c0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
b6d0: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
b6e0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
b6f0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
b700: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
b710: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
b720: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b730: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
b740: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
b750: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b760: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
b770: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
b780: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
b790: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
b7a0: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
b7b0: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
b7c0: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
b7d0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
b7e0: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
b7f0: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
b800: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b810: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b820: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
b830: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
b840: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
b850: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
b860: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
b870: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
b880: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
b890: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b8a0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b8b0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b8c0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b8d0: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
b8e0: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
b8f0: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
b900: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b910: 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  }.    }.#ifdef S
b920: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
b930: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f  ING_POINT.    pO
b940: 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20  ut->u.i = rB;.  
b950: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b960: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
b970: 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73  .#else.    if( s
b980: 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20  qlite3IsNaN(rB) 
b990: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72  ){.      goto ar
b9a0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
b9b0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  is_null;.    }. 
b9c0: 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72     pOut->u.r = r
b9d0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
b9e0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
b9f0: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
ba00: 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45  (type1|type2)&ME
ba10: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
ba20: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
ba30: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
ba40: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
ba50: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
ba60: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
ba70: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
ba80: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
ba90: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
baa0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
bab0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
bac0: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
bad0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
bae0: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
baf0: 65 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68  eq struct. If th
bb00: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
bb10: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
bb20: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
bb30: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
bb40: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
bb50: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
bb60: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
bb70: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
bb80: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
bb90: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
bba0: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
bbb0: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
bbc0: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
bbd0: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
bbe0: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
bbf0: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
bc00: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
bc10: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
bc20: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
bc30: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
bc40: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
bc50: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
bc60: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
bc70: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
bc80: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
bc90: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
bca0: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
bcb0: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
bcc0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
bcd0: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
bce0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
bcf0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
bd00: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
bd10: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
bd20: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
bd30: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20  le.** publicly, 
bd40: 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e  only to user fun
bd50: 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69  ctions defined i
bd60: 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73  n func.c..*/.cas
bd70: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
bd80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
bd90: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
bda0: 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Q );.  if( pOp->
bdb0: 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
bdc0: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
bdd0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
bde0: 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
bdf0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
be00: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
be10: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
be20: 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28  sis: r[P3]=func(
be30: 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
be40: 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75  Invoke a user fu
be50: 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20  nction (P4 is a 
be60: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e  pointer to a Fun
be70: 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20  ction structure 
be80: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20  that.** defines 
be90: 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69  the function) wi
bea0: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
beb0: 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
bec0: 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75  ter P2 and.** su
bed0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
bee0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
bef0: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ction is stored 
bf00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
bf10: 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  ** Register P3 m
bf20: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
bf30: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
bf40: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
bf50: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
bf60: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
bf70: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
bf80: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
bf90: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
bfa0: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
bfb0: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
bfc0: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
bfd0: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
bfe0: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
bff0: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
c000: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
c010: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
c020: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
c030: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
c040: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
c050: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
c060: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
c070: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
c080: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
c090: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
c0a0: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
c0b0: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
c0c0: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
c0d0: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
c0e0: 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67   AggStep and Agg
c0f0: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
c100: 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69  _Function: {.  i
c110: 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  nt i;.  Mem *pAr
c120: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  g;.  sqlite3_con
c130: 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
c140: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
c150: 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e  l;.  int n;..  n
c160: 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70   = pOp->p5;.  ap
c170: 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
c180: 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
c190: 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73  || n==0 );.  ass
c1a0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
c1b0: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
c1c0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
c1d0: 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d 20  );.  ctx.pOut = 
c1e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
c1f0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
c200: 67 65 28 70 2c 20 63 74 78 2e 70 4f 75 74 29 3b  ge(p, ctx.pOut);
c210: 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ..  assert( n==0
c220: 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
c230: 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d  & pOp->p2+n<=(p-
c240: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
c250: 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  )+1) );.  assert
c260: 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
c270: 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
c280: 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72  p->p2+n );.  pAr
c290: 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  g = &aMem[pOp->p
c2a0: 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  2];.  for(i=0; i
c2b0: 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29  <n; i++, pArg++)
c2c0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
c2d0: 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29  mIsValid(pArg) )
c2e0: 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
c2f0: 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68   pArg;.    Deeph
c300: 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b  emeralize(pArg);
c310: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
c320: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70  ACE(pOp->p2+i, p
c330: 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  Arg);.  }..  ass
c340: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
c350: 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a  ==P4_FUNCDEF );.
c360: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
c370: 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63  p->p4.pFunc;.  c
c380: 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63  tx.iOp = pc;.  c
c390: 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20  tx.pVdbe = p;.  
c3a0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 63  MemSetTypeFlag(c
c3b0: 74 78 2e 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  tx.pOut, MEM_Nul
c3c0: 6c 29 3b 0a 20 20 63 74 78 2e 66 45 72 72 6f 72  l);.  ctx.fError
c3d0: 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d  OrAux = 0;.  db-
c3e0: 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
c3f0: 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e  tRowid;.  (*ctx.
c400: 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63  pFunc->xFunc)(&c
c410: 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f  tx, n, apVal); /
c420: 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
c430: 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f  3230 */.  lastRo
c440: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
c450: 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65  wid;  /* Remembe
c460: 72 20 72 6f 77 69 64 20 63 68 61 6e 67 65 73 20  r rowid changes 
c470: 6d 61 64 65 20 62 79 20 78 46 75 6e 63 20 2a 2f  made by xFunc */
c480: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
c490: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
c4a0: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
c4b0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
c4c0: 20 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72    if( ctx.fError
c4d0: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
c4e0: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
c4f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
c500: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
c510: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
c520: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
c530: 28 63 74 78 2e 70 4f 75 74 29 29 3b 0a 20 20 20  (ctx.pOut));.   
c540: 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
c550: 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ror;.    }.    s
c560: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
c570: 41 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70  AuxData(p, pc, p
c580: 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20  Op->p1);.  }..  
c590: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
c5a0: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
c5b0: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
c5c0: 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33   P3 */.  sqlite3
c5d0: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
c5e0: 6e 67 28 63 74 78 2e 70 4f 75 74 2c 20 65 6e 63  ng(ctx.pOut, enc
c5f0: 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 73 71  oding);.  if( sq
c600: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
c610: 69 67 28 63 74 78 2e 70 4f 75 74 29 20 29 7b 0a  ig(ctx.pOut) ){.
c620: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
c630: 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45  ;.  }..  REGISTE
c640: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
c650: 20 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 55 50   ctx.pOut);.  UP
c660: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c670: 45 28 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 62  E(ctx.pOut);.  b
c680: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
c690: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
c6a0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
c6b0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
c6c0: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
c6d0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
c6e0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
c6f0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
c700: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
c710: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c720: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c730: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c740: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c750: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c760: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
c770: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
c780: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
c790: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
c7a0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
c7b0: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
c7c0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
c7d0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
c7e0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
c7f0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c800: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
c810: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
c820: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
c830: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
c840: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
c850: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c860: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
c870: 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a  =r[P2]<<r[P1].**
c880: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
c890: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
c8a0: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
c8b0: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
c8c0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
c8d0: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
c8e0: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
c8f0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
c900: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c910: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c920: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c930: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c940: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c950: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
c960: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
c970: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
c980: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
c990: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
c9a0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
c9b0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
c9c0: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
c9d0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
c9e0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
c9f0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
ca00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
ca10: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
ca20: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
ca30: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
ca40: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
ca50: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ca60: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
ca70: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
ca80: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ca90: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
caa0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
cab0: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cad0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
cae0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
caf0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
cb00: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
cb10: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cb20: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
cb30: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
cb40: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
cb50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
cb60: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
cb70: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
cb80: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
cb90: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
cba0: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
cbb0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
cbc0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
cbd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
cbe0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
cbf0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
cc00: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
cc10: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
cc20: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
cc30: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
cc40: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
cc50: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
cc60: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
cc70: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
cc80: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
cc90: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
cca0: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
ccb0: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
ccc0: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
ccd0: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
cce0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
ccf0: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
cd00: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
cd10: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
cd20: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
cd30: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
cd40: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
cd50: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
cd60: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
cd70: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
cd80: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
cd90: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
cda0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
cdb0: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
cdc0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
cdd0: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
cde0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
cdf0: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
ce00: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
ce10: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
ce20: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
ce30: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
ce40: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
ce50: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
ce60: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
ce70: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
ce80: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
ce90: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
cea0: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
ceb0: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
cec0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
ced0: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
cee0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
cef0: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
cf00: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
cf10: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
cf20: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
cf30: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
cf40: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
cf50: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
cf60: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
cf70: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
cf80: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
cf90: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
cfa0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
cfb0: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
cfc0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
cfd0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
cfe0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
cff0: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
d000: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
d010: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
d020: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
d030: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
d040: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d050: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
d060: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
d070: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
d080: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
d090: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
d0a0: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
d0b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
d0c0: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
d0d0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
d0e0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d0f0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
d100: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
d110: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
d120: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
d130: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
d140: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
d150: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d160: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
d170: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
d180: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d190: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d1a0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
d1b0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
d1c0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
d1d0: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
d1e0: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
d1f0: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
d200: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
d210: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
d220: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
d230: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
d240: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
d250: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
d260: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
d270: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
d280: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
d290: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
d2a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d2b0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
d2c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
d2d0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
d2e0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
d2f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
d300: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
d310: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
d320: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
d330: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
d340: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
d350: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
d360: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
d370: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
d380: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
d390: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
d3a0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
d3b0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
d3c0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
d3d0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
d3e0: 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65  - 1;.        bre
d3f0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
d400: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
d410: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
d420: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
d430: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
d440: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
d450: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
d460: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
d470: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
d480: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
d490: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
d4a0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
d4b0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
d4c0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
d4d0: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
d4e0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
d4f0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
d500: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
d510: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
d520: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
d530: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
d540: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
d550: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
d560: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
d570: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
d580: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
d590: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
d5a0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
d5b0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
d5c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
d5d0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
d5e0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d5f0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
d600: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d610: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
d620: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
d630: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
d640: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
d650: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d660: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
d670: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
d680: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d690: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
d6a0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
d6b0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d6c0: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
d6d0: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
d6e0: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
d6f0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
d700: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
d710: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
d720: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
d730: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
d740: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
d750: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
d760: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
d770: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
d780: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
d790: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
d7a0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
d7b0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
d7c0: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
d7f0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
d800: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 26 26  LITE_AFF_NONE &&
d810: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
d820: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
d830: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
d840: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
d850: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
d860: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
d870: 5f 41 46 46 5f 4e 4f 4e 45 20 29 3b 0a 20 20 74  _AFF_NONE );.  t
d880: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
d890: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
d8a0: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
d8b0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
d8c0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
d8d0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
d8e0: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
d8f0: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
d900: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d910: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
d920: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
d930: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
d940: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
d950: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
d960: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
d970: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
d980: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
d990: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
d9a0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
d9b0: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
d9c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
d9d0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
d9e0: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
d9f0: 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  1]<r[P3] goto P2
da00: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
da10: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
da20: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
da30: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
da40: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
da50: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
da60: 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20    .**.** If the 
da70: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
da80: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
da90: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
daa0: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
dab0: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
dac0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
dad0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
dae0: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
daf0: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
db00: 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20  fall through if 
db10: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
db20: 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
db30: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
db40: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
db50: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
db60: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
db70: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
db80: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
db90: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
dba0: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
dbb0: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
dbc0: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
dbd0: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
dbe0: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
dbf0: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
dc00: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
dc10: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
dc20: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
dc30: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
dc40: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
dc50: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
dc60: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
dc70: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
dc80: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
dc90: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
dca0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
dcb0: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
dcc0: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
dcd0: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
dce0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
dcf0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
dd00: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
dd10: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
dd20: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
dd30: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
dd40: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
dd50: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
dd60: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
dd70: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
dd80: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
dd90: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
dda0: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
ddb0: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
ddc0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
ddd0: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
dde0: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
ddf0: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
de00: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
de10: 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  s  used to do th
de20: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
de30: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
de40: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
de50: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
de60: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
de70: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
de80: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
de90: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
dea0: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
deb0: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
dec0: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
ded0: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
dee0: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
def0: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
df00: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
df10: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
df20: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
df30: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
df40: 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  bs..**.** If the
df50: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
df60: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
df70: 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75  , then do not ju
df80: 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a  mp.  Instead,.**
df90: 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e   store a boolean
dfa0: 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20   result (either 
dfb0: 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c  0, or 1, or NULL
dfc0: 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  ) in register P2
dfd0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
dfe0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74  QLITE_NULLEQ bit
dff0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74   is set in P5, t
e000: 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  hen NULL values 
e010: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a  are considered.*
e020: 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  * equal to one a
e030: 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64  nother, provided
e040: 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f   that they do no
e050: 74 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d  t have their MEM
e060: 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20  _Cleared.** bit 
e070: 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  set..*/./* Opcod
e080: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50  e: Ne P1 P2 P3 P
e090: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e0a0: 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33  : if r[P1]!=r[P3
e0b0: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
e0c0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
e0d0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
e0e0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
e0f0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e100: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
e110: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
e120: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
e130: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
e140: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e150: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
e160: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
e170: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
e180: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
e190: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e1a0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e1b0: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
e1c0: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
e1d0: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
e1e0: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
e1f0: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
e200: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
e210: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e220: 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74  s false.  If eit
e230: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e240: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
e250: 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20  ult is true..** 
e260: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
e270: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
e280: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
e290: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
e2a0: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
e2b0: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
e2c0: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
e2d0: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
e2e0: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
e2f0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e300: 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d   if r[P1]==r[P3]
e310: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e320: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e330: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e340: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e350: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e360: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
e370: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
e380: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71  P1 and P3 are eq
e390: 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ual..** See the 
e3a0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
e3b0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
e3c0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
e3d0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
e3e0: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
e3f0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
e400: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
e410: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
e420: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
e430: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
e440: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
e450: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
e460: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
e470: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
e480: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
e490: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
e4a0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
e4b0: 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69  false..** If nei
e4c0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e4d0: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
e4e0: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
e4f0: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
e500: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
e510: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
e520: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
e530: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
e540: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
e550: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
e560: 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]<=r[P3] goto 
e570: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
e580: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
e590: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
e5a0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
e5b0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
e5c0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
e5d0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
e5e0: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
e5f0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
e600: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
e610: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
e620: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
e630: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e640: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e650: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
e660: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
e670: 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f  f r[P1]>r[P3] go
e680: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e690: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e6a0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e6b0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e6c0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e6d0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e6e0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e6f0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
e700: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
e710: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
e720: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e730: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
e740: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
e750: 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20  * Opcode: Ge P1 
e760: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e770: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
e780: 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]>=r[P3] goto P2
e790: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e7a0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e7b0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
e7c0: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e7d0: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e7e0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
e7f0: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
e800: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
e810: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
e820: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
e830: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
e840: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
e850: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e860: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71  n..*/.case OP_Eq
e870: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e880: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51  /* same as TK_EQ
e890: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e8a0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20   */.case OP_Ne: 
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e8c0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20   same as TK_NE, 
e8d0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e8e0: 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20  /.case OP_Lt:   
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e900: 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75  ame as TK_LT, ju
e910: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e920: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20  case OP_Le:     
e930: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e940: 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70  e as TK_LE, jump
e950: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
e960: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20  se OP_Gt:       
e970: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e980: 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20  as TK_GT, jump, 
e990: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
e9a0: 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20   OP_Ge: {       
e9b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e9c0: 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GE, jump, in
e9d0: 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
e9e0: 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
e9f0: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65  /* Result of the
ea00: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70   comparison of p
ea10: 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33  In1 against pIn3
ea20: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
ea30: 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  ity;      /* Aff
ea40: 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72  inity to use for
ea50: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
ea60: 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20   u16 flags1;    
ea70: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
ea80: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
ea90: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn1->flags */.
eaa0: 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20    u16 flags3;   
eab0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
eac0: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
ead0: 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn3->flags */
eae0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
eaf0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
eb00: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
eb10: 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70  3];.  flags1 = p
eb20: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c  In1->flags;.  fl
eb30: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
eb40: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
eb50: 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
eb60: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  Null ){.    /* O
eb70: 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61  ne or both opera
eb80: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a  nds are NULL */.
eb90: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
eba0: 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  & SQLITE_NULLEQ 
ebb0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53  ){.      /* If S
ebc0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
ebd0: 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20  set (which will 
ebe0: 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74  only happen if t
ebf0: 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20  he operator is. 
ec00: 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72       ** OP_Eq or
ec10: 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b   OP_Ne) then tak
ec20: 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f  e the jump or no
ec30: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
ec40: 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20  hether.      ** 
ec50: 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72  or not both oper
ec60: 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20  ands are null.. 
ec70: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
ec80: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
ec90: 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d  e==OP_Eq || pOp-
eca0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
ecb0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
ecc0: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c  (flags1 & MEM_Cl
ecd0: 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20  eared)==0 );.   
ece0: 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d     assert( (pOp-
ecf0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
ed00: 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20  PIFNULL)==0 );. 
ed10: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
ed20: 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20  &MEM_Null)!=0.  
ed30: 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26       && (flags3&
ed40: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
ed50: 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
ed60: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20  EM_Cleared)==0. 
ed70: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
ed80: 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73  res = 0;  /* Res
ed90: 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a  ults are equal *
eda0: 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
edb0: 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20         res = 1; 
edc0: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
edd0: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
ede0: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
edf0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
ee00: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
ee10: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
ee20: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
ee30: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
ee40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
ee50: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
ee60: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
ee70: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
ee80: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
ee90: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
eea0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
eeb0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
eec0: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
eed0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
eee0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
eef0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ef00: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
ef10: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
ef20: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
ef30: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
ef40: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62  lse{.        Vdb
ef50: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
ef60: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
ef70: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
ef80: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
ef90: 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
efa0: 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 20 20  ->p2-1;.        
efb0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
efc0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
efd0: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
efe0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
eff0: 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
f000: 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
f010: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
f020: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
f030: 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
f040: 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
f050: 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
f060: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
f070: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
f080: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
f090: 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
f0a0: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
f0b0: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
f0c0: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
f0d0: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
f0e0: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
f0f0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
f100: 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
f110: 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
f120: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30  cAffinity(pIn3,0
f130: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
f140: 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74  else if( affinit
f150: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  y==SQLITE_AFF_TE
f160: 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  XT ){.      if( 
f170: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
f180: 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70  EM_Str)==0 && (p
f190: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In1->flags & (ME
f1a0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
f1b0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74  !=0 ){.        t
f1c0: 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
f1d0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
f1e0: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f1f0: 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  se( pIn1->flags 
f200: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
f210: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f220: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
f230: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n1, encoding, 1)
f240: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
f250: 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
f260: 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
f270: 26 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  & (pIn3->flags &
f280: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
f290: 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
f2a0: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
f2b0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
f2c0: 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
f2d0: 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
f2e0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
f2f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
f300: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
f310: 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn3, encoding
f320: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
f330: 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
f340: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
f350: 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
f360: 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
f370: 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61     if( pIn1->fla
f380: 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
f390: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f3a0: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
f3b0: 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c 61  pIn1);.      fla
f3c0: 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f  gs1 &= ~MEM_Zero
f3d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
f3e0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
f3f0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
f400: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
f410: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
f420: 20 20 20 20 20 20 66 6c 61 67 73 33 20 26 3d 20        flags3 &= 
f430: 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d  ~MEM_Zero;.    }
f440: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
f450: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
f460: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 72 65 73   no_mem;.    res
f470: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
f480: 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
f490: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
f4a0: 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
f4b0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
f4c0: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
f4d0: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
f4e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f4f0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
f500: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
f510: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f520: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
f530: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
f540: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
f550: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
f560: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
f570: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
f580: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
f590: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
f5a0: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
f5b0: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
f5c0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
f5d0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f5e0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f5f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
f600: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41  p->p2];.    memA
f610: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
f620: 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
f630: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f640: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
f650: 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
f660: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f670: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
f680: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
f690: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
f6a0: 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  es!=0, (pOp->p5 
f6b0: 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
f6c0: 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
f6d0: 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
f6e0: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20   pOp->p2-1;.    
f6f0: 7d 0a 20 20 7d 0a 20 20 2f 2a 20 55 6e 64 6f 20  }.  }.  /* Undo 
f700: 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65  any changes made
f710: 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74   by applyAffinit
f720: 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74  y() to the input
f730: 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20   registers. */. 
f740: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
f750: 6c 61 67 73 31 3b 0a 20 20 70 49 6e 33 2d 3e 66  lags1;.  pIn3->f
f760: 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 20  lags = flags3;. 
f770: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f780: 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
f790: 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
f7a0: 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
f7b0: 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
f7c0: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
f7d0: 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65  erator to be the
f7e0: 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74   array.** of int
f7f0: 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a  egers in P4..**.
f800: 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
f810: 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
f820: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
f830: 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
f840: 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
f850: 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
f860: 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
f870: 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
f880: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
f890: 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
f8a0: 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
f8b0: 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63  OP_Compare..*/.c
f8c0: 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
f8d0: 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
f8e0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
f8f0: 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
f900: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
f910: 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d   );.  aPermute =
f920: 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62   pOp->p4.ai;.  b
f930: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
f940: 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50  de: Compare P1 P
f950: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f960: 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d  nopsis: r[P1@P3]
f970: 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a   <-> r[P2@P3].**
f980: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20  .** Compare two 
f990: 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73  vectors of regis
f9a0: 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e  ters in reg(P1).
f9b0: 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63  .reg(P1+P3-1) (c
f9c0: 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74  all this.** vect
f9d0: 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72  or "A") and in r
f9e0: 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50  eg(P2)..reg(P2+P
f9f0: 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76  3-1) ("B").  Sav
fa00: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  e the result of.
fa10: 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
fa20: 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  n for use by the
fa30: 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e   next OP_Jump in
fa40: 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  struct..**.** If
fa50: 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
fa60: 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
fa70: 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64  et, then the ord
fa80: 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  er of comparison
fa90: 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65   is.** determine
faa0: 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65  d by the most re
fab0: 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74  cent OP_Permutat
fac0: 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49  ion operator.  I
fad0: 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f  f the.** OPFLAG_
fae0: 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63  PERMUTE bit is c
faf0: 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73  lear, then regis
fb00: 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ter are compared
fb10: 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a   in sequential.*
fb20: 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50  * order..**.** P
fb30: 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73  4 is a KeyInfo s
fb40: 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
fb50: 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20  fines collating 
fb60: 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f  sequences and so
fb70: 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72  rt.** orders for
fb80: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
fb90: 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f    The permutatio
fba0: 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67  n applies to reg
fbb0: 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20  isters.** only. 
fbc0: 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65   The KeyInfo ele
fbd0: 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73  ments are used s
fbe0: 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a  equentially..**.
fbf0: 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** The compariso
fc00: 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70  n is a sort comp
fc10: 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73  arison, so NULLs
fc20: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a   compare equal,.
fc30: 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73  ** NULLs are les
fc40: 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20  s than numbers, 
fc50: 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73  numbers are less
fc60: 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a   than strings,.*
fc70: 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  * and strings ar
fc80: 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  e less than blob
fc90: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  s..*/.case OP_Co
fca0: 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  mpare: {.  int n
fcb0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
fcc0: 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20   p1;.  int p2;. 
fcd0: 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a   const KeyInfo *
fce0: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
fcf0: 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  idx;.  CollSeq *
fd00: 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c  pColl;    /* Col
fd10: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
fd20: 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74  to use on this t
fd30: 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65  erm */.  int bRe
fd40: 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  v;          /* T
fd50: 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49  rue for DESCENDI
fd60: 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f  NG sort order */
fd70: 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35  ..  if( (pOp->p5
fd80: 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54   & OPFLAG_PERMUT
fd90: 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65  E)==0 ) aPermute
fda0: 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d   = 0;.  n = pOp-
fdb0: 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  >p3;.  pKeyInfo 
fdc0: 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
fdd0: 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  fo;.  assert( n>
fde0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
fdf0: 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20  KeyInfo!=0 );.  
fe00: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
fe10: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69  p2 = pOp->p2;.#i
fe20: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
fe30: 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b   if( aPermute ){
fe40: 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d  .    int k, mx =
fe50: 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b   0;.    for(k=0;
fe60: 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61   k<n; k++) if( a
fe70: 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20  Permute[k]>mx ) 
fe80: 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d  mx = aPermute[k]
fe90: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31  ;.    assert( p1
fea0: 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d  >0 && p1+mx<=(p-
feb0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
fec0: 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
fed0: 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78  t( p2>0 && p2+mx
fee0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
fef0: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65  ursor)+1 );.  }e
ff00: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
ff10: 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28   p1>0 && p1+n<=(
ff20: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
ff30: 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
ff40: 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
ff50: 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  n<=(p->nMem-p->n
ff60: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d  Cursor)+1 );.  }
ff70: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
ff80: 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72  E_DEBUG */.  for
ff90: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b  (i=0; i<n; i++){
ffa0: 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d  .    idx = aPerm
ffb0: 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69  ute ? aPermute[i
ffc0: 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72  ] : i;.    asser
ffd0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
ffe0: 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a  Mem[p1+idx]) );.
fff0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
10000 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b  sValid(&aMem[p2+
10010 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  idx]) );.    REG
10020 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69  ISTER_TRACE(p1+i
10030 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78  dx, &aMem[p1+idx
10040 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
10050 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26  _TRACE(p2+idx, &
10060 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20  aMem[p2+idx]);. 
10070 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65     assert( i<pKe
10080 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b  yInfo->nField );
10090 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65  .    pColl = pKe
100a0 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b  yInfo->aColl[i];
100b0 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79  .    bRev = pKey
100c0 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72  Info->aSortOrder
100d0 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  [i];.    iCompar
100e0 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
100f0 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69  mpare(&aMem[p1+i
10100 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  dx], &aMem[p2+id
10110 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20  x], pColl);.    
10120 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a  if( iCompare ){.
10130 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29        if( bRev )
10140 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f   iCompare = -iCo
10150 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65  mpare;.      bre
10160 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
10170 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
10180 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10190 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20  ode: Jump P1 P2 
101a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
101b0 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63  p to the instruc
101c0 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20  tion at address 
101d0 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65  P1, P2, or P3 de
101e0 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
101f0 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73  er.** in the mos
10200 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70  t recent OP_Comp
10210 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  are instruction 
10220 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61  the P1 vector wa
10230 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65  s less than.** e
10240 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
10250 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20  ter than the P2 
10260 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69  vector, respecti
10270 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  vely..*/.case OP
10280 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20  _Jump: {        
10290 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
102a0 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30    if( iCompare<0
102b0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
102c0 2d 3e 70 31 20 2d 20 31 3b 20 20 56 64 62 65 42  ->p1 - 1;  VdbeB
102d0 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b  ranchTaken(0,3);
102e0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f  .  }else if( iCo
102f0 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20  mpare==0 ){.    
10300 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
10310 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ;  VdbeBranchTak
10320 65 6e 28 31 2c 33 29 3b 0a 20 20 7d 65 6c 73 65  en(1,3);.  }else
10330 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
10340 70 33 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61  p3 - 1;  VdbeBra
10350 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20  nchTaken(2,3);. 
10360 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10370 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31  * Opcode: And P1
10380 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
10390 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72  nopsis: r[P3]=(r
103a0 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a  [P1] && r[P2]).*
103b0 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
103c0 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65  gical AND of the
103d0 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
103e0 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61  ters P1 and P2 a
103f0 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20  nd.** write the 
10400 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69  result into regi
10410 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
10420 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
10430 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74  2 is 0 (false) t
10440 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
10450 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74  s 0 even if.** t
10460 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
10470 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
10480 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20  and true or two 
10490 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20  NULLs give.** a 
104a0 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
104b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31  /* Opcode: Or P1
104c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
104d0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72  nopsis: r[P3]=(r
104e0 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a  [P1] || r[P2]).*
104f0 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
10500 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20  gical OR of the 
10510 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
10520 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
10530 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e  .** store the an
10540 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  swer in register
10550 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
10560 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
10570 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20   nonzero (true) 
10580 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
10590 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65  is 1 (true).** e
105a0 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72  ven if the other
105b0 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
105c0 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73   A NULL and fals
105d0 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a  e or two NULLs.*
105e0 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75  * give a NULL ou
105f0 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tput..*/.case OP
10600 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  _And:           
10610 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10620 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _AND, in1, in2, 
10630 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
10640 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Or: {           
10650 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
10660 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
10670 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20  t3 */.  int v1; 
10680 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61     /* Left opera
10690 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31  nd:  0==FALSE, 1
106a0 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
106b0 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  WN or NULL */.  
106c0 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69  int v2;    /* Ri
106d0 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d  ght operand: 0==
106e0 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
106f0 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
10700 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  LL */..  pIn1 = 
10710 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
10720 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
10730 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
10740 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65      v1 = 2;.  }e
10750 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71  lse{.    v1 = sq
10760 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
10770 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn1)!=0;.  }.
10780 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
10790 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
107a0 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
107b0 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20  _Null ){.    v2 
107c0 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
107d0 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64    v2 = sqlite3Vd
107e0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
107f0 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
10800 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41  Op->opcode==OP_A
10810 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  nd ){.    static
10820 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
10830 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d  char and_logic[]
10840 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c   = { 0, 0, 0, 0,
10850 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d   1, 2, 0, 2, 2 }
10860 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c  ;.    v1 = and_l
10870 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
10880 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74   }else{.    stat
10890 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
108a0 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b  d char or_logic[
108b0 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31  ] = { 0, 1, 2, 1
108c0 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20  , 1, 1, 2, 1, 2 
108d0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c  };.    v1 = or_l
108e0 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
108f0 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65   }.  pOut = &aMe
10900 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
10910 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d  ( v1==2 ){.    M
10920 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
10930 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
10940 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
10950 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20  ->u.i = v1;.    
10960 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10970 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
10980 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10990 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
109a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
109b0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72  opsis: r[P2]= !r
109c0 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
109d0 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
109e0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
109f0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
10a00 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
10a10 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
10a20 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
10a30 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
10a40 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10a50 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
10a60 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
10a70 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
10a80 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
10a90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10aa0 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
10ab0 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
10ac0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
10ad0 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
10ae0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
10af0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
10b00 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
10b10 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
10b20 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
10b30 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
10b40 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
10b50 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c  pOut->u.i = !sql
10b60 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
10b70 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
10b80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10b90 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
10ba0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
10bb0 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d  s: r[P1]= ~r[P1]
10bc0 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
10bd0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
10be0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
10bf0 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
10c00 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
10c10 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
10c20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
10c30 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
10c40 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
10c50 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
10c60 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
10c70 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
10c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10c90 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
10ca0 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
10cb0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
10cc0 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
10cd0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
10ce0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
10cf0 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
10d00 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
10d10 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
10d20 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  0 ){.    pOut->f
10d30 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
10d40 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
10d50 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  ~sqlite3VdbeIntV
10d60 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  alue(pIn1);.  }.
10d70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10d80 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50  pcode: Once P1 P
10d90 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  2 * * *.**.** Ch
10da0 65 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66  eck the "once" f
10db0 6c 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49  lag number P1. I
10dc0 66 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d  f it is set, jum
10dd0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
10de0 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69   P2. .** Otherwi
10df0 73 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67  se, set the flag
10e00 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
10e10 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
10e20 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e  struction..** In
10e30 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
10e40 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
10e50 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   all following o
10e60 70 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67  pcodes up throug
10e70 68 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74  h P2.** (but not
10e80 20 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74   including P2) t
10e90 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20  o run just once 
10ea0 61 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65  and to be skippe
10eb0 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a  d on subsequent.
10ec0 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68  ** times through
10ed0 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a   the loop..**.**
10ee0 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67   All "once" flag
10ef0 73 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  s are initially 
10f00 63 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65 72  cleared whenever
10f10 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
10f20 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62  ement.** first b
10f30 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f  egins to run..*/
10f40 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10f60 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10f70 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e  ( pOp->p1<p->nOn
10f80 63 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65  ceFlag );.  Vdbe
10f90 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61  BranchTaken(p->a
10fa0 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
10fb0 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  ]!=0, 2);.  if( 
10fc0 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
10fd0 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20  ->p1] ){.    pc 
10fe0 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
10ff0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e  else{.    p->aOn
11000 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
11010 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
11020 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11030 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  If P1 P2 P3 * *.
11040 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
11050 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
11060 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
11070 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  true.  The value
11080 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
11090 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
110a0 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
110b0 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
110c0 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
110d0 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
110e0 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f  he jump if and o
110f0 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e  nly if P3 is non
11100 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  -zero..*/./* Opc
11110 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
11120 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
11130 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
11140 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
11150 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
11160 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
11170 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65  considered false
11180 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
11190 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
111a0 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
111b0 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
111c0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
111d0 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
111e0 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
111f0 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
11200 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  If:             
11210 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
11220 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f   */.case OP_IfNo
11230 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
11240 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
11250 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20    int c;.  pIn1 
11260 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
11270 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
11280 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
11290 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70  {.    c = pOp->p
112a0 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64  3;.  }else{.#ifd
112b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
112c0 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
112d0 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
112e0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
112f0 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20  =0;.#else.    c 
11300 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
11310 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e  lValue(pIn1)!=0.
11320 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  0;.#endif.    if
11330 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
11340 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63  P_IfNot ) c = !c
11350 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
11360 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29  chTaken(c!=0, 2)
11370 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20  ;.  if( c ){.   
11380 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
11390 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
113a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75  ./* Opcode: IsNu
113b0 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
113c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
113d0 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]==NULL goto
113e0 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
113f0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
11400 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11410 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
11420 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20  e OP_IsNull: {  
11430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11440 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20  e as TK_ISNULL, 
11450 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
11460 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
11470 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e  >p1];.  VdbeBran
11480 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e  chTaken( (pIn1->
11490 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
114a0 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  )!=0, 2);.  if( 
114b0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
114c0 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
114d0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
114e0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
114f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11500 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20  NotNull P1 P2 * 
11510 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11520 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20   if r[P1]!=NULL 
11530 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
11540 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
11550 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
11560 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
11570 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
11580 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
11590 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
115a0 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
115b0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
115c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
115d0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
115e0 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
115f0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11600 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
11610 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11620 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
11630 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
11640 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11650 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
11660 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
11670 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
11680 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49  r[P3]=PX.**.** I
11690 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
116a0 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
116b0 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
116c0 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
116d0 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
116e0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
116f0 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
11700 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
11710 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
11720 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
11730 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
11740 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
11750 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
11760 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
11770 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
11780 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
11790 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
117a0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
117b0 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
117c0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
117d0 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
117e0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
117f0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
11800 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  If the column co
11810 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61  ntains fewer tha
11820 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65  n P2 fields, the
11830 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  n extract a NULL
11840 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65  .  Or,.** if the
11850 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
11860 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65  a P4_MEM use the
11870 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34   value of the P4
11880 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
11890 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a  the result..**.*
118a0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
118b0 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69  CLEARCACHE bit i
118c0 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20  s set on P5 and 
118d0 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74  P1 is a pseudo-t
118e0 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20  able cursor,.** 
118f0 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f  then the cache o
11900 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
11910 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65  reset prior to e
11920 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f  xtracting the co
11930 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72  lumn..** The fir
11940 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61  st OP_Column aga
11950 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61  inst a pseudo-ta
11960 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61  ble after the va
11970 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  lue of the conte
11980 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68  nt.** register h
11990 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c  as changed shoul
119a0 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20  d have this bit 
119b0 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  set..**.** If th
119c0 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
119d0 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
119e0 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65  PEOFARG bits are
119f0 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a   set on P5 when.
11a00 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
11a10 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f   guaranteed to o
11a20 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74  nly be used as t
11a30 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61  he argument of a
11a40 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20   length().** or 
11a50 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
11a60 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  n, respectively.
11a70 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66    The loading of
11a80 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e   large blobs can
11a90 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66   be.** skipped f
11aa0 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20  or length() and 
11ab0 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64  all content load
11ac0 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70  ing can be skipp
11ad0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e  ed for typeof().
11ae0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
11af0 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c  mn: {.  i64 payl
11b00 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
11b10 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
11b20 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
11b30 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
11b40 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75      /* column nu
11b50 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  mber to retrieve
11b60 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
11b70 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
11b80 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
11b90 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
11ba0 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
11bb0 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
11bc0 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
11bd0 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
11be0 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
11bf0 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
11c00 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
11c10 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
11c20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
11c30 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
11c40 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
11c50 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11c70 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
11c80 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
11c90 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
11ca0 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
11cb0 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
11cc0 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
11cd0 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
11ce0 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
11cf0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
11d00 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b  const u8 *zData;
11d10 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
11d20 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
11d30 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
11d40 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f  t u8 *zHdr;    /
11d50 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20  * Next unparsed 
11d60 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64  byte of the head
11d70 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  er */.  const u8
11d80 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f   *zEndHdr; /* Po
11d90 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
11da0 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
11db0 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66  ader */.  u32 of
11dc0 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  fset;        /* 
11dd0 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  Offset into the 
11de0 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a  data */.  u32 sz
11df0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20  Field;       /* 
11e00 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
11e10 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  in the content o
11e20 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75  f a field */.  u
11e30 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20  32 avail;       
11e40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
11e50 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
11e60 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
11e70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
11e80 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
11e90 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
11ea0 61 64 65 72 20 2a 2f 0a 20 20 75 31 36 20 66 78  ader */.  u16 fx
11eb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11ec0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c  pDest->flags val
11ed0 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  ue */.  Mem *pRe
11ee0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73  g;         /* Ps
11ef0 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20  eudoTable input 
11f00 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70  register */..  p
11f10 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
11f20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
11f30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
11f40 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
11f50 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  ) );.  pDest = &
11f60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
11f70 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
11f80 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61  e(p, pDest);.  a
11f90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
11fa0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
11fb0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
11fc0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
11fd0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
11fe0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
11ff0 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20  ( p2<pC->nField 
12000 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70  );.  aOffset = p
12010 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66 6e  C->aOffset;.#ifn
12020 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
12030 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
12040 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
12050 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20  Cursor==0 ); /* 
12060 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20  OP_Column never 
12070 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61  called on virtua
12080 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  l table */.#endi
12090 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
120a0 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
120b0 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
120c0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
120d0 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20  g>0 ); /* pCrsr 
120e0 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61  NULL on PseudoTa
120f0 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
12100 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43  ( pCrsr!=0 || pC
12110 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20  ->nullRow );    
12120 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c        /* pC->nul
12130 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61  lRow on PseudoTa
12140 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
12150 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68   the cursor cach
12160 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e  e is stale, brin
12170 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20  g it up-to-date 
12180 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
12190 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
121a0 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20  o(pC);.  if( rc 
121b0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
121c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
121d0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
121e0 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  !=p->cacheCtr ){
121f0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
12200 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
12210 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
12220 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
12230 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12240 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52  >0 );.        pR
12250 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70  eg = &aMem[pC->p
12260 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
12270 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12280 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pReg->flags & ME
12290 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
122a0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
122b0 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20  alid(pReg) );.  
122c0 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
122d0 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f  dSize = pC->szRo
122e0 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67  w = avail = pReg
122f0 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ->n;.        pC-
12300 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65  >aRow = (u8*)pRe
12310 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  g->z;.      }els
12320 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  e{.        MemSe
12330 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
12340 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
12350 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12360 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
12370 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12380 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
12390 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
123a0 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
123b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
123c0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
123d0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
123e0 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
123f0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
12400 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
12410 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
12420 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  64);.        ass
12430 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12440 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65  OK ); /* True be
12450 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
12460 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
12470 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a  ve */.        /*
12480 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
12490 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
124a0 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
124b0 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
124c0 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64        ** payload
124d0 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20   size, so it is 
124e0 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70  impossible for p
124f0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20  ayloadSize64 to 
12500 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61  be.        ** la
12510 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74  rger than 32 bit
12520 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  s. */.        as
12530 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69  sert( (payloadSi
12540 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  ze64 & SQLITE_MA
12550 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79  X_U32)==(u64)pay
12560 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20  loadSize64 );.  
12570 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
12580 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
12590 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
125a0 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43  ail);.        pC
125b0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
125c0 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u32)payloadSize
125d0 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  64;.      }else{
125e0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
125f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
12600 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
12610 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41  ) );.        VVA
12620 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
12630 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
12640 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79  (pCrsr, &pC->pay
12650 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20  loadSize);.     
12660 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
12670 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
12680 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
12690 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20  ot fail */.     
126a0 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
126b0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
126c0 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
126d0 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
126e0 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c    assert( avail<
126f0 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61  =65536 );  /* Ma
12700 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20  ximum page size 
12710 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20  is 64KiB */.    
12720 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
12730 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
12740 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ail ){.        p
12750 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70  C->szRow = pC->p
12760 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
12770 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
12780 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
12790 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  il;.      }.    
127a0 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
127b0 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
127c0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
127d0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
127e0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f          goto too
127f0 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _big;.      }.  
12800 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68    }.    pC->cach
12810 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63  eStatus = p->cac
12820 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69  heCtr;.    pC->i
12830 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56  HdrOffset = getV
12840 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77  arint32(pC->aRow
12850 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70  , offset);.    p
12860 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20  C->nHdrParsed = 
12870 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30  0;.    aOffset[0
12880 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20  ] = offset;..   
12890 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20   /* Make sure a 
128a0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
128b0 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75   has not given u
128c0 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65  s an oversize he
128d0 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20  ader..    ** Do 
128e0 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69  this now to avoi
128f0 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65  d an oversize me
12900 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
12910 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
12920 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20  ype entries can 
12930 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
12940 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20   5 bytes each.  
12950 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65  But 4 and 5 byte
12960 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73  .    ** types us
12970 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73  e so much data s
12980 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20  pace that there 
12990 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36  can only be 4096
129a0 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a   and 32 of.    *
129b0 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
129c0 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
129d0 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
129e0 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
129f0 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65   a.    ** 3-byte
12a00 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
12a10 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
12a20 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
12a30 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a  lus three.    **
12a40 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72   extra bytes for
12a50 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67   the header leng
12a60 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36  th itself.  3276
12a70 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e  8*3 + 3 = 98307.
12a80 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
12a90 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c  offset > 98307 |
12aa0 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70  | offset > pC->p
12ab0 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
12ac0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12ad0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
12ae0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12af0 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  mn_error;.    }.
12b00 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f  .    if( avail<o
12b10 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f  ffset ){.      /
12b20 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  * pC->aRow does 
12b30 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64  not have to hold
12b40 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c   the entire row,
12b50 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20   but it does at 
12b60 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e  least.      ** n
12b70 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  eed to cover the
12b80 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
12b90 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61  ecord.  If pC->a
12ba0 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  Row does not con
12bb0 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68  tain.      ** th
12bc0 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65  e complete heade
12bd0 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74  r, then set it t
12be0 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20  o zero, forcing 
12bf0 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65  the header to be
12c00 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69  .      ** dynami
12c10 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e  cally allocated.
12c20 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52   */.      pC->aR
12c30 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  ow = 0;.      pC
12c40 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20  ->szRow = 0;.   
12c50 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66   }..    /* The f
12c60 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73  ollowing goto is
12c70 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
12c80 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69  .  It can be omi
12c90 74 74 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20  tted and.    ** 
12ca0 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20  everything will 
12cb0 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74  still work.  But
12cc0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65   OP_Column is me
12cd0 61 73 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a  asurably faster.
12ce0 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69      ** by skippi
12cf0 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  ng the subsequen
12d00 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77  t conditional, w
12d10 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  hich is always t
12d20 72 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  rue..    */.    
12d30 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72  assert( pC->nHdr
12d40 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20  Parsed<=p2 );   
12d50 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69        /* Conditi
12d60 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a  onal skipped */.
12d70 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12d80 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a  mn_read_header;.
12d90 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
12da0 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65  ure at least the
12db0 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72   first p2+1 entr
12dc0 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  ies of the heade
12dd0 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a  r have been.  **
12de0 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69   parsed and vali
12df0 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  d information is
12e00 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e   in aOffset[] an
12e10 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20  d pC->aType[].. 
12e20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
12e30 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
12e40 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
12e50 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
12e60 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
12e70 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
12e80 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
12e90 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
12ea0 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
12eb0 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
12ec0 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
12ed0 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
12ee0 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
12ef0 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
12f00 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
12f10 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
12f20 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
12f30 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
12f40 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
12f50 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
12f60 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
12f70 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
12f80 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
12f90 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
12fa0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
12fb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
12fc0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
12fd0 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20   aOffset[0], .  
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13000 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c     !pC->isTable,
13010 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20   &sMem);.       
13020 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
13030 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
13040 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13050 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
13060 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
13070 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
13080 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13090 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
130a0 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
130b0 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
130c0 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64  pC->aType[i] and
130d0 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
130e0 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
130f0 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
13100 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64       i = pC->nHd
13110 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f  rParsed;.      o
13120 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b  ffset = aOffset[
13130 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
13140 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
13150 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
13160 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
13170 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
13180 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32     assert( i<=p2
13190 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
131a0 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   );.      do{.  
131b0 20 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30        if( zHdr[0
131c0 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20  ]<0x80 ){.      
131d0 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b      t = zHdr[0];
131e0 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b  .          zHdr+
131f0 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  +;.        }else
13200 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
13210 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61   += sqlite3GetVa
13220 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29  rint32(zHdr, &t)
13230 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
13240 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d      pC->aType[i]
13250 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a   = t;.        sz
13260 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56  Field = sqlite3V
13270 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
13280 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  (t);.        off
13290 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a  set += szField;.
132a0 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73          if( offs
132b0 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f  et<szField ){  /
132c0 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74  * True if offset
132d0 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20   overflows */.  
132e0 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26          zHdr = &
132f0 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20  zEndHdr[1];  /* 
13300 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f  Forces SQLITE_CO
13310 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c  RRUPT return bel
13320 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
13330 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
13340 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  .        i++;.  
13350 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
13360 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20   = offset;.     
13370 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26   }while( i<=p2 &
13380 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
13390 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72  ;.      pC->nHdr
133a0 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20  Parsed = i;.    
133b0 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
133c0 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20   = (u32)(zHdr - 
133d0 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66  zData);.      if
133e0 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b  ( pC->aRow==0 ){
133f0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
13400 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
13410 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73  sMem);.        s
13420 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Mem.flags = MEM_
13430 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Null;.      }.  
13440 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
13450 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
13460 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
13470 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
13480 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
13490 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
134a0 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
134b0 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
134c0 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
134d0 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a    **          (z
134e0 48 64 72 3e 7a 45 6e 64 48 64 72 29 0a 20 20 20  Hdr>zEndHdr).   
134f0 20 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e     ** (2) the en
13500 74 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20  tire header was 
13510 75 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c  used but not all
13520 20 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20   data was used. 
13530 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20       **         
13540 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20   (zHdr==zEndHdr 
13550 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70  && offset!=pC->p
13560 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
13570 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64    ** (3) the end
13580 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74   of the data ext
13590 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20  ends beyond the 
135a0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
135b0 64 2e 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  d..      **     
135c0 20 20 20 20 20 28 6f 66 66 73 65 74 20 3e 20 70       (offset > p
135d0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a  C->payloadSize).
135e0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
135f0 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  f( (zHdr>=zEndHd
13600 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48  r && (zHdr>zEndH
13610 64 72 20 7c 7c 20 6f 66 66 73 65 74 21 3d 70 43  dr || offset!=pC
13620 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a  ->payloadSize)).
13630 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65         || (offse
13640 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  t > pC->payloadS
13650 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
13660 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
13670 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
13680 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
13690 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
136a0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
136b0 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79   /* If after try
136c0 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e 65 77  ing to extra new
136d0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
136e0 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61  e header, nHdrPa
136f0 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73  rsed is.    ** s
13700 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70  till not up to p
13710 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  2, that means th
13720 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61  at the record ha
13730 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a  s fewer than p2.
13740 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20      ** columns. 
13750 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77   So the result w
13760 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68  ill be either th
13770 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
13780 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  or a NULL..    *
13790 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48  /.    if( pC->nH
137a0 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
137b0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
137c0 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b  4type==P4_MEM ){
137d0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
137e0 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
137f0 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70  py(pDest, pOp->p
13800 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74  4.pMem, MEM_Stat
13810 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ic);.      }else
13820 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  {.        MemSet
13830 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
13840 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
13850 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70   }.      goto op
13860 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
13870 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74   }.  }..  /* Ext
13880 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  ract the content
13890 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68   for the p2+1-th
138a0 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f   column.  Contro
138b0 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20  l can only.  ** 
138c0 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
138d0 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c   if aOffset[p2],
138e0 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20   aOffset[p2+1], 
138f0 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  and pC->aType[p2
13900 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
13910 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
13920 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
13930 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
13940 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
13950 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
13960 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
13970 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
13980 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  st) );.  if( Vdb
13990 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
139a0 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  t) ) sqlite3Vdbe
139b0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
139c0 29 3b 0a 20 20 74 20 3d 20 70 43 2d 3e 61 54 79  );.  t = pC->aTy
139d0 70 65 5b 70 32 5d 3b 0a 20 20 69 66 28 20 70 43  pe[p2];.  if( pC
139e0 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
139f0 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
13a00 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
13a10 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
13a20 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
13a30 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
13a40 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
13a50 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
13a60 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
13a70 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
13a80 67 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ge */.    sqlite
13a90 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 70  3VdbeSerialGet(p
13aa0 43 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b  C->aRow+aOffset[
13ab0 70 32 5d 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  p2], t, pDest);.
13ac0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
13ad0 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
13ae0 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
13af0 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
13b00 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
13b10 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20    if( ((pOp->p5 
13b20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  & (OPFLAG_LENGTH
13b30 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ARG|OPFLAG_TYPEO
13b40 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20  FARG))!=0.      
13b50 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26      && ((t>=12 &
13b60 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28  & (t&1)==0) || (
13b70 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
13b80 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29  _TYPEOFARG)!=0))
13b90 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20  .     || (len = 
13ba0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13bb0 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a  lTypeLen(t))==0.
13bc0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
13bd0 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c  Content is irrel
13be0 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20  evant for.      
13bf0 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79 70  **    1. the typ
13c00 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a  eof() function,.
13c10 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74        **    2. t
13c20 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
13c30 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20  ction if X is a 
13c40 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20  blob, and.      
13c50 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65 20  **    3. if the 
13c60 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69  content length i
13c70 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a  s zero..      **
13c80 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
13c90 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63  well use bogus c
13ca0 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68  ontent rather th
13cb0 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20  an reading.     
13cc0 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d   ** content from
13cd0 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c   disk.  NULL wil
13ce0 6c 20 77 6f 72 6b 20 66 6f 72 20 74 68 65 20 76  l work for the v
13cf0 61 6c 75 65 20 66 6f 72 20 73 74 72 69 6e 67 73  alue for strings
13d00 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 62 6c  .      ** and bl
13d10 6f 62 73 20 61 6e 64 20 77 68 61 74 65 76 65 72  obs and whatever
13d20 20 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c 6f   is in the paylo
13d30 61 64 53 69 7a 65 36 34 20 76 61 72 69 61 62 6c  adSize64 variabl
13d40 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20  e.      ** will 
13d50 77 6f 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68  work for everyth
13d60 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20  ing else. */.   
13d70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
13d80 72 69 61 6c 47 65 74 28 74 3c 3d 31 33 20 3f 20  rialGet(t<=13 ? 
13d90 28 75 38 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a  (u8*)&payloadSiz
13da0 65 36 34 20 3a 20 30 2c 20 74 2c 20 70 44 65 73  e64 : 0, t, pDes
13db0 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
13dc0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
13dd0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
13de0 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74  e(pCrsr, aOffset
13df0 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e  [p2], len, !pC->
13e00 69 73 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20  isTable,.       
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 65 73              pDes
13e30 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
13e40 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
13e50 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
13e60 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20  olumn_error;.   
13e70 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
13e80 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
13e90 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
13ea0 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ->z, t, pDest);.
13eb0 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
13ec0 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d  gs &= ~MEM_Ephem
13ed0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44  ;.    }.  }.  pD
13ee0 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
13ef0 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  ing;..op_column_
13f00 6f 75 74 3a 0a 20 20 2f 2a 20 49 66 20 74 68 65  out:.  /* If the
13f10 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73   column value is
13f20 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   an ephemeral st
13f30 72 69 6e 67 2c 20 67 6f 20 61 68 65 61 64 20 61  ring, go ahead a
13f40 6e 64 20 70 65 72 73 69 73 74 0a 20 20 2a 2a 20  nd persist.  ** 
13f50 74 68 61 74 20 73 74 72 69 6e 67 20 69 6e 20 63  that string in c
13f60 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20 6d  ase the cursor m
13f70 6f 76 65 73 20 62 65 66 6f 72 65 20 74 68 65 20  oves before the 
13f80 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 0a  column value is.
13f90 20 20 2a 2a 20 75 73 65 64 2e 20 20 54 68 65 20    ** used.  The 
13fa0 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 64  following code d
13fb0 6f 65 73 20 74 68 65 20 65 71 75 69 76 61 6c 65  oes the equivale
13fc0 6e 74 20 6f 66 20 44 65 65 70 68 65 6d 65 72 61  nt of Deephemera
13fd0 6c 69 7a 65 28 29 0a 20 20 2a 2a 20 62 75 74 20  lize().  ** but 
13fe0 64 6f 65 73 20 69 74 20 66 61 73 74 65 72 2e 20  does it faster. 
13ff0 2a 2f 0a 20 20 69 66 28 20 28 70 44 65 73 74 2d  */.  if( (pDest-
14000 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  >flags & MEM_Eph
14010 65 6d 29 21 3d 30 20 26 26 20 70 44 65 73 74 2d  em)!=0 && pDest-
14020 3e 7a 20 29 7b 0a 20 20 20 20 66 78 20 3d 20 70  >z ){.    fx = p
14030 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Dest->flags & (M
14040 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
14050 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 66 78  ;.    assert( fx
14060 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 61 74 61  !=0 );.    zData
14070 20 3d 20 28 63 6f 6e 73 74 20 75 38 2a 29 70 44   = (const u8*)pD
14080 65 73 74 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20  est->z;.    len 
14090 3d 20 70 44 65 73 74 2d 3e 6e 3b 0a 20 20 20 20  = pDest->n;.    
140a0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
140b0 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
140c0 28 70 44 65 73 74 2c 20 6c 65 6e 2b 32 29 20 29  (pDest, len+2) )
140d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
140e0 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d 3e    memcpy(pDest->
140f0 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a  z, zData, len);.
14100 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e      pDest->z[len
14110 5d 20 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74  ] = 0;.    pDest
14120 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a  ->z[len+1] = 0;.
14130 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
14140 20 3d 20 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a   = fx|MEM_Term;.
14150 20 20 7d 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72    }.op_column_er
14160 72 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  ror:.  UPDATE_MA
14170 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
14180 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
14190 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
141a0 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
141b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
141c0 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
141d0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
141e0 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d  ffinity(r[P1@P2]
141f0 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  ).**.** Apply af
14200 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
14210 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
14220 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
14230 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
14240 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
14250 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
14260 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
14270 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
14280 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
14290 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
142a0 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
142b0 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
142c0 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
142d0 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
142e0 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
142f0 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
14300 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
14310 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
14320 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
14330 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
14340 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
14350 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
14360 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
14370 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
14380 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
14390 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
143a0 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
143b0 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
143c0 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
143d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
143e0 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
143f0 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
14400 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
14410 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
14420 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e  <= &p->aMem[(p->
14430 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
14440 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
14450 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
14460 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66  ) );.    applyAf
14470 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66  finity(pIn1, cAf
14480 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  f, encoding);.  
14490 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
144a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
144b0 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20  ode: MakeRecord 
144c0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
144d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
144e0 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d 29  =mkrec(r[P1@P2])
144f0 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50  .**.** Convert P
14500 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69  2 registers begi
14510 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e  nning with P1 in
14520 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66  to the [record f
14530 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73  ormat].** use as
14540 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69   a data record i
14550 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62  n a database tab
14560 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a  le or as a key.*
14570 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  * in an index.  
14580 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  The OP_Column op
14590 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20  code can decode 
145a0 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72  the record later
145b0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
145c0 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  e a string that 
145d0 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
145e0 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20   long.  The nth 
145f0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
14600 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
14610 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
14620 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
14630 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
14640 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c   the nth.** fiel
14650 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
14660 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61  ey..**.** The ma
14670 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61  pping from chara
14680 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79  cter to affinity
14690 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65   is given by the
146a0 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20   SQLITE_AFF_.** 
146b0 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69  macros defined i
146c0 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a  n sqliteInt.h..*
146d0 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55  *.** If P4 is NU
146e0 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65  LL then all inde
146f0 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68  x fields have th
14700 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e  e affinity NONE.
14710 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  .*/.case OP_Make
14720 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a  Record: {.  u8 *
14730 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20  zNewRecord;     
14740 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74     /* A buffer t
14750 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
14760 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
14770 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  rd */.  Mem *pRe
14780 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
14790 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * The new record
147a0 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b   */.  u64 nData;
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
147c0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
147d0 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
147e0 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20  .  int nHdr;    
147f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14800 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
14810 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
14820 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20    i64 nByte;    
14830 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
14840 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
14850 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20  for this record 
14860 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
14870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14880 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
14890 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
148a0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
148b0 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20    int nVarint;  
148c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
148d0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
148e0 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32   varint */.  u32
148f0 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20   serial_type;   
14900 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c      /* Type fiel
14910 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74  d */.  Mem *pDat
14920 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  a0;           /*
14930 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20   First field to 
14940 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  be combined into
14950 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
14960 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20   Mem *pLast;    
14970 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
14980 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63  field of the rec
14990 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ord */.  int nFi
149a0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eld;            
149b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
149c0 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
149d0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66  d */.  char *zAf
149e0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a  finity;       /*
149f0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74   The affinity st
14a00 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63  ring for the rec
14a10 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c  ord */.  int fil
14a20 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20  e_format;       
14a30 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74  /* File format t
14a40 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69  o use for encodi
14a50 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  ng */.  int i;  
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14a70 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20  * Space used in 
14a80 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65 61  zNewRecord[] hea
14a90 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20  der */.  int j; 
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
14ac0 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f   zNewRecord[] co
14ad0 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c  ntent */.  int l
14ae0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
14af0 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61    /* Length of a
14b00 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20   field */..  /* 
14b10 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63  Assuming the rec
14b20 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66  ord contains N f
14b30 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72  ields, the recor
14b40 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20  d format looks. 
14b50 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20   ** like this:. 
14b60 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   **.  ** -------
14b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14bb0 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a  -.  ** | hdr-siz
14bc0 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70  e | type 0 | typ
14bd0 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65  e 1 | ... | type
14be0 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e   N-1 | data0 | .
14bf0 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20  .. | data N-1 | 
14c00 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
14c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
14c50 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29   **.  ** Data(0)
14c60 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72   is taken from r
14c70 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74  egister P1.  Dat
14c80 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20  a(1) comes from 
14c90 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20  register P1+1.  
14ca0 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  ** and so forth.
14cb0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20  .  **.  ** Each 
14cc0 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20  type field is a 
14cd0 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74  varint represent
14ce0 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74  ing the serial t
14cf0 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  ype of the .  **
14d00 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64   corresponding d
14d10 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65  ata element (see
14d20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14d30 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20  alType()). The. 
14d40 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65   ** hdr-size fie
14d50 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72  ld is also a var
14d60 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
14d70 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
14d80 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20   beginning.  ** 
14d90 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
14da0 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e   data0..  */.  n
14db0 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20  Data = 0;       
14dc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14dd0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
14de0 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30  ce */.  nHdr = 0
14df0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
14e00 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
14e10 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
14e20 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20  .  nZero = 0;   
14e30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14e40 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
14e50 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
14e60 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65  record */.  nFie
14e70 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  ld = pOp->p1;.  
14e80 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
14e90 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
14ea0 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70   nField>0 && pOp
14eb0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
14ec0 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d  2+nField<=(p->nM
14ed0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
14ee0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
14ef0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
14f00 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
14f10 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
14f20 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
14f30 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
14f40 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
14f50 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
14f60 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
14f70 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
14f80 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
14f90 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
14fa0 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
14fb0 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
14fc0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
14fd0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
14fe0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
14ff0 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
15000 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
15010 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
15020 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
15030 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
15040 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
15050 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
15060 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
15070 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
15080 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
15090 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
150a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
150b0 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
150c0 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
150d0 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
150e0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
150f0 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
15100 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
15110 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
15120 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
15130 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
15140 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
15150 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
15160 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
15170 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
15180 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
15190 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
151a0 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70  d(pRec) );.    p
151b0 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72  Rec->uTemp = ser
151c0 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
151d0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
151e0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
151f0 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
15200 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15210 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
15220 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52  ype);.    if( pR
15230 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
15240 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66  Zero ){.      if
15250 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20  ( nData ){.     
15260 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
15270 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
15280 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
15290 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d          nZero +=
152a0 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
152b0 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70          len -= p
152c0 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  Rec->u.nZero;.  
152d0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
152e0 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
152f0 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69    testcase( seri
15300 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a  al_type==127 );.
15310 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65      testcase( se
15320 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29  rial_type==128 )
15330 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65  ;.    nHdr += se
15340 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f  rial_type<=127 ?
15350 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69   1 : sqlite3Vari
15360 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  ntLen(serial_typ
15370 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d  e);.  }while( (-
15380 2d 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29  -pRec)>=pData0 )
15390 3b 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20  ;..  /* Add the 
153a0 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76  initial header v
153b0 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20  arint and total 
153c0 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 74 65  the size */.  te
153d0 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
153e0 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
153f0 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
15400 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
15410 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
15420 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
15430 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
15440 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
15450 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
15460 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
15470 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
15480 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
15490 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
154a0 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
154b0 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
154c0 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
154d0 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
154e0 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
154f0 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74  Data;.  if( nByt
15500 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
15510 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
15520 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
15530 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
15540 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
15550 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
15560 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
15570 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
15580 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
15590 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
155a0 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
155b0 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
155c0 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
155d0 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
155e0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
155f0 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
15600 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
15610 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
15620 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f  arAndResize() co
15630 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
15640 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
15650 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
15660 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
15670 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
15680 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  e(pOut, (int)nBy
15690 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  te) ){.    goto 
156a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
156b0 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
156c0 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
156d0 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
156e0 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
156f0 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
15700 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e  , nHdr);.  j = n
15710 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Hdr;.  assert( p
15720 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
15730 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
15740 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61  .  do{.    seria
15750 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75  l_type = pRec->u
15760 54 65 6d 70 3b 0a 20 20 20 20 69 20 2b 3d 20 70  Temp;.    i += p
15770 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
15780 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
15790 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
157a0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
157b0 70 65 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  pe */.    j += s
157c0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
157d0 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
157e0 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
157f0 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
15800 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
15810 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
15820 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
15830 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
15840 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
15850 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
15860 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
15870 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15880 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
15890 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
158a0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
158b0 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
158c0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
158d0 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
158e0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
158f0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
15900 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
15910 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
15920 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
15930 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
15940 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
15950 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
15960 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
15970 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
15980 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
15990 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
159a0 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
159b0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
159c0 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74  sis: r[P2]=count
159d0 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  ().**.** Store t
159e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
159f0 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
15a00 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
15a10 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
15a20 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
15a30 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
15a40 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
15a50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
15a60 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
15a70 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
15a80 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
15a90 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  se */.  i64 nEnt
15aa0 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
15ab0 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20  pCrsr;..  pCrsr 
15ac0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
15ad0 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20  p1]->pCursor;.  
15ae0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
15af0 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20  .  nEntry = 0;  
15b00 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
15b10 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
15b20 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
15b30 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
15b40 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73  3BtreeCount(pCrs
15b50 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70  r, &nEntry);.  p
15b60 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
15b70 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
15b80 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
15b90 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
15ba0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
15bb0 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
15bc0 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
15bd0 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
15be0 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
15bf0 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
15c00 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
15c10 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
15c20 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
15c30 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
15c40 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
15c50 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
15c60 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
15c70 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
15c80 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
15c90 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
15ca0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cc0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15cd0 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
15ce0 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
15d10 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
15d20 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
15d30 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
15d40 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
15d50 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
15d60 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
15d70 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
15d80 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
15d90 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
15da0 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
15db0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
15dc0 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
15dd0 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
15de0 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
15df0 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
15e00 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
15e10 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
15e20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
15e30 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
15e40 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
15e50 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
15e60 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15e70 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
15e80 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
15e90 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
15ea0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
15eb0 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
15ec0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
15ed0 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
15ee0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
15ef0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
15f00 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
15f10 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (db) );.  assert
15f20 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
15f30 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
15f40 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
15f50 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
15f60 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
15f70 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
15f80 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
15f90 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
15fa0 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
15fb0 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
15fc0 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
15fd0 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
15fe0 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
15ff0 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
16000 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
16010 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
16020 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
16030 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
16040 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
16050 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16060 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
16070 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16080 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
16090 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
160a0 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
160b0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
160c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
160d0 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
160e0 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
160f0 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
16100 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
16110 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
16120 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
16130 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
16140 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
16150 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
16160 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
16170 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
16180 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
16190 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
161a0 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
161b0 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
161c0 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
161d0 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
161e0 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
161f0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
16200 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
16210 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
16220 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
16230 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
16240 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
16250 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
16280 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
16290 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
162a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
162b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
162c0 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
162d0 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
162e0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
162f0 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
16300 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
16310 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
16320 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69  , sizeof(Savepoi
16330 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  nt)+nName+1);.  
16340 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a      if( pNew ){.
16350 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e          pNew->zN
16360 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70  ame = (char *)&p
16370 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20  New[1];.        
16380 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61  memcpy(pNew->zNa
16390 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  me, zName, nName
163a0 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20  +1);.    .      
163b0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
163c0 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
163d0 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20  tion, then mark 
163e0 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61  this as a specia
163f0 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72  l.        ** "tr
16400 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
16410 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20  int". */.       
16420 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
16430 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  mit ){.         
16440 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16450 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64  = 0;.          d
16460 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
16470 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20  Savepoint = 1;. 
16480 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
16490 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
164a0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  epoint++;.      
164b0 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20    }.    .       
164c0 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77   /* Link the new
164d0 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20   savepoint into 
164e0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
164f0 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20  dle's list. */. 
16500 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65         pNew->pNe
16510 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  xt = db->pSavepo
16520 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
16530 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e  >pSavepoint = pN
16540 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ew;.        pNew
16550 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
16560 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
16570 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  ons;.        pNe
16580 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  w->nDeferredImmC
16590 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
165a0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
165b0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
165c0 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
165d0 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
165e0 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
165f0 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
16600 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
16610 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
16620 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
16630 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
16640 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
16650 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
16660 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
16670 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
16680 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
16690 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
166a0 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
166b0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
166c0 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
166d0 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
166e0 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
166f0 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
16700 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
16710 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
16720 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
16730 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f  zErrMsg, db, "no
16740 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
16750 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
16760 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
16770 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
16780 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
16790 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56  ite>0 && p1==SAV
167a0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
167b0 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
167c0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
167d0 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
167e0 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
167f0 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
16800 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
16810 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  e statements..  
16820 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
16830 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16840 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
16850 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
16860 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e  release savepoin
16870 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  t - SQL statemen
16880 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a  ts in progress".
16890 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
168a0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
168b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
168c0 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
168d0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
168e0 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
168f0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
16900 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
16910 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
16920 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
16930 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
16940 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
16950 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
16960 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
16970 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
16980 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
16990 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
169a0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
169b0 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
169c0 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
169d0 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
169e0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
169f0 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
16a00 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
16a10 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
16a20 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
16a30 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
16a40 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
16a50 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
16a60 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
16a70 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
16a80 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
16a90 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
16aa0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
16ab0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
16ac0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
16ad0 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d           p->rc =
16ae0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16af0 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  Y;.          got
16b00 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
16b10 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16b20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16b30 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  onSavepoint = 0;
16b40 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d  .        rc = p-
16b50 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >rc;.      }else
16b60 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  {.        iSavep
16b70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
16b80 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
16b90 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
16ba0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16bb0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
16bc0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
16bd0 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
16be0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
16bf0 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69   sqlite3BtreeTri
16c00 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e  pAllCursors(db->
16c10 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c  aDb[ii].pBt, SQL
16c20 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20  ITE_ABORT);.    
16c30 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16c40 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69  }.        for(ii
16c50 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
16c60 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
16c70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
16c80 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e  eeSavepoint(db->
16c90 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c  aDb[ii].pBt, p1,
16ca0 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
16cb0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
16cc0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
16cd0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
16ce0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16cf0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
16d00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16d10 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16d20 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64  T_ROLLBACK && (d
16d30 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
16d40 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
16d50 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
16d60 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
16d70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
16d80 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
16d90 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
16da0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
16db0 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
16dc0 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
16dd0 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
16de0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
16df0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16e00 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
16e10 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
16e20 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
16e30 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
16e40 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
16e50 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
16e60 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
16e70 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
16e80 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
16e90 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
16ea0 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
16eb0 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
16ec0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
16ed0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16ee0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
16ef0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
16f00 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
16f10 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
16f20 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
16f30 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
16f40 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
16f50 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
16f60 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
16f70 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
16f80 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
16f90 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
16fa0 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
16fb0 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
16fc0 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
16fd0 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
16fe0 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
16ff0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
17000 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
17010 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
17020 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
17030 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
17040 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
17050 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
17060 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
17070 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
17080 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
17090 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
170a0 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
170b0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
170c0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
170d0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
170e0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
170f0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
17100 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
17110 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
17120 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
17130 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
17140 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
17150 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
17160 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
17170 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
17180 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
17190 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
171a0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
171b0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
171c0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
171d0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
171e0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  n ){.        rc 
171f0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
17200 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69  epoint(db, p1, i
17210 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
17220 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17230 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
17240 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17250 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17260 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   }..  break;.}..
17270 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43  /* Opcode: AutoC
17280 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ommit P1 P2 * * 
17290 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
172a0 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f  database auto-co
172b0 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20  mmit flag to P1 
172c0 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20  (1 or 0). If P2 
172d0 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a  is true, roll.**
172e0 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e   back any curren
172f0 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65  tly active btree
17300 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49   transactions. I
17310 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
17320 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61  active.** VMs (a
17330 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f  part from this o
17340 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c  ne), then a ROLL
17350 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43  BACK fails.  A C
17360 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a  OMMIT fails if.*
17370 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  * there are acti
17380 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f  ve writing VMs o
17390 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61  r active VMs tha
173a0 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63  t use shared cac
173b0 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  he..**.** This i
173c0 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65  nstruction cause
173d0 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74  s the VM to halt
173e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74  ..*/.case OP_Aut
173f0 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74  oCommit: {.  int
17400 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17410 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62  it;.  int iRollb
17420 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f  ack;.  int turnO
17430 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41  nAC;..  desiredA
17440 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d  utoCommit = pOp-
17450 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b  >p1;.  iRollback
17460 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75   = pOp->p2;.  tu
17470 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64  rnOnAC = desired
17480 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64  AutoCommit && !d
17490 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  b->autoCommit;. 
174a0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
174b0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
174c0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
174d0 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
174e0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
174f0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
17500 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
17510 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63  ert( db->nVdbeAc
17520 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74  tive>0 );  /* At
17530 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20   least this one 
17540 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a  VM is active */.
17550 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
17560 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20 30  Reader );..#if 0
17570 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  .  if( turnOnAC 
17580 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  && iRollback && 
17590 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
175a0 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  1 ){.    /* If t
175b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
175c0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c  implements a ROL
175d0 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20  LBACK and other 
175e0 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73  VMs are.    ** s
175f0 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e  till running, an
17600 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  d a transaction 
17610 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72  is active, retur
17620 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
17630 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61  ating.    ** tha
17640 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
17650 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
17660 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
17670 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
17680 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
17690 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  b, "cannot rollb
176a0 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
176b0 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
176c0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
176d0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
176e0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
176f0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
17700 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
17710 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  & !iRollback && 
17720 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
17730 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
17740 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
17750 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
17760 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  IT and other VMs
17770 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20   are writing.   
17780 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
17790 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
177a0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
177b0 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
177c0 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
177d0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
177e0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
177f0 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d   db, "cannot com
17800 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
17810 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
17820 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
17830 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
17840 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17850 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73  .  }else if( des
17860 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
17870 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
17880 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
17890 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
178a0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
178b0 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
178c0 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
178d0 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
178e0 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
178f0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
17900 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
17910 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
17920 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
17930 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
17940 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
17950 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
17960 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17970 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17980 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
17990 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69  oCommit;.      i
179a0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
179b0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
179c0 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  SY ){.        p-
179d0 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
179e0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
179f0 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
17a00 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
17a10 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
17a20 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17a30 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
17a40 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
17a50 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
17a60 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
17a70 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
17a80 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
17a90 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
17aa0 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
17ab0 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
17ac0 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
17ad0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
17ae0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17af0 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
17b00 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
17b10 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
17b20 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
17b30 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20  ErrMsg, db,.    
17b40 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
17b50 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
17b60 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
17b70 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
17b80 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
17b90 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
17ba0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
17bb0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
17bc0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
17bf0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
17c00 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
17c10 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
17c20 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17c30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
17c40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
17c50 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
17c60 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
17c70 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
17c80 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
17c90 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
17ca0 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
17cb0 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
17cc0 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
17cd0 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
17ce0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
17cf0 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
17d00 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
17d10 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
17d20 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
17d30 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
17d40 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
17d50 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
17d60 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
17d70 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
17d80 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
17d90 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
17da0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
17db0 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
17dc0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
17dd0 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
17de0 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
17df0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
17e00 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
17e10 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
17e20 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
17e30 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
17e40 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
17e50 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
17e60 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
17e70 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
17e80 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
17e90 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
17ea0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
17eb0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
17ec0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
17ed0 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
17ee0 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
17ef0 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
17f00 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
17f10 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
17f20 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
17f30 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
17f40 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
17f50 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
17f60 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
17f70 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
17f80 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
17f90 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
17fa0 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
17fb0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
17fc0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
17fd0 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
17fe0 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
17ff0 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
18000 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
18010 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
18020 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
18030 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
18040 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
18050 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
18060 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
18070 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
18080 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
18090 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
180a0 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
180b0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
180c0 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
180d0 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
180e0 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
180f0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
18100 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
18110 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
18120 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
18130 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
18140 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
18150 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
18160 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
18170 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
18180 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
18190 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
181a0 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
181b0 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
181c0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
181d0 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
181e0 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
181f0 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
18200 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
18210 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
18220 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
18230 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
18240 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
18250 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
18260 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
18270 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
18280 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
18290 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
182a0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
182b0 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
182c0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
182d0 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
182e0 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
182f0 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
18300 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
18310 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
18320 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
18330 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
18340 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
18350 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
18360 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
18370 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
18380 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
18390 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
183a0 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
183b0 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
183c0 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
183d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
183e0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
183f0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
18400 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  y==0 || pOp->p2=
18410 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
18420 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
18430 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
18440 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
18450 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
18460 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
18470 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
18480 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
18490 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
184a0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
184b0 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
184c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
184d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
184e0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
184f0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
18500 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
18510 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18520 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
18530 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
18540 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
18550 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
18560 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70  pc = pc;.      p
18570 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
18580 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
18590 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
185a0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
185b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
185c0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
185d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
185e0 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
185f0 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
18600 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
18610 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
18620 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
18630 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20  VdbeRead>1) .   
18640 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
18650 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
18660 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
18670 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74        if( p->iSt
18680 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
18690 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
186a0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20  ->nStatement>=0 
186b0 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  && db->nSavepoin
186c0 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t>=0 );.        
186d0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
186e0 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53  ; .        p->iS
186f0 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e  tatement = db->n
18700 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
18710 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20  nStatement;.    
18720 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20    }..      rc = 
18730 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
18740 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
18750 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74  NT_BEGIN, p->iSt
18760 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20  atement-1);.    
18770 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18780 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
18790 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
187a0 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70  BeginStmt(pBt, p
187b0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20  ->iStatement);. 
187c0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
187d0 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
187e0 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
187f0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
18800 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
18810 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
18820 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
18830 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18840 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
18850 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
18860 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
18870 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
18880 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
18890 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
188a0 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
188b0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
188c0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70  redCons;.      p
188d0 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e  ->nStmtDefImmCon
188e0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
188f0 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  dImmCons;.    }.
18900 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74  .    /* Gather t
18910 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
18920 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65  n number for che
18930 63 6b 69 6e 67 20 2a 2f 0a 20 20 20 20 73 71 6c  cking */.    sql
18940 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
18950 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45  (pBt, BTREE_SCHE
18960 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32  MA_VERSION, (u32
18970 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20   *)&iMeta);.    
18980 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70  iGen = db->aDb[p
18990 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
189a0 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20  >iGeneration;.  
189b0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20  }else{.    iGen 
189c0 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d  = iMeta = 0;.  }
189d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
189e0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  p5==0 || pOp->p4
189f0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
18a00 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
18a10 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  && (iMeta!=pOp->
18a20 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d  p3 || iGen!=pOp-
18a30 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71  >p4.i) ){.    sq
18a40 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
18a50 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
18a60 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
18a70 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
18a80 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
18a90 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29  ma has changed")
18aa0 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ;.    /* If the 
18ab0 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72  schema-cookie fr
18ac0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
18ad0 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65  file matches the
18ae0 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20   cookie .    ** 
18af0 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20  stored with the 
18b00 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73  in-memory repres
18b10 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
18b20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a  schema, do.    *
18b30 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65  * not reload the
18b40 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
18b50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
18b60 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
18b70 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20   virtual-tables 
18b80 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73  are in use, this
18b90 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20   is not just an 
18ba0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20  optimization..  
18bb0 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61    ** Often, v-ta
18bc0 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72  bles store their
18bd0 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53   data in other S
18be0 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68  QLite tables, wh
18bf0 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71  ich.    ** are q
18c00 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68  ueried from with
18c10 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f  in xNext() and o
18c20 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74  ther v-table met
18c30 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a  hods using.    *
18c40 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69  * prepared queri
18c50 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75  es. If such a qu
18c60 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61  ery is out-of-da
18c70 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  te, we do not wa
18c80 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73  nt to.    ** dis
18c90 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73  card the databas
18ca0 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65  e schema, as the
18cb0 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65   user code imple
18cc0 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20  menting the.    
18cd0 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64  ** v-table would
18ce0 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64   have to be read
18cf0 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
18d00 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
18d10 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74   itself.    ** t
18d20 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  o be invalidated
18d30 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65   whenever sqlite
18d40 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c  3_step() is call
18d50 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a  ed from within .
18d60 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65      ** a v-table
18d70 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a   method..    */.
18d80 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
18d90 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
18da0 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21  ->schema_cookie!
18db0 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20  =iMeta ){.      
18dc0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
18dd0 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
18de0 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  1);.    }.    p-
18df0 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
18e00 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
18e10 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61  HEMA;.  }.  brea
18e20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18e30 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
18e40 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
18e50 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
18e60 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
18e70 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
18e80 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
18e90 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
18ea0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
18eb0 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
18ec0 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
18ed0 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
18ee0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
18ef0 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
18f00 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
18f10 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
18f20 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
18f30 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
18f40 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
18f50 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
18f60 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
18f70 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
18f80 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
18f90 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
18fa0 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
18fb0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
18fc0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
18fd0 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
18fe0 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
18ff0 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
19000 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
19010 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
19020 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19040 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
19050 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  */.  int iMeta;.
19060 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
19070 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73   iCookie;..  ass
19080 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
19090 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  r );.  iDb = pOp
190a0 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20  ->p1;.  iCookie 
190b0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
190c0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c  ert( pOp->p3<SQL
190d0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
190e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
190f0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
19100 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19110 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
19120 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
19130 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
19140 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
19150 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
19160 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
19170 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
19180 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
19190 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
191a0 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
191b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
191c0 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
191d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
191e0 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
191f0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
19200 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
19210 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
19220 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
19230 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
19240 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
19250 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
19260 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
19270 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
19280 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
19290 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
192a0 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
192b0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
192c0 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
192d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
192e0 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
192f0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
19300 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
19310 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
19320 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
19330 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
19340 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
19350 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
19360 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
19370 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
19380 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
19390 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
193a0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
193b0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
193c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
193d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
193e0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
193f0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
19400 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19410 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
19420 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
19430 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
19440 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
19450 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
19460 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
19470 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
19480 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
19490 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
194a0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
194b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c  [pOp->p3];.  sql
194c0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
194d0 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f  erify(pIn3);.  /
194e0 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
194f0 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
19500 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
19510 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
19520 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
19530 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
19540 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e  >p2, (int)pIn3->
19550 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
19560 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
19570 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
19580 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
19590 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
195a0 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
195b0 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
195c0 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
195d0 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
195e0 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70  _cookie = (int)p
195f0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62  In3->u.i;.    db
19600 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
19610 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b  E_InternChanges;
19620 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
19630 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45  ->p2==BTREE_FILE
19640 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f  _FORMAT ){.    /
19650 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73  * Record changes
19660 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72   in the file for
19670 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  mat */.    pDb->
19680 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
19690 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d  rmat = (u8)pIn3-
196a0 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20  >u.i;.  }.  if( 
196b0 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
196c0 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
196d0 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
196e0 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
196f0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
19700 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
19710 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
19720 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
19730 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
19740 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
19750 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  s(db);.    p->ex
19760 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
19770 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19780 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
19790 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
197a0 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
197b0 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
197c0 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
197d0 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
197e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
197f0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
19800 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
19810 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
19820 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
19830 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
19840 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
19850 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
19860 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
19870 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
19880 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
19890 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
198a0 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
198b0 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
198c0 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
198d0 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
198e0 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
198f0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
19900 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
19910 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
19920 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
19930 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
19940 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
19950 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
19960 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
19970 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
19980 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
19990 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
199a0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
199b0 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
199c0 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
199d0 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
199e0 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
199f0 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
19a00 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
19a10 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
19a20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
19a30 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
19a40 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
19a50 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
19a60 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
19a70 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
19a80 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
19a90 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
19aa0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
19ab0 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
19ac0 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
19ad0 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
19ae0 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
19af0 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
19b00 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
19b10 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
19b20 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
19b30 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
19b40 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
19b50 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
19b60 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
19b70 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
19b80 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
19b90 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
19ba0 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
19bb0 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
19bc0 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
19bd0 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
19be0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
19bf0 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
19c00 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
19c10 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
19c20 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
19c30 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
19c40 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
19c50 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
19c60 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
19c70 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
19c80 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
19c90 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
19ca0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
19cb0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
19cc0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
19cd0 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
19ce0 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
19cf0 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
19d00 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
19d10 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
19d20 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
19d30 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
19d40 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
19d50 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
19d60 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
19d70 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
19d80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
19d90 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
19da0 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
19db0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61  opcode works exa
19dc0 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70  ctly like ReadOp
19dd0 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69  en except that i
19de0 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b  t first.** check
19df0 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
19e00 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20  cursor on P1 is 
19e10 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74  already open wit
19e20 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  h a root page.**
19e30 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e   number of P2 an
19e40 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
19e50 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
19e60 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
19e70 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
19e80 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
19e90 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
19ea0 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
19eb0 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
19ec0 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
19ed0 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
19ee0 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20  ==0 and with P4 
19ef0 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45  being.** a P4_KE
19f00 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
19f10 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
19f20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
19f30 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20   the same as.** 
19f40 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
19f50 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
19f60 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
19f70 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ursor number..**
19f80 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e  .** See the Open
19f90 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75  Read opcode docu
19fa0 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
19fb0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
19fc0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
19fd0 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
19fe0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
19ff0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1a000 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1a010 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1a020 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1a030 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1a040 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1a050 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
1a060 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
1a070 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1a080 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
1a090 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
1a0a0 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
1a0b0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1a0c0 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1a0d0 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1a0e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1a0f0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1a100 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1a110 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1a120 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1a130 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1a140 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1a150 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1a160 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1a170 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1a180 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1a190 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1a1a0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1a1b0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1a1c0 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1a1d0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1a1e0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1a1f0 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1a200 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1a210 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1a220 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1a230 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1a240 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1a250 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1a260 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1a270 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1a280 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1a290 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1a2a0 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1a2b0 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1a2c0 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1a2d0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1a2e0 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1a2f0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1a300 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1a310 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1a320 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1a330 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1a340 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20  _ReopenIdx: {.  
1a350 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
1a360 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1a370 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73  ->p5==0 );.  ass
1a380 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1a390 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1a3a0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
1a3b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
1a3c0 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e  ( pCur && pCur->
1a3d0 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70  pgnoRoot==(u32)p
1a3e0 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73  Op->p2 ){.    as
1a3f0 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d  sert( pCur->iDb=
1a400 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20  =pOp->p3 );     
1a410 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62   /* Guaranteed b
1a420 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  y the code gener
1a430 61 74 6f 72 20 2a 2f 0a 20 20 20 20 62 72 65 61  ator */.    brea
1a440 6b 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74  k;.  }.  /* If t
1a450 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74  he cursor is not
1a460 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
1a470 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20  or is open on a 
1a480 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69  different.  ** i
1a490 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20  ndex, then fall 
1a4a0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
1a4b0 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63  OpenRead to forc
1a4c0 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 7d 0a  e a reopen */.}.
1a4d0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1a4e0 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1a4f0 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69  ite: {.  int nFi
1a500 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  eld;.  KeyInfo *
1a510 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
1a520 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  p2;.  int iDb;. 
1a530 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
1a540 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
1a550 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
1a560 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65  Db *pDb;..  asse
1a570 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50  rt( (pOp->p5&(OP
1a580 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f 50 46  FLAG_P2ISREG|OPF
1a590 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d 3d 70  LAG_BULKCSR))==p
1a5a0 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73 65  Op->p5 );.  asse
1a5b0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1a5c0 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c  =OP_OpenWrite ||
1a5d0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1a5e0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1a5f0 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
1a600 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1a610 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70  OP_OpenRead || p
1a620 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1a630 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20  eopenIdx.       
1a640 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c     || p->readOnl
1a650 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  y==0 );..  if( p
1a660 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
1a670 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
1a680 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  RT;.    break;. 
1a690 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
1a6a0 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
1a6b0 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
1a6c0 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1a6d0 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
1a6e0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1a6f0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1a700 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1a710 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1a720 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
1a730 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
1a740 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
1a750 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
1a760 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1a770 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
1a780 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20     wrFlag = 1;. 
1a790 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1a7a0 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
1a7b0 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
1a7c0 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53  .    if( pDb->pS
1a7d0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1a7e0 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at < p->minWrite
1a7f0 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20  FileFormat ){.  
1a800 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46      p->minWriteF
1a810 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d  ileFormat = pDb-
1a820 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1a830 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  ormat;.    }.  }
1a840 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67  else{.    wrFlag
1a850 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1a860 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1a870 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20  _P2ISREG ){.    
1a880 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a  assert( p2>0 );.
1a890 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d      assert( p2<=
1a8a0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
1a8b0 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32  sor) );.    pIn2
1a8c0 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
1a8d0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1a8e0 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20  alid(pIn2) );.  
1a8f0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
1a900 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1a910 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )!=0 );.    sqli
1a920 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1a930 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
1a940 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
1a950 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  u.i;.    /* The 
1a960 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  p2 value always 
1a970 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69  comes from a pri
1a980 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  or OP_CreateTabl
1a990 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20  e opcode and.   
1a9a0 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20   ** that opcode 
1a9b0 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20  will always set 
1a9c0 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20  the p2 value to 
1a9d0 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73  2 or more or els
1a9e0 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49  e fail..    ** I
1a9f0 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66  f there were a f
1aa00 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70  ailure, the prep
1aa10 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77  ared statement w
1aa20 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64  ould have halted
1aa30 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72  .    ** before r
1aa40 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73  eaching this ins
1aa50 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  truction. */.   
1aa60 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29   if( NEVER(p2<2)
1aa70 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20   ) {.      rc = 
1aa80 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
1aa90 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
1aaa0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1aab0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
1aac0 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1aad0 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20  =P4_KEYINFO ){. 
1aae0 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f     pKeyInfo = pO
1aaf0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1ab00 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1ab10 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1ab20 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  b) );.    assert
1ab30 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ( pKeyInfo->db==
1ab40 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64  db );.    nField
1ab50 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   = pKeyInfo->nFi
1ab60 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58  eld+pKeyInfo->nX
1ab70 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69  Field;.  }else i
1ab80 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1ab90 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20  P4_INT32 ){.    
1aba0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1abb0 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  .i;.  }.  assert
1abc0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1abd0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1abe0 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73  >=0 );.  testcas
1abf0 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20  e( nField==0 ); 
1ac00 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49   /* Table with I
1ac10 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1ac20 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65  EY and nothing e
1ac30 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20  lse */.  pCur = 
1ac40 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1ac50 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c  , pOp->p1, nFiel
1ac60 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66  d, iDb, 1);.  if
1ac70 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f  ( pCur==0 ) goto
1ac80 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d   no_mem;.  pCur-
1ac90 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1aca0 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20  pCur->isOrdered 
1acb0 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e  = 1;.  pCur->pgn
1acc0 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 20 20 72 63  oRoot = p2;.  rc
1acd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1ace0 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72  ursor(pX, p2, wr
1acf0 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20  Flag, pKeyInfo, 
1ad00 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  pCur->pCursor);.
1ad10 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1ad20 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61   = pKeyInfo;.  a
1ad30 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55  ssert( OPFLAG_BU
1ad40 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c  LKCSR==BTREE_BUL
1ad50 4b 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74  KLOAD );.  sqlit
1ad60 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1ad70 74 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72  ts(pCur->pCursor
1ad80 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  , (pOp->p5 & OPF
1ad90 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a  LAG_BULKCSR));..
1ada0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62    /* Set the Vdb
1adb0 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20  eCursor.isTable 
1adc0 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f  variable. Previo
1add0 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20  us versions of. 
1ade0 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20   ** SQLite used 
1adf0 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  to check if the 
1ae00 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20  root-page flags 
1ae10 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69  were sane at thi
1ae20 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64  s point.  ** and
1ae30 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65   report database
1ae40 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74   corruption if t
1ae50 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75  hey were not, bu
1ae60 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73  t this check has
1ae70 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65  .  ** since move
1ae80 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65  d into the btree
1ae90 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20   layer.  */  .  
1aea0 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
1aeb0 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
1aec0 4b 45 59 49 4e 46 4f 3b 0a 20 20 62 72 65 61 6b  KEYINFO;.  break
1aed0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1aee0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
1aef0 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53   P2 * P4 P5.** S
1af00 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1af10 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P2.**.** Open a
1af20 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1af30 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1af40 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1af50 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1af60 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1af70 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1af80 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1af90 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1afa0 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1afb0 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1afc0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1afd0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1afe0 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
1aff0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1b000 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1b010 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
1b020 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
1b030 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
1b040 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
1b050 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
1b060 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
1b070 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
1b080 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
1b090 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
1b0a0 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
1b0b0 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
1b0c0 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
1b0d0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
1b0e0 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1b0f0 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1b100 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1b110 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1b120 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1b130 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1b140 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1b150 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1b160 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1b170 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1b180 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1b190 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1b1a0 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1b1b0 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1b1c0 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1b1d0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1b1e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  *.** Synopsis: n
1b1f0 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1b200 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1b210 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
1b220 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
1b230 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
1b240 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
1b250 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
1b260 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
1b270 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
1b280 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
1b290 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
1b2a0 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
1b2b0 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
1b2c0 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
1b2d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1b2e0 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
1b2f0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1b300 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
1b310 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e  or *pCx;.  KeyIn
1b320 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  fo *pKeyInfo;.. 
1b330 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
1b340 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
1b350 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1b360 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
1b370 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
1b380 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
1b390 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
1b3a0 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
1b3b0 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
1b3c0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
1b3d0 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
1b3e0 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28  NT_DB;.  assert(
1b3f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1b400 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1b410 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1b420 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1b430 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1b440 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
1b450 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1b460 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1b470 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1b480 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20  ->isEphemeral = 
1b490 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
1b4a0 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70  3BtreeOpen(db->p
1b4b0 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78  Vfs, 0, db, &pCx
1b4c0 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20  ->pBt, .        
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4e0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1b4f0 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c  AL | BTREE_SINGL
1b500 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73  E | pOp->p5, vfs
1b510 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  Flags);.  if( rc
1b520 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1b530 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b540 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1b550 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d  Cx->pBt, 1);.  }
1b560 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1b570 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
1b580 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
1b590 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
1b5a0 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
1b5b0 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
1b5c0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1b5d0 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
1b5e0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c  BTREE_BLOBKEY fl
1b5f0 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
1b600 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
1b610 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1b620 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
1b630 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
1b640 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
1b650 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
1b660 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
1b670 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
1b680 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1b690 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f     if( (pKeyInfo
1b6a0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1b6b0 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
1b6c0 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
1b6d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1b6e0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1b6f0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
1b700 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1b710 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c  eTable(pCx->pBt,
1b720 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c   &pgno, BTREE_BL
1b730 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29  OBKEY | pOp->p5)
1b740 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  ; .      if( rc=
1b750 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b760 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67        assert( pg
1b770 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b  no==MASTER_ROOT+
1b780 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  1 );.        ass
1b790 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1b7a0 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20  b==db );.       
1b7b0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1b7c0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1b7d0 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
1b7e0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1b7f0 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20  nfo;.        rc 
1b800 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1b810 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70  rsor(pCx->pBt, p
1b820 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f  gno, 1, pKeyInfo
1b830 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1b840 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1b850 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
1b860 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1b870 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b880 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1b890 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
1b8a0 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72   1, 0, pCx->pCur
1b8b0 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
1b8c0 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1b8d0 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
1b8e0 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d  sOrdered = (pOp-
1b8f0 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44  >p5!=BTREE_UNORD
1b900 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ERED);.  break;.
1b910 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
1b920 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50  rterOpen P1 P2 P
1b930 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  3 P4 *.**.** Thi
1b940 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  s opcode works l
1b950 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ike OP_OpenEphem
1b960 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74  eral except that
1b970 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74   it opens.** a t
1b980 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74  ransient index t
1b990 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61  hat is specifica
1b9a0 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20  lly designed to 
1b9b0 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61  sort large.** ta
1b9c0 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78  bles using an ex
1b9d0 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72  ternal merge-sor
1b9e0 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a  t algorithm..**.
1b9f0 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50  ** If argument P
1ba00 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  3 is non-zero, t
1ba10 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73  hen it indicates
1ba20 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72   that the sorter
1ba30 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74   may.** assume t
1ba40 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72  hat a stable sor
1ba50 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68  t considering th
1ba60 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64  e first P3 field
1ba70 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79  s of each.** key
1ba80 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74   is sufficient t
1ba90 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65  o produce the re
1baa0 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a  quired results..
1bab0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
1bac0 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  rOpen: {.  VdbeC
1bad0 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1bae0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1baf0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1bb00 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1bb10 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1bb20 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1bb30 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1bb40 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1bb50 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1bb60 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1bb70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1bb80 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1bb90 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1bba0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1bbb0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1bbc0 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72  ==ENC(db) );.  r
1bbd0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
1bbe0 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f  orterInit(db, pO
1bbf0 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 62  p->p3, pCx);.  b
1bc00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1bc10 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74  de: SequenceTest
1bc20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1bc30 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75  Synopsis: if( cu
1bc40 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29  rsor[P1].ctr++ )
1bc50 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50   pc = P2.**.** P
1bc60 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
1bc70 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71  rsor. If the seq
1bc80 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73  uence counter is
1bc90 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c   currently zero,
1bca0 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
1bcb0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
1bcc0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1bcd0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
1bce0 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  increment the.**
1bcf0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61   the sequence va
1bd00 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
1bd10 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a  SequenceTest: {.
1bd20 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1bd30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1bd40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1bd50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1bd60 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1bd70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1bd80 72 74 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20  rt( pC->pSorter 
1bd90 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65  );.  if( (pC->se
1bda0 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a  qCount++)==0 ){.
1bdb0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1bdc0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1bdd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1bde0 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
1bdf0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1be00 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73  psis: P3 columns
1be10 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20   in r[P2].**.** 
1be20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1be30 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  r that points to
1be40 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68   a fake table th
1be50 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  at contains a si
1be60 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64  ngle.** row of d
1be70 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  ata.  The conten
1be80 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f  t of that one ro
1be90 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  w is the content
1bea0 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65   of memory.** re
1beb0 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f  gister P2.  In o
1bec0 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73  ther words, curs
1bed0 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e  or P1 becomes an
1bee0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a   alias for the .
1bef0 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74  ** MEM_Blob cont
1bf00 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ent contained in
1bf10 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1bf20 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62  .** A pseudo-tab
1bf30 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
1bf40 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
1bf50 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67  d to hold a sing
1bf60 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
1bf70 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
1bf80 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
1bf90 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
1bfa0 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
1bfb0 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
1bfc0 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
1bfd0 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f  n opcode.  The O
1bfe0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a  P_Column opcode.
1bff0 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  ** is the only c
1c000 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61  ursor opcode tha
1c010 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70  t works with a p
1c020 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
1c030 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d  ** P3 is the num
1c040 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1c050 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61   the records tha
1c060 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  t will be stored
1c070 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64   by.** the pseud
1c080 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
1c090 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20   OP_OpenPseudo: 
1c0a0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1c0b0 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1c0c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1c0d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1c0e0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1c0f0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1c100 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
1c110 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20  , -1, 0);.  if( 
1c120 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1c130 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1c140 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1c150 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20  >pseudoTableReg 
1c160 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
1c170 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1c180 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1c190 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ==0 );.  break;.
1c1a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1c1b0 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
1c1c0 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
1c1d0 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
1c1e0 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
1c1f0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
1c200 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
1c210 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
1c220 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
1c230 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
1c240 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c250 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c260 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
1c270 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1c280 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1c290 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d  [pOp->p1]);.  p-
1c2a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20  >apCsr[pOp->p1] 
1c2b0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1c2c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1c2d0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GE P1 P2 P3 P4 *
1c2e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1c2f0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1c300 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c310 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1c320 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1c330 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1c340 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1c350 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1c360 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
1c370 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
1c380 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1c390 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1c3a0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1c3b0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1c3c0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1c3d0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1c3e0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1c3f0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1c400 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1c410 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1c420 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1c430 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1c440 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1c450 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1c460 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1c470 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1c480 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
1c490 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1c4a0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1c4b0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1c4c0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1c4d0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1c4e0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1c4f0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1c500 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
1c510 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
1c520 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1c530 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1c540 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1c550 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1c560 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1c570 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1c580 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1c590 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1c5a0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1c5b0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
1c5c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1c5d0 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34  ekGT P1 P2 P3 P4
1c5e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1c5f0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1c600 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1c610 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1c620 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1c630 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1c640 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1c650 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1c660 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1c670 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1c680 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1c690 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1c6a0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1c6b0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1c6c0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1c6d0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1c6e0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1c6f0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1c700 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1c710 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1c720 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1c730 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1c740 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1c750 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
1c760 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1c770 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
1c780 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
1c790 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1c7a0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1c7b0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1c7c0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1c7d0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1c7e0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1c7f0 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
1c800 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1c810 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
1c820 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
1c830 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1c840 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1c850 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
1c860 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
1c870 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1c880 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1c890 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20  SeekLt, SeekGe, 
1c8a0 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1c8b0 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50  ode: SeekLT P1 P
1c8c0 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79  2 P3 P4 * .** Sy
1c8d0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1c8e0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1c8f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1c900 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1c910 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1c920 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1c930 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1c940 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1c950 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1c960 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1c970 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1c980 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1c990 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1c9a0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1c9b0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1c9c0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1c9d0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1c9e0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1c9f0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1ca00 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1ca10 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1ca20 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1ca30 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
1ca40 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1ca50 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1ca60 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
1ca70 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1ca80 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1ca90 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1caa0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1cab0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1cac0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1cad0 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1cae0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1caf0 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1cb00 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1cb10 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1cb20 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1cb30 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1cb40 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1cb50 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1cb60 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1cb70 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1cb80 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1cb90 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20  code: SeekLE P1 
1cba0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1cbb0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1cbc0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1cbd0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1cbe0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1cbf0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1cc00 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1cc10 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1cc20 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1cc30 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1cc40 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1cc50 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1cc60 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1cc70 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1cc80 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1cc90 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1cca0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1ccb0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1ccc0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1ccd0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1cce0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1ccf0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1cd00 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1cd10 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1cd20 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1cd30 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1cd40 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1cd50 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1cd60 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1cd70 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1cd80 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1cd90 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1cda0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1cdb0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1cdc0 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
1cdd0 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
1cde0 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
1cdf0 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
1ce00 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
1ce10 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1ce20 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1ce30 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
1ce40 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Next..**.** See
1ce50 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1ce60 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
1ce70 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1ce80 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54  /.case OP_SeekLT
1ce90 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1cea0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1ceb0 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
1cec0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1ced0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45  /.case OP_SeekGE
1cee0 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1cef0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1cf00 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20  P_SeekGT: {     
1cf10 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1cf20 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  /.  int res;.  i
1cf30 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72  nt oc;.  VdbeCur
1cf40 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63  sor *pC;.  Unpac
1cf50 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69  kedRecord r;.  i
1cf60 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34  nt nField;.  i64
1cf70 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54   iKey;      /* T
1cf80 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1cf90 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20  to seek to */.. 
1cfa0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1cfb0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1cfc0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1cfd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1cfe0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1cff0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1d000 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1d010 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d020 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1d030 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
1d040 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53  P_SeekLE == OP_S
1d050 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73  eekLT+1 );.  ass
1d060 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d  ert( OP_SeekGE =
1d070 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b  = OP_SeekLT+2 );
1d080 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1d090 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGT == OP_SeekL
1d0a0 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+3 );.  assert(
1d0b0 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
1d0c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d0d0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1d0e0 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1d0f0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1d100 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
1d110 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1d120 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
1d130 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ode;.#endif.  if
1d140 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
1d150 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75  .    /* The inpu
1d160 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1d170 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1d180 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1d190 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a  l, string,.    *
1d1a0 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
1d1b0 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
1d1c0 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
1d1d0 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
1d1e0 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b  .    ** the seek
1d1f0 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e  , so convert it.
1d200 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   */.    pIn3 = &
1d210 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1d220 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1d230 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
1d240 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
1d250 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
1d260 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
1d270 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30  Affinity(pIn3, 0
1d280 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65  );.    }.    iKe
1d290 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
1d2a0 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a  ntValue(pIn3);..
1d2b0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1d2c0 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
1d2d0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1d2e0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
1d2f0 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73  thout.    ** los
1d300 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
1d310 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
1d320 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
1d330 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
1d340 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1d350 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
1d360 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
1d370 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
1d380 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
1d390 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1d3a0 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
1d3b0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1d3c0 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
1d3d0 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ber,.        ** 
1d3e0 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1d3f0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1d400 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1d410 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1d420 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42  ->p2 - 1;  VdbeB
1d430 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
1d440 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1d450 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1d460 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1d470 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c  mation iKey is l
1d480 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61  arger than the a
1d490 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
1d4a0 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
1d4b0 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66   substitute >= f
1d4c0 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c  or > and < for <
1d4d0 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73  =. e.g. if the s
1d4e0 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20  earch term.     
1d4f0 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74   ** is 4.9 and t
1d500 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f  he integer appro
1d510 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20  ximation 5:.    
1d520 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20    **.      **   
1d530 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20       (x >  4.9) 
1d540 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20     ->     (x >= 
1d550 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  5).      **     
1d560 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20     (x <= 4.9)   
1d570 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29   ->     (x <  5)
1d580 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1d590 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64  if( pIn3->u.r<(d
1d5a0 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
1d5b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1d5c0 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65  _SeekGE==(OP_See
1d5d0 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kGT-1) );.      
1d5e0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d5f0 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d  kLT==(OP_SeekLE-
1d600 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1d610 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45  sert( (OP_SeekLE
1d620 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1d630 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1d640 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1d650 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
1d660 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
1d670 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20  01) ) oc--;.    
1d680 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1d690 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
1d6a0 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c  on iKey is small
1d6b0 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
1d6c0 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
1d6d0 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
1d6e0 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20  bstitute <= for 
1d6f0 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20  < and > for >=. 
1d700 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69   */.      else i
1d710 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f  f( pIn3->u.r>(do
1d720 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
1d730 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1d740 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLE==(OP_Seek
1d750 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LT+1) );.       
1d760 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1d770 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31  GT==(OP_SeekGE+1
1d780 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1d790 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20  ert( (OP_SeekLT 
1d7a0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1d7b0 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20  eekGE & 0x0001) 
1d7c0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
1d7d0 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
1d7e0 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
1d7f0 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20  1) ) oc++;.     
1d800 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63   }.    } .    rc
1d810 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1d820 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1d830 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  ->pCursor, 0, (u
1d840 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  64)iKey, 0, &res
1d850 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  );.    pC->movet
1d860 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20  oTarget = iKey; 
1d870 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44   /* Used by OP_D
1d880 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28  elete */.    if(
1d890 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1d8a0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
1d8b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1d8c0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1d8d0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1d8e0 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65  ->p4.i;.    asse
1d8f0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1d900 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
1d910 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1d920 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 );.    r.pKeyI
1d930 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1d940 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
1d950 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
1d960 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
1d970 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
1d980 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
1d990 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
1d9a0 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
1d9b0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63  =OP_SeekGT || oc
1d9c0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20  ==OP_SeekLE ){. 
1d9d0 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1d9e0 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20  ult_rc = -1;.   
1d9f0 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
1da00 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
1da10 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a  t_rc = +1;.    *
1da20 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20  *   }.    */.   
1da30 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1da40 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53  ((1 & (oc - OP_S
1da50 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b  eekLT)) ? -1 : +
1da60 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  1);.    assert( 
1da70 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc!=OP_SeekGT ||
1da80 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d   r.default_rc==-
1da90 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1daa0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c   oc!=OP_SeekLE |
1dab0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1dac0 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
1dad0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc!=OP_SeekGE 
1dae0 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1daf0 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =+1 );.    asser
1db00 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc!=OP_SeekLT
1db10 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1db20 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61  ==+1 );..    r.a
1db30 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
1db40 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
1db50 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1db60 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1db70 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1db80 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1db90 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1dba0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
1dbb0 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65  ExpandBlob(r.aMe
1dbc0 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  m);.    rc = sql
1dbd0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1dbe0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1dbf0 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
1dc00 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
1dc10 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1dc20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1dc30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1dc40 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65    }.  }.  pC->de
1dc50 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1dc60 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1dc70 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1dc80 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
1dc90 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
1dca0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1dcb0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e  #endif.  if( oc>
1dcc0 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61  =OP_SeekGE ){  a
1dcd0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1dce0 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGE || oc==OP_S
1dcf0 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28  eekGT );.    if(
1dd00 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
1dd10 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1dd20 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73  GT) ){.      res
1dd30 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
1dd40 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
1dd50 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1dd60 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1dd70 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1dd80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1dd90 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
1dda0 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20  se{.      res = 
1ddb0 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  0;.    }.  }else
1ddc0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  {.    assert( oc
1ddd0 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f  ==OP_SeekLT || o
1dde0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  c==OP_SeekLE );.
1ddf0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c      if( res>0 ||
1de00 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1de10 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20  OP_SeekLT) ){.  
1de20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1de30 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1de40 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d  treePrevious(pC-
1de50 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1de60 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1de70 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1de80 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1de90 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
1dea0 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
1deb0 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
1dec0 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
1ded0 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
1dee0 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65   to.      ** see
1def0 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20   if this is the 
1df00 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  case..      */. 
1df10 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
1df20 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70  e3BtreeEof(pC->p
1df30 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
1df40 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1df50 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
1df60 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
1df70 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
1df80 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1df90 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
1dfa0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1dfb0 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20  ode: Seek P1 P2 
1dfc0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1dfd0 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d  s:  intkey=r[P2]
1dfe0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
1dff0 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f  open table curso
1e000 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f  r and P2 is a ro
1e010 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72  wid integer.  Ar
1e020 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20  range.** for P1 
1e030 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20  to move so that 
1e040 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1e050 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20   rowid given by 
1e060 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
1e070 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66  s actually a def
1e080 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
1e090 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
1e0a0 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
1e0b0 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
1e0c0 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
1e0d0 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
1e0e0 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
1e0f0 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
1e100 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
1e110 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1e120 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f  : {    /* in2 */
1e130 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e140 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
1e150 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1e160 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1e170 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e180 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e190 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1e1a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1e1b0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
1e1c0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1e1d0 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
1e1e0 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20  w = 0;.  pIn2 = 
1e1f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
1e200 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1e210 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1e220 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1e230 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1e240 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61  veto = 1;.  brea
1e250 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1e260 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1e270 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1e280 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1e290 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1e2a0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1e2b0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1e2c0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1e2d0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1e2e0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1e2f0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1e300 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1e310 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1e320 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1e330 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
1e340 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1e350 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1e360 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1e370 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1e380 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
1e390 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1e3a0 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1e3b0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
1e3c0 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
1e3d0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
1e3e0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1e3f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
1e400 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
1e410 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1e420 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62  e where it can b
1e430 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
1e440 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72   the forward dir
1e450 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78  ection.  The Nex
1e460 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
1e470 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20  ll work,.** but 
1e480 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73  not the Prev ins
1e490 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1e4a0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1e4b0 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
1e4c0 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
1e4d0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1e4e0 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
1e4f0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e500 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e510 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1e520 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1e530 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1e540 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1e550 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1e560 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1e570 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1e580 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1e590 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1e5a0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1e5b0 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
1e5c0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1e5d0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1e5e0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1e5f0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1e600 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
1e610 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1e620 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1e630 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1e640 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
1e650 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
1e660 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
1e670 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
1e680 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
1e690 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
1e6a0 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
1e6b0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1e6c0 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
1e6d0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1e6e0 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
1e6f0 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
1e700 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
1e710 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
1e720 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
1e730 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
1e740 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
1e750 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
1e760 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
1e770 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
1e780 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
1e790 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
1e7a0 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
1e7b0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1e7c0 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f   NotExists, NoCo
1e7d0 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  nflict.*/./* Opc
1e7e0 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
1e7f0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1e800 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1e810 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1e820 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1e830 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1e840 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1e850 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1e860 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1e870 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1e880 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1e890 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1e8a0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1e8b0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
1e8c0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
1e8d0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
1e8e0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1e8f0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
1e900 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
1e910 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
1e920 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
1e930 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
1e940 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
1e950 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
1e960 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
1e970 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
1e980 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
1e990 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
1e9a0 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
1e9b0 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
1e9c0 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
1e9d0 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
1e9e0 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
1e9f0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
1ea00 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
1ea10 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
1ea20 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
1ea30 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
1ea40 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
1ea50 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
1ea60 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
1ea70 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
1ea80 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
1ea90 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
1eaa0 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
1eab0 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
1eac0 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
1ead0 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
1eae0 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
1eaf0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
1eb00 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1eb10 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
1eb20 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
1eb30 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
1eb40 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
1eb50 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1eb60 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
1eb70 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
1eb80 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
1eb90 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
1eba0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1ebb0 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
1ebc0 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
1ebd0 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  ase OP_NoConflic
1ebe0 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  t:     /* jump, 
1ebf0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
1ec00 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
1ec10 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1ec20 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
1ec30 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1ec40 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
1ec50 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e  eadyExists;.  in
1ec60 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73  t ii;.  VdbeCurs
1ec70 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
1ec80 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65  s;.  char *pFree
1ec90 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1eca0 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
1ecb0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1ecc0 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
1ecd0 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
1ece0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
1ecf0 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20  + sizeof(Mem)*4 
1ed00 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
1ed10 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20  LITE_TEST.  if( 
1ed20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
1ed30 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c  NoConflict ) sql
1ed40 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1ed50 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  ++;.#endif..  as
1ed60 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1ed70 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1ed80 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1ed90 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1eda0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
1edb0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1edc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1edd0 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
1ede0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1edf0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
1ee00 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
1ee10 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1ee20 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1ee30 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1ee40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1ee50 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
1ee60 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20 20  ;.  pFree = 0;  
1ee70 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
1ee80 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75 70  Only used to sup
1ee90 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65 72  press a compiler
1eea0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69   warning. */.  i
1eeb0 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29  f( pOp->p4.i>0 )
1eec0 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
1eed0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1eee0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1eef0 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
1ef00 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
1ef10 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  3;.    for(ii=0;
1ef20 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
1ef30 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
1ef40 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1ef50 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20  .aMem[ii]) );.  
1ef60 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26      ExpandBlob(&
1ef70 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66  r.aMem[ii]);.#if
1ef80 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1ef90 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20  .      if( ii ) 
1efa0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
1efb0 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d  Op->p3+ii, &r.aM
1efc0 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a  em[ii]);.#endif.
1efd0 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65      }.    pIdxKe
1efe0 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b  y = &r;.  }else{
1eff0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
1f000 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
1f010 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20  npackedRecord(. 
1f020 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49         pC->pKeyI
1f030 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73  nfo, aTempRec, s
1f040 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c  izeof(aTempRec),
1f050 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 20 0a   &pFree.    ); .
1f060 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
1f070 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1f080 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
1f090 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1f0a0 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73 65  Blob );.    asse
1f0b0 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
1f0c0 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20   & MEM_Zero)==0 
1f0d0 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73  );  /* zeroblobs
1f0e0 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65   already expande
1f0f0 64 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  d */.    sqlite3
1f100 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
1f110 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
1f120 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
1f130 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20   pIdxKey);.  }. 
1f140 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c   pIdxKey->defaul
1f150 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66 28 20  t_rc = 0;.  if( 
1f160 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1f170 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
1f180 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
1f190 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
1f1a0 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
1f1b0 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
1f1c0 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c     ** input fiel
1f1d0 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e  ds are NULL, sin
1f1e0 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20  ce any key with 
1f1f0 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a  a NULL will not.
1f200 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20      ** conflict 
1f210 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  */.    for(ii=0;
1f220 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
1f230 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  ++){.      if( r
1f240 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20  .aMem[ii].flags 
1f250 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1f260 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1f270 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72 61 6e  p2 - 1; VdbeBran
1f280 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
1f290 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1f2a0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
1f2b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f2c0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1f2d0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
1f2e0 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
1f2f0 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  s);.  if( pOp->p
1f300 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  4.i==0 ){.    sq
1f310 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
1f320 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69 66  pFree);.  }.  if
1f330 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1f340 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
1f350 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  }.  pC->seekResu
1f360 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65  lt = res;.  alre
1f370 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73  adyExists = (res
1f380 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ==0);.  pC->null
1f390 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45  Row = 1-alreadyE
1f3a0 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66  xists;.  pC->def
1f3b0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1f3c0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1f3d0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1f3e0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1f3f0 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
1f400 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
1f410 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73  aken(alreadyExis
1f420 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
1f430 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1f440 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1f450 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1f460 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1f470 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d  (alreadyExists==
1f480 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 21 61  0,2);.    if( !a
1f490 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1f4a0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1f4b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1f4c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1f4d0 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1f4e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1f4f0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
1f500 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
1f510 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
1f520 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
1f530 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
1f540 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
1f550 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65  .  P3 is an inte
1f560 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50  ger rowid.  If P
1f570 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  1 does not conta
1f580 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
1f590 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65  .** rowid P3 the
1f5a0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
1f5b0 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  ly to P2.  If P1
1f5c0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
1f5d0 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72  record.** with r
1f5e0 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61  owid P3 then lea
1f5f0 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f  ve the cursor po
1f600 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72  inting at that r
1f610 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a  ecord and fall.*
1f620 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  * through to the
1f630 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1f640 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  n..**.** The OP_
1f650 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
1f660 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
1f670 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
1f680 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
1f690 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
1f6a0 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
1f6b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1f6c0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1f6d0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
1f6e0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
1f6f0 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
1f700 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
1f710 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
1f720 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
1f730 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
1f740 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
1f750 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
1f760 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
1f770 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1f780 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
1f790 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ict.*/.case OP_N
1f7a0 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20  otExists: {     
1f7b0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f7c0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1f7d0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1f7e0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1f7f0 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
1f800 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1f810 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1f820 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1f830 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1f840 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1f850 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1f860 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1f870 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1f880 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1f890 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
1f8a0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
1f8b0 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e  >seekOp = 0;.#en
1f8c0 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43  dif.  assert( pC
1f8d0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
1f8e0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1f8f0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1f900 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
1f910 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
1f920 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
1f930 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d  es = 0;.  iKey =
1f940 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63   pIn3->u.i;.  rc
1f950 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1f960 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1f970 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
1f980 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6d 6f   &res);.  pC->mo
1f990 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65  vetoTarget = iKe
1f9a0 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f  y;  /* Used by O
1f9b0 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43  P_Delete */.  pC
1f9c0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1f9d0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1f9e0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1f9f0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1fa00 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65  veto = 0;.  Vdbe
1fa10 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
1fa20 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
1fa30 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  !=0 ){.    pc = 
1fa40 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1fa50 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
1fa60 74 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b  t = res;.  break
1fa70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1fa80 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
1fa90 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1faa0 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50  : r[P2]=cursor[P
1fab0 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46  1].ctr++.**.** F
1fac0 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61  ind the next ava
1fad0 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20  ilable sequence 
1fae0 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f  number for curso
1faf0 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74  r P1..** Write t
1fb00 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1fb10 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  er into register
1fb20 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75   P2..** The sequ
1fb30 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74  ence number on t
1fb40 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63  he cursor is inc
1fb50 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74  remented after t
1fb60 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  his.** instructi
1fb70 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  on.  .*/.case OP
1fb80 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20  _Sequence: {    
1fb90 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1fba0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
1fbb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1fbc0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1fbd0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1fbe0 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
1fbf0 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70  p->p1]!=0 );.  p
1fc00 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70  Out->u.i = p->ap
1fc10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65  Csr[pOp->p1]->se
1fc20 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61  qCount++;.  brea
1fc30 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1fc40 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
1fc50 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
1fc60 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
1fc70 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
1fc80 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1fc90 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
1fca0 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
1fcb0 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
1fcc0 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
1fcd0 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
1fce0 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
1fcf0 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
1fd00 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
1fd10 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
1fd20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
1fd30 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1fd40 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
1fd50 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
1fd60 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
1fd70 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
1fd80 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
1fd90 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
1fda0 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
1fdb0 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
1fdc0 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
1fdd0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1fde0 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
1fdf0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
1fe00 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
1fe10 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
1fe20 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
1fe30 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
1fe40 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
1fe50 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
1fe60 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
1fe70 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
1fe80 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
1fe90 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
1fea0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
1feb0 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
1fec0 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
1fed0 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
1fee0 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
1fef0 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
1ff00 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
1ff10 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
1ff20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1ff30 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20  elease */.  i64 
1ff40 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
1ff50 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f     /* The new ro
1ff60 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  wid */.  VdbeCur
1ff70 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
1ff80 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62  /* Cursor of tab
1ff90 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65  le to get the ne
1ffa0 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74  w rowid */.  int
1ffb0 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
1ffc0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
1ffd0 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65   an sqlite3Btree
1ffe0 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Last() */.  int 
1fff0 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  cnt;            
20000 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f     /* Counter to
20010 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65   limit the numbe
20020 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f  r of searches */
20030 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
20040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
20050 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61  ister holding la
20060 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20  rgest rowid for 
20070 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
20080 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
20090 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f  rame;     /* Roo
200a0 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20  t frame of VDBE 
200b0 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72  */..  v = 0;.  r
200c0 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  es = 0;.  assert
200d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
200e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
200f0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
20100 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
20110 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
20120 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70  );.  if( NEVER(p
20130 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29  C->pCursor==0) )
20140 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72  {.    /* The zer
20150 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
20160 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68   above is all th
20170 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a  at is needed */.
20180 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
20190 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
201a0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
201b0 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
201c0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
201d0 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
201e0 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
201f0 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
20200 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
20210 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
20220 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
20230 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
20240 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
20250 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
20260 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
20270 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
20280 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
20290 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
202a0 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
202b0 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
202c0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
202d0 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
202e0 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
202f0 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
20300 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
20310 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
20320 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
20330 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
20340 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
20350 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
20360 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
20370 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
20380 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
20390 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
203a0 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
203b0 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
203c0 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
203d0 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
203e0 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
203f0 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   times..    */. 
20400 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
20410 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65  sTable );..#ifde
20420 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
20430 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
20440 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
20450 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
20460 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
20470 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
20480 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
20490 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
204a0 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
204b0 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
204c0 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
204d0 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
204e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
204f0 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
20500 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
20510 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
20520 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
20530 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
20540 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
20550 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
20560 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
20570 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
20580 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
20590 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
205a0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
205b0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
205c0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
205d0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
205e0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
205f0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20600 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20610 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20620 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
20630 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  es ){.        v 
20640 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  = 1;   /* IMP: R
20650 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a  -61914-48074 */.
20660 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20670 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
20680 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
20690 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73  sValid(pC->pCurs
206a0 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72  or) );.        r
206b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
206c0 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
206d0 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  sor, &v);.      
206e0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
206f0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
20700 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c  Cannot fail foll
20710 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28  owing BtreeLast(
20720 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  ) */.        if(
20730 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v>=MAX_ROWID ){
20740 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75  .          pC->u
20750 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20  seRandomRowid = 
20760 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
20770 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b  {.          v++;
20780 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35     /* IMP: R-295
20790 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20  38-34987 */.    
207a0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
207b0 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c    }..#ifndef SQL
207c0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
207d0 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70  REMENT.    if( p
207e0 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20  Op->p3 ){.      
207f0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
20800 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
20810 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
20820 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20830 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66  p3>0 );.      if
20840 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
20850 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d         for(pFram
20860 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
20870 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
20880 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
20890 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f  rent);.        /
208a0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
208b0 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
208c0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
208d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
208e0 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65  >p3<=pFrame->nMe
208f0 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65  m );.        pMe
20900 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  m = &pFrame->aMe
20910 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
20920 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20930 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
20940 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
20950 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
20960 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20970 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
20980 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
20990 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61         pMem = &a
209a0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
209b0 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
209c0 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b  Change(p, pMem);
209d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
209e0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
209f0 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20  d(pMem) );..    
20a00 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
20a10 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
20a20 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
20a30 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
20a40 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73  pMem);.      ass
20a50 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
20a60 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
20a70 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68  );  /* mem(P3) h
20a80 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
20a90 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65  */.      if( pMe
20aa0 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
20ab0 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
20ac0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
20ad0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
20ae0 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
20af0 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a  -12275-61338 */.
20b00 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
20b10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20b20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
20b30 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
20b40 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
20b50 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20  pMem->u.i + 1;. 
20b60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65       }.      pMe
20b70 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
20b80 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  }.#endif.    if(
20b90 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
20ba0 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  wid ){.      /* 
20bb0 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
20bc0 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31  F: R-07677-41881
20bd0 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   If the largest 
20be0 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74  ROWID is equal t
20bf0 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c  o the.      ** l
20c00 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
20c10 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32  integer (9223372
20c20 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68  036854775807) th
20c30 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
20c40 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20        ** engine 
20c50 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70  starts picking p
20c60 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74  ositive candidat
20c70 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64  e ROWIDs at rand
20c80 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a  om until.      *
20c90 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74  * it finds one t
20ca0 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69  hat is not previ
20cb0 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20  ously used. */. 
20cc0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20cd0 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
20ce0 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
20cf0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
20d00 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
20d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
20d30 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
20d40 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74  le. */.      cnt
20d50 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a   = 0;.      do{.
20d60 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
20d70 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
20d80 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
20d90 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
20da0 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a  ID>>1); v++;  /*
20db0 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69   Ensure that v i
20dc0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
20dd0 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68  ero */.      }wh
20de0 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c  ile(  ((rc = sql
20df0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
20e00 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
20e10 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a  sor, 0, (u64)v,.
20e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e50 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49   0, &res))==SQLI
20e60 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20  TE_OK).         
20e70 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20     && (res==0). 
20e80 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b             && (+
20e90 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20  +cnt<100));.    
20ea0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
20eb0 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
20ec0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
20ed0 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
20ee0 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30  IMP: R-38219-530
20ef0 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f  02 */.        go
20f00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20f10 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
20f20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30       assert( v>0
20f30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30   );  /* EV: R-40
20f40 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20  812-03570 */.   
20f50 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72   }.    pC->defer
20f60 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
20f70 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
20f80 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
20f90 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
20fa0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
20fb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
20fc0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
20fd0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
20fe0 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61   intkey=r[P3] da
20ff0 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57  ta=r[P2].**.** W
21000 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e  rite an entry in
21010 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  to the table of 
21020 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65  cursor P1.  A ne
21030 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72  w entry is.** cr
21040 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73  eated if it does
21050 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  n't already exis
21060 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f  t or the data fo
21070 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a  r an existing.**
21080 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72   entry is overwr
21090 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61  itten.  The data
210a0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45   is the value ME
210b0 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e  M_Blob stored in
210c0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
210d0 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
210e0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
210f0 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
21100 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d  y must.** be a M
21110 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  EM_Int..**.** If
21120 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
21130 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
21140 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
21150 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
21160 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
21170 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
21180 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
21190 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
211a0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
211b0 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
211c0 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
211d0 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
211e0 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
211f0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
21200 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
21210 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
21220 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
21230 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
21240 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
21250 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  g of P5 is set a
21260 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  nd if the result
21270 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20   of.** the last 
21280 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28  seek operation (
21290 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61  OP_NotExists) wa
212a0 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65  s a success, the
212b0 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  n this.** operat
212c0 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74  ion will not att
212d0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
212e0 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77   appropriate row
212f0 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a   before doing.**
21300 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20   the insert but 
21310 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65  will instead ove
21320 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74  rwrite the row t
21330 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
21340 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70  s.** currently p
21350 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65  ointing to.  Pre
21360 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69  sumably, the pri
21370 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  or OP_NotExists 
21380 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c  opcode.** has al
21390 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64  ready positioned
213a0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72   the cursor corr
213b0 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20  ectly.  This is 
213c0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  an optimization.
213d0 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70  ** that boosts p
213e0 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76  erformance by av
213f0 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74  oiding redundant
21400 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   seeks..**.** If
21410 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
21420 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
21430 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
21440 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
21450 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
21460 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
21470 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
21480 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
21490 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
214a0 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
214b0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
214c0 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
214d0 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
214e0 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
214f0 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
21500 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
21510 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  t to a string co
21520 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
21530 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d  le-name, or.** m
21540 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
21550 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  t is not NULL, t
21560 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
21570 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33  ook .** (sqlite3
21580 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
21590 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c  ) is invoked fol
215a0 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
215b0 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
215c0 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
215d0 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
215e0 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
215f0 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
21600 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
21610 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
21620 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
21630 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
21640 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
21650 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
21660 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
21670 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
21680 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
21690 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
216a0 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
216b0 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
216c0 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
216d0 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
216e0 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
216f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
21700 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
21710 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
21720 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
21730 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
21740 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
21750 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
21760 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
21770 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
21780 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64  is:  intkey=P3 d
21790 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
217a0 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
217b0 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
217c0 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
217d0 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
217e0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
217f0 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
21800 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
21810 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
21820 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
21830 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
21840 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
21850 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
21860 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
21870 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
21880 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
21890 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
218a0 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
218b0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
218c0 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
218d0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
218e0 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
218f0 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
21900 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
21910 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
21920 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56   inserted */.  V
21930 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
21940 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
21950 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
21960 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
21970 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
21980 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21990 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20  r of zero-bytes 
219a0 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69  to append */.  i
219b0 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
219c0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
219d0 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
219e0 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
219f0 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
21a00 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
21a10 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
21a20 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
21a30 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f  ate hook */.  co
21a40 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20  nst char *zTbl; 
21a50 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20  /* Table name - 
21a60 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61  used by the opda
21a70 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74  te hook */.  int
21a80 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f   op;           /
21a90 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64  * Opcode for upd
21aa0 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45  ate hook: SQLITE
21ab0 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54  _UPDATE or SQLIT
21ac0 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70  E_INSERT */..  p
21ad0 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
21ae0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
21af0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21b00 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21b10 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
21b20 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
21b30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21b40 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21b50 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
21b60 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
21b70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
21b80 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
21b90 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
21ba0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
21bb0 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
21bc0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21bd0 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
21be0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21bf0 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
21c00 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
21c10 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
21c20 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
21c30 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
21c40 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
21c50 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
21c60 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
21c70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
21c80 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
21c90 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
21ca0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
21cb0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
21cc0 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
21cd0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
21ce0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
21cf0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
21d00 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
21d10 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
21d20 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
21d30 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  ) db->lastRowid 
21d40 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  = lastRowid = iK
21d50 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
21d60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
21d70 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e  l ){.    pData->
21d80 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61  z = 0;.    pData
21d90 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ->n = 0;.  }else
21da0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
21db0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
21dc0 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
21dd0 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73  );.  }.  seekRes
21de0 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
21df0 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
21e00 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
21e10 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
21e20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
21e30 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
21e40 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74      nZero = pDat
21e50 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
21e60 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  lse{.    nZero =
21e70 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73   0;.  }.  rc = s
21e80 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
21e90 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  t(pC->pCursor, 0
21ea0 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  , iKey,.        
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ec0 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74    pData->z, pDat
21ed0 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20  a->n, nZero,.   
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ef0 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
21f00 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29  & OPFLAG_APPEND)
21f10 21 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a  !=0, seekResult.
21f20 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72    );.  pC->defer
21f30 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
21f40 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21f50 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21f60 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
21f70 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
21f80 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
21f90 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
21fa0 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
21fb0 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
21fc0 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20  p4.z ){.    zDb 
21fd0 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
21fe0 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54  b].zName;.    zT
21ff0 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  bl = pOp->p4.z;.
22000 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e      op = ((pOp->
22010 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
22020 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
22030 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49  PDATE : SQLITE_I
22040 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65  NSERT);.    asse
22050 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
22060 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61  );.    db->xUpda
22070 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
22080 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a  UpdateArg, op, z
22090 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
220a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
220b0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
220c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
220d0 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20  code: Delete P1 
220e0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
220f0 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72  Delete the recor
22100 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50  d at which the P
22110 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72  1 cursor is curr
22120 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
22130 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  **.** The cursor
22140 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f   will be left po
22150 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72  inting at either
22160 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
22170 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
22180 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
22190 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
221a0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
221b0 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
221c0 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
221d0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
221e0 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
221f0 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20   Hence it is OK 
22200 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72  to delete.** a r
22210 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69  ecord from withi
22220 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a  n a Next loop..*
22230 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
22240 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
22250 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68  of P2 is set, th
22260 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
22270 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
22280 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
22290 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
222a0 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
222b0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
222c0 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
222d0 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
222e0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
222f0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
22300 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74  ot NULL, then it
22310 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
22320 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50  the table that P
22330 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  1 is.** pointing
22340 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65   to.  The update
22350 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e   hook will be in
22360 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69  voked, if it exi
22370 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73  sts..** If P4 is
22380 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74   not NULL then t
22390 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
223a0 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  t have been posi
223b0 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20  tioned.** using 
223c0 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
223d0 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
223e0 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
223f0 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
22400 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
22410 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
22420 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22430 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22440 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22450 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22460 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22470 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
22480 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
22490 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
224a0 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
224b0 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 61  udotables */.  a
224c0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
224d0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
224e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
224f0 45 42 55 47 0a 20 20 2f 2a 20 54 68 65 20 73 65  EBUG.  /* The se
22500 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61  ek operation tha
22510 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  t positioned the
22520 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f   cursor prior to
22530 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 0a   OP_Delete will.
22540 20 20 2a 2a 20 68 61 76 65 20 61 6c 73 6f 20 73    ** have also s
22550 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74  et the pC->movet
22560 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f  oTarget field to
22570 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
22580 65 20 72 6f 77 20 74 68 61 74 0a 20 20 2a 2a 20  e row that.  ** 
22590 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  is being deleted
225a0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
225b0 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62  4.z && pC->isTab
225c0 6c 65 20 29 7b 0a 20 20 20 20 69 36 34 20 69 4b  le ){.    i64 iK
225d0 65 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  ey = 0;.    sqli
225e0 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
225f0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 69 4b  pC->pCursor, &iK
22600 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
22610 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
22620 74 3d 3d 69 4b 65 79 20 29 3b 20 0a 20 20 7d 0a  t==iKey ); .  }.
22630 23 65 6e 64 69 66 0a 20 0a 20 20 72 63 20 3d 20  #endif. .  rc = 
22640 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
22650 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  te(pC->pCursor);
22660 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
22670 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
22680 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
22690 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
226a0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
226b0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
226c0 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
226d0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
226e0 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73  ->p4.z && pC->is
226f0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d  Table ){.    db-
22700 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
22710 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
22720 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a   SQLITE_DELETE,.
22730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22740 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b          db->aDb[
22750 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  pC->iDb].zName, 
22760 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d 3e 6d  pOp->p4.z, pC->m
22770 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20  ovetoTarget);.  
22780 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
22790 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66  b>=0 );.  }.  if
227a0 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
227b0 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
227c0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65  nChange++;.  bre
227d0 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ak;.}./* Opcode:
227e0 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20   ResetCount * * 
227f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
22800 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61  value of the cha
22810 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nge counter is c
22820 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74  opied to the dat
22830 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
22840 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28  change counter (
22850 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73  returned by subs
22860 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20  equent calls to 
22870 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
22880 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20  ))..** Then the 
22890 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61  VMs internal cha
228a0 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65  nge counter rese
228b0 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73  ts to 0..** This
228c0 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
228d0 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f  ger programs..*/
228e0 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f  .case OP_ResetCo
228f0 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  unt: {.  sqlite3
22900 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
22910 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
22920 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
22930 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22940 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43   Opcode: SorterC
22950 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
22960 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
22970 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69   if key(P1)!=tri
22980 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f  m(r[P3],P4) goto
22990 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
229a0 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
229b0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
229c0 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65  n compares a pre
229d0 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  fix of the.** re
229e0 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67  cord blob in reg
229f0 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74  ister P3 against
22a00 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
22a10 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
22a20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
22a30 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
22a40 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65  ts to.  Only the
22a50 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73   first P4 fields
22a60 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64  .** of r[P3] and
22a70 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f   the sorter reco
22a80 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  rd are compared.
22a90 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
22aa0 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65   P3 or the sorte
22ab0 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c  r contains a NUL
22ac0 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69  L in one of thei
22ad0 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a  r significant.**
22ae0 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75   fields (not cou
22af0 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65  nting the P4 fie
22b00 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77  lds at the end w
22b10 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64  hich are ignored
22b20 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
22b30 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75  mparison is assu
22b40 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  med to be equal.
22b50 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
22b60 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74  ugh to next inst
22b70 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74  ruction if the t
22b80 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61  wo records compa
22b90 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65  re equal to.** e
22ba0 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70  ach other.  Jump
22bb0 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61   to P2 if they a
22bc0 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f  re different..*/
22bd0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
22be0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
22bf0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
22c00 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65  t res;.  int nKe
22c10 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d  yCol;..  pC = p-
22c20 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22c30 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
22c40 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73  ter(pC) );.  ass
22c50 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
22c60 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
22c70 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
22c80 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c  ->p3];.  nKeyCol
22c90 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
22ca0 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  res = 0;.  rc = 
22cb0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
22cc0 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
22cd0 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73  3, nKeyCol, &res
22ce0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
22cf0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
22d00 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
22d10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
22d20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  .  }.  break;.};
22d30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
22d40 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33  terData P1 P2 P3
22d50 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
22d60 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
22d70 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
22d80 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75  gister P2 the cu
22d90 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74  rrent sorter dat
22da0 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72  a for sorter cur
22db0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20  sor P1..** Then 
22dc0 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e  clear the column
22dd0 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e   header cache on
22de0 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a   cursor P3..**.*
22df0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
22e00 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f   normally use to
22e10 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f   move a record o
22e20 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72  ut of the sorter
22e30 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72   and into.** a r
22e40 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20  egister that is 
22e50 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61  the source for a
22e60 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
22e70 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69  rsor created usi
22e80 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f  ng.** OpenPseudo
22e90 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74  .  That pseudo-t
22ea0 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74  able cursor is t
22eb0 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69  he one that is i
22ec0 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20  dentified by.** 
22ed0 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43  parameter P3.  C
22ee0 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63  learing the P3 c
22ef0 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70  olumn cache as p
22f00 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  art of this opco
22f10 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66  de saves.** us f
22f20 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73  rom having to is
22f30 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e  sue a separate N
22f40 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69  ullRow instructi
22f50 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74  on to clear that
22f60 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20   cache..*/.case 
22f70 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b  OP_SorterData: {
22f80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22f90 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  C;..  pOut = &aM
22fa0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
22fb0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22fc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22fd0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
22fe0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22ff0 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
23000 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73  pC, pOut);.  ass
23010 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f  ert( rc!=SQLITE_
23020 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61  OK || (pOut->fla
23030 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29  gs & MEM_Blob) )
23040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
23050 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23060 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
23070 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
23080 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73  p3]->cacheStatus
23090 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
230a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
230b0 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
230c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
230d0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
230e0 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
230f0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
23100 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
23110 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
23120 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
23130 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
23140 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
23150 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
23160 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
23170 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
23180 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
23190 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
231a0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
231b0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
231c0 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
231d0 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
231e0 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
231f0 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
23200 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
23210 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
23220 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
23230 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
23240 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
23250 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  =key.**.** Write
23260 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
23270 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
23280 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
23290 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
232a0 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
232b0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
232c0 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
232d0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
232e0 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
232f0 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
23300 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
23310 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
23320 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
23330 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
23340 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
23350 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
23360 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
23370 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
23380 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
23390 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
233a0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
233b0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
233c0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
233d0 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
233e0 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20  ;.  i64 n64;..  
233f0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
23400 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
23410 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
23420 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  t);..  /* Note t
23430 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
23440 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
23450 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
23460 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
23470 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
23480 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23490 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
234a0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
234b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
234c0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
234d0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
234e0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
234f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
23500 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
23510 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
23520 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 || pOp->opco
23530 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
23540 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23550 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23560 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
23570 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
23580 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
23590 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
235a0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
235b0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
235c0 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65  ursor;..  /* The
235d0 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f   OP_RowKey and O
235e0 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
235f0 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
23600 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
23610 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f    ** OP_Rewind/O
23620 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
23630 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
23640 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  uctions that mig
23650 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20  ht invalidate.  
23660 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  ** the cursor.  
23670 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f  If this where no
23680 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f  t the case, on o
23690 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
236a0 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77  assert()s.  ** w
236b0 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75  ould fail.  Shou
236c0 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61  ld this ever cha
236d0 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20  nge (because of 
236e0 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63  changes in the c
236f0 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74  ode.  ** generat
23700 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78  or) then the fix
23710 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73   would be to ins
23720 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20  ert a call to.  
23730 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ** sqlite3VdbeCu
23740 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20  rsorMoveto()..  
23750 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
23760 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
23770 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23780 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
23790 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
237a0 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f   );.#if 0  /* No
237b0 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74  t required due t
237c0 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  o the previous t
237d0 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  o assert() state
237e0 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20  ments */.  rc = 
237f0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
23800 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
23810 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23820 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
23830 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
23840 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
23850 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
23860 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
23870 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f  able );.    VVA_
23880 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
23890 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
238a0 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
238b0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
238c0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
238d0 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
238e0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
238f0 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
23900 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
23910 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
23920 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
23930 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
23940 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
23950 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
23960 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
23970 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
23980 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
23990 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
239a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
239b0 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
239c0 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
239d0 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
239e0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
239f0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
23a00 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
23a10 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
23a20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d  }.  testcase( n=
23a30 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  =0 );.  if( sqli
23a40 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
23a50 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d  ndResize(pOut, M
23a60 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20  AX(n,32)) ){.   
23a70 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
23a80 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
23a90 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
23aa0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
23ab0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  );.  if( pC->isT
23ac0 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72  able==0 ){.    r
23ad0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23ae0 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
23af0 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
23b00 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
23b10 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
23b20 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
23b30 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
23b40 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
23b50 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
23b60 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
23b70 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
23b80 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
23b90 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
23ba0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
23bb0 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
23bc0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23bd0 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
23be0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
23bf0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
23c00 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
23c10 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
23c20 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
23c30 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
23c40 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
23c50 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
23c60 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
23c70 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
23c80 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
23c90 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
23ca0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
23cb0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
23cc0 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
23cd0 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
23ce0 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
23cf0 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
23d00 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
23d10 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
23d20 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
23d30 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
23d40 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
23d50 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
23d60 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43  lease */.  VdbeC
23d70 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
23d80 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   v;.  sqlite3_vt
23d90 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
23da0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
23db0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
23dc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23dd0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23de0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23df0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23e00 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23e10 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
23e20 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
23e30 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e  eReg==0 || pC->n
23e40 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20  ullRow );.  if( 
23e50 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
23e60 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
23e70 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62   MEM_Null;.    b
23e80 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
23e90 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
23ea0 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
23eb0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
23ec0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
23ed0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
23ee0 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
23ef0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
23f00 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  {.    pVtab = pC
23f10 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
23f20 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  Vtab;.    pModul
23f30 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
23f40 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  le;.    assert( 
23f50 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
23f60 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  );.    rc = pMod
23f70 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e  ule->xRowid(pC->
23f80 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29  pVtabCursor, &v)
23f90 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
23fa0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
23fb0 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20   pVtab);.#endif 
23fc0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
23fd0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20  IRTUALTABLE */. 
23fe0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
23ff0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
24000 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
24010 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
24020 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20  Restore(pC);.   
24030 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
24040 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
24050 72 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  r;.    rc = sqli
24060 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
24070 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
24080 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
24090 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
240a0 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63  /* Always so bec
240b0 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52 65  ause of CursorRe
240c0 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a 2f  store() above */
240d0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
240e0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
240f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
24100 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
24110 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
24120 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
24130 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
24140 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
24150 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
24160 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
24170 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
24180 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
24190 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
241a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
241b0 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
241c0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
241d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
241e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
241f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24200 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24210 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24220 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
24230 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61  ow = 1;.  pC->ca
24240 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24250 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
24260 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
24270 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
24280 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
24290 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
242a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
242b0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
242c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
242d0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
242e0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
242f0 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f   Prev instructio
24300 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
24310 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
24320 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
24330 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
24340 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
24350 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
24360 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
24370 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
24380 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
24390 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
243a0 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
243b0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
243c0 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
243d0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
243e0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
243f0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
24400 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
24410 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
24420 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
24430 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
24440 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
24450 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
24460 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
24470 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
24480 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
24490 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
244a0 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65  ot Next..*/.case
244b0 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
244c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
244d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
244e0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
244f0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
24500 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24510 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24520 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
24530 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24540 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24550 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
24560 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
24570 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
24580 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
24590 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
245a0 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
245b0 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
245c0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
245d0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
245e0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
245f0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24600 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
24610 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
24620 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f    pC->seekOp = O
24630 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20  P_Last;.#endif. 
24640 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29   if( pOp->p2>0 )
24650 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
24660 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
24670 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20 70  .    if( res ) p
24680 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
24690 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
246a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
246b0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
246c0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
246d0 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65  does exactly the
246e0 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f   same thing as O
246f0 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20  P_Rewind except 
24700 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65  that.** it incre
24710 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d  ments an undocum
24720 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ented global var
24730 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74  iable used for t
24740 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f  esting..**.** So
24750 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c  rting is accompl
24760 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67  ished by writing
24770 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20   records into a 
24780 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a  sorting index,.*
24790 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67  * then rewinding
247a0 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20   that index and 
247b0 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20  playing it back 
247c0 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74  from beginning t
247d0 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73  o.** end.  We us
247e0 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70  e the OP_Sort op
247f0 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20  code instead of 
24800 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20  OP_Rewind to do 
24810 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67  the.** rewinding
24820 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f   so that the glo
24830 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c  bal variable wil
24840 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  l be incremented
24850 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69   and.** regressi
24860 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74  on tests can det
24870 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
24880 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69  r not the optimi
24890 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63  zer is.** correc
248a0 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  tly optimizing o
248b0 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73  ut sorts..*/.cas
248c0 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a  e OP_SorterSort:
248d0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
248e0 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20  ase OP_Sort: {  
248f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
24900 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
24910 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f  EST.  sqlite3_so
24920 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71  rt_count++;.  sq
24930 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
24940 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70  nt--;.#endif.  p
24950 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
24960 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
24970 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  T]++;.  /* Fall 
24980 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
24990 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
249a0 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
249b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
249c0 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
249d0 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
249e0 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
249f0 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
24a00 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
24a10 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
24a20 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
24a30 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
24a40 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
24a50 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
24a60 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
24a70 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
24a80 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
24a90 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
24aa0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
24ab0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
24ac0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
24ad0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
24ae0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
24af0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
24b00 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
24b10 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
24b20 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
24b30 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
24b40 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
24b50 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
24b60 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
24b70 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
24b80 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
24b90 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
24ba0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
24bb0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
24bc0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
24bd0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24be0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
24bf0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
24c00 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24c10 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24c20 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24c30 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24c40 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24c50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
24c60 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
24c70 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
24c80 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
24c90 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
24ca0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
24cb0 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69  seekOp = OP_Rewi
24cc0 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nd;.#endif.  if(
24cd0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
24ce0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24cf0 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
24d00 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  d(pC, &res);.  }
24d10 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20  else{.    pCrsr 
24d20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
24d30 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
24d40 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
24d50 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
24d60 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
24d70 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24d80 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
24d90 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24da0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
24db0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
24dc0 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72  (u8)res;.  asser
24dd0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
24de0 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
24df0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
24e00 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
24e10 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
24e20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
24e30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
24e40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
24e50 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
24e60 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63  .**.** Advance c
24e70 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
24e80 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
24e90 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20  e next key/data 
24ea0 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
24eb0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
24ec0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
24ed0 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70  more key/value p
24ee0 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
24ef0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
24f00 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
24f10 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
24f20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e  the cursor advan
24f30 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75  ce was successfu
24f40 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
24f50 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
24f60 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63  .** The Next opc
24f70 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
24f80 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
24f90 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f  eekGT, SeekGE, o
24fa0 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f  r.** OP_Rewind o
24fb0 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
24fc0 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
24fd0 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20  r.  Next is not 
24fe0 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
24ff0 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65  llow SeekLT, See
25000 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e  kLE, or OP_Last.
25010 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
25020 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
25030 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
25040 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
25050 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65  e.  P1 must have
25060 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20  .** been opened 
25070 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70  prior to this op
25080 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67  code or the prog
25090 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c  ram will segfaul
250a0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  t..**.** The P3 
250b0 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20  value is a hint 
250c0 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70  to the btree imp
250d0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20  lementation. If 
250e0 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d  P3==1, that.** m
250f0 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51  eans P1 is an SQ
25100 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74  L index and that
25110 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
25120 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  n could have bee
25130 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20  n.** omitted if 
25140 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62  that index had b
25150 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20  een unique.  P3 
25160 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50  is usually 0.  P
25170 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65  3 is.** always e
25180 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
25190 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
251a0 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
251b0 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
251c0 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
251d0 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
251e0 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a  reeNext()..**.**
251f0 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
25200 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
25210 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
25220 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
25230 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
25240 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
25250 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
25260 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  nted..**.** See 
25270 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74  also: Prev, Next
25280 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IfOpen.*/./* Opc
25290 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20  ode: NextIfOpen 
252a0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
252b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
252c0 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
252d0 20 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61   Next except tha
252e0 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69  t if cursor P1 i
252f0 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74  s not.** open it
25300 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70   behaves a no-op
25310 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
25320 50 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34  Prev P1 P2 P3 P4
25330 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75   P5.**.** Back u
25340 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  p cursor P1 so t
25350 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
25360 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65   the previous ke
25370 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
25380 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
25390 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
253a0 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b  is no previous k
253b0 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
253c0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
253d0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
253e0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
253f0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
25400 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20  rsor backup was 
25410 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
25420 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
25430 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  to P2..**.**.** 
25440 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
25450 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
25460 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c  llowing an SeekL
25470 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a  T, SeekLE, or.**
25480 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20   OP_Last opcode 
25490 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e  used to position
254a0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72   the cursor.  Pr
254b0 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  ev is not allowe
254c0 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53  d.** to follow S
254d0 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f  eekGT, SeekGE, o
254e0 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a  r OP_Rewind..**.
254f0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
25500 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
25510 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
25520 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
25530 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20  If P1 is.** not 
25540 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65  open then the be
25550 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
25560 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ned..**.** The P
25570 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
25580 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
25590 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
255a0 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
255b0 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
255c0 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
255d0 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
255e0 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
255f0 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
25600 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
25610 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
25620 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
25630 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
25640 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
25650 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
25660 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
25670 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
25680 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
25690 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
256a0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e  BtreePrevious().
256b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
256c0 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
256d0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
256e0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
256f0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
25700 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
25710 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
25720 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f  ncremented..*/./
25730 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66  * Opcode: PrevIf
25740 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
25750 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
25760 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
25770 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70   like Prev excep
25780 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
25790 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
257a0 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
257b0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
257c0 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20  P_SorterNext: { 
257d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
257e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
257f0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d  int res;..  pC =
25800 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25810 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
25820 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
25830 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  res = 0;.  rc = 
25840 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
25850 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72  rNext(db, pC, &r
25860 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74  es);.  goto next
25870 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50  _tail;.case OP_P
25880 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  revIfOpen:    /*
25890 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
258a0 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20  _NextIfOpen:    
258b0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
258c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
258d0 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  1]==0 ) break;. 
258e0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
258f0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76   */.case OP_Prev
25900 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
25910 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
25920 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  xt:          /* 
25930 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
25940 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25950 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
25960 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
25970 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a  pOp->p5<ArraySiz
25980 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29  e(p->aCounter) )
25990 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
259a0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65  r[pOp->p1];.  re
259b0 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  s = pOp->p3;.  a
259c0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
259d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
259e0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
259f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25a00 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >pCursor );.  as
25a10 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20  sert( res==0 || 
25a20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69  (res==1 && pC->i
25a30 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20  sTable==0) );.  
25a40 74 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31  testcase( res==1
25a50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
25a60 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
25a70 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  xt || pOp->p4.xA
25a80 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
25a90 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
25aa0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25ab0 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
25ac0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
25ad0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
25ae0 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74  ious );.  assert
25af0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
25b00 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20  P_NextIfOpen || 
25b10 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
25b20 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ==sqlite3BtreeNe
25b30 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  xt );.  assert( 
25b40 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
25b50 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f  PrevIfOpen || pO
25b60 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
25b70 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
25b80 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ious);..  /* The
25b90 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20   Next opcode is 
25ba0 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20  only used after 
25bb0 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
25bc0 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a  and Rewind..  **
25bd0 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65   The Prev opcode
25be0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66   is only used af
25bf0 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  ter SeekLT, Seek
25c00 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f  LE, and Last. */
25c10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25c20 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
25c30 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
25c40 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20  OP_NextIfOpen.  
25c50 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
25c60 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  Op==OP_SeekGT ||
25c70 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
25c80 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c  SeekGE.       ||
25c90 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
25ca0 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65  Rewind || pC->se
25cb0 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b  ekOp==OP_Found);
25cc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25cd0 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
25ce0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
25cf0 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20 20  OP_PrevIfOpen.  
25d00 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
25d10 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  Op==OP_SeekLT ||
25d20 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
25d30 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c  SeekLE.       ||
25d40 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
25d50 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20  Last );..  rc = 
25d60 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
25d70 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
25d80 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a  es);.next_tail:.
25d90 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
25da0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
25db0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
25dc0 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20  en(res==0,2);.  
25dd0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
25de0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
25df0 30 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  0;.    pc = pOp-
25e00 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e  >p2 - 1;.    p->
25e10 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35  aCounter[pOp->p5
25e20 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ]++;.#ifdef SQLI
25e30 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
25e40 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
25e50 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  ++;.#endif.  }el
25e60 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  se{.    pC->null
25e70 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67  Row = 1;.  }.  g
25e80 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
25e90 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
25ea0 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
25eb0 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
25ec0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
25ed0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
25ee0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
25ef0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
25f00 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
25f10 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
25f20 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
25f30 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
25f40 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
25f50 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
25f60 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
25f70 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
25f80 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
25f90 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
25fa0 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
25fb0 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
25fc0 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
25fd0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
25fe0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
25ff0 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
26000 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
26010 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
26020 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
26030 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
26040 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
26050 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
26060 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
26070 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
26080 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
26090 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
260a0 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
260b0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
260c0 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74  ESULT bit set, t
260d0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
260e0 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74  ust have.** just
260f0 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20   done a seek to 
26100 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74  the spot where t
26110 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  he new entry is 
26120 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a  to be inserted..
26130 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f  ** This flag avo
26140 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74  ids doing an ext
26150 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54  ra seek..**.** T
26160 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
26170 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
26180 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
26190 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
261a0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
261b0 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
261c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
261d0 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
261e0 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
261f0 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
26200 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
26210 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
26220 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
26230 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a  sr;.  int nKey;.
26240 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
26250 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ey;..  assert( p
26260 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26270 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26280 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26290 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
262a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
262b0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
262c0 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
262d0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
262e0 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32  nsert) );.  pIn2
262f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
26300 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
26310 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
26320 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
26330 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
26340 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
26350 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
26360 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61  ->nChange++;.  a
26370 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
26380 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26390 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
263a0 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
263b0 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63  (pIn2);.  if( rc
263c0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
263d0 20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28     if( isSorter(
263e0 70 43 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  pC) ){.      rc 
263f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
26400 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e  terWrite(pC, pIn
26410 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  2);.    }else{. 
26420 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
26430 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20  ->n;.      zKey 
26440 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
26450 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
26460 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
26470 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
26480 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
26490 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
264a0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
264b0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
264c0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
264d0 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20  ).          );. 
264e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
264f0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
26500 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  =0 );.      pC->
26510 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26520 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d  CHE_STALE;.    }
26530 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
26550 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
26560 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
26570 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  key=r[P2@P3].**.
26580 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
26590 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
265a0 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
265b0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
265c0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
265d0 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
265e0 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
265f0 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
26600 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
26610 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
26620 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
26630 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
26640 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
26650 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
26660 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
26670 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
26680 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
26690 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
266a0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
266b0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
266c0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
266d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
266e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
266f0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26700 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26710 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26720 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
26730 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
26740 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
26750 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  Crsr!=0 );.  ass
26760 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
26770 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
26780 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
26790 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
267a0 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64  6)pOp->p3;.  r.d
267b0 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
267c0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
267d0 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66  pOp->p2];.#ifdef
267e0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
267f0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
26800 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
26810 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
26820 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
26830 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
26840 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
26850 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
26860 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
26870 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63   &res);.  if( rc
26880 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
26890 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  es==0 ){.    rc 
268a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
268b0 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d  lete(pCrsr);.  }
268c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
268d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
268e0 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   );.  pC->cacheS
268f0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
26900 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
26910 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
26920 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
26930 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
26940 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
26950 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
26960 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
26970 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
26980 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
26990 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
269a0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
269b0 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
269c0 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
269d0 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
269e0 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
269f0 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
26a00 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
26a10 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
26a20 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
26a30 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
26a40 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
26a50 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
26a60 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
26a70 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
26a80 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ase */.  BtCurso
26a90 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65  r *pCrsr;.  Vdbe
26aa0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
26ab0 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65  4 rowid;..  asse
26ac0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26ad0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26ae0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
26af0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26b00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26b10 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
26b20 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
26b30 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
26b40 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
26b50 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 61 73  = MEM_Null;.  as
26b60 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
26b70 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  e==0 );.  assert
26b80 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
26b90 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 2f 2a  veto==0 );..  /*
26ba0 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f   sqlite3VbeCurso
26bb0 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f  rRestore() can o
26bc0 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20  nly fail if the 
26bd0 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20  record has been 
26be0 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74  deleted.  ** out
26bf0 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20   from under the 
26c00 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69  cursor.  That wi
26c10 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 64  ll never happend
26c20 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64   for an IdxRowid
26c30 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20 68 65  .  ** opcode, he
26c40 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28 29 20  nce the NEVER() 
26c50 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68 65 63  arround the chec
26c60 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 20  k of the return 
26c70 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 72 63  value..  */.  rc
26c80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
26c90 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
26ca0 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
26cb0 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
26cc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
26cd0 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70  error;..  if( !p
26ce0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
26cf0 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a    rowid = 0;  /*
26d00 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
26d10 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
26d20 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
26d30 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
26d40 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
26d50 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29  , pCrsr, &rowid)
26d60 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
26d70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
26d80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26d90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
26da0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
26db0 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d  rowid;.    pOut-
26dc0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
26dd0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26de0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
26df0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
26e00 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
26e10 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
26e20 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
26e30 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
26e40 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
26e50 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
26e60 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
26e70 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
26e80 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
26e90 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
26ea0 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
26eb0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
26ec0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
26ed0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
26ee0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
26ef0 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
26f00 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
26f10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
26f20 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
26f30 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
26f40 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
26f50 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
26f60 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
26f70 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
26f80 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
26f90 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
26fa0 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31  Opcode: IdxGT P1
26fb0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
26fc0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
26fd0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
26fe0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
26ff0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
27000 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
27010 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
27020 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
27030 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
27040 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
27050 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
27060 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
27070 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
27080 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
27090 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
270a0 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
270b0 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
270c0 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
270d0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
270e0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
270f0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
27100 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
27110 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
27120 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
27130 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
27140 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
27150 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
27160 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
27170 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
27180 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
27190 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
271a0 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
271b0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
271c0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
271d0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
271e0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
271f0 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
27200 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
27210 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
27220 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
27230 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
27240 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
27250 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27260 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
27270 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
27280 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
27290 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
272a0 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
272b0 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74  alue then jump t
272c0 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  o P2..** Otherwi
272d0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
272e0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
272f0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
27300 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20  pcode: IdxLE P1 
27310 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
27320 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
27330 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
27340 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
27350 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
27360 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
27370 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
27380 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
27390 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
273a0 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
273b0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
273c0 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
273d0 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
273e0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
273f0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
27400 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27410 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
27420 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
27430 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
27440 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
27450 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
27460 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
27470 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f   then jump.** to
27480 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66   P2. Otherwise f
27490 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
274a0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
274b0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
274c0 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20  IdxLE:          
274d0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
274e0 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20  OP_IdxGT:       
274f0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
27500 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
27510 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
27520 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
27530 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
27540 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
27550 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
27560 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
27570 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
27580 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27590 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
275a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
275b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
275c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
275d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
275e0 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
275f0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
27600 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28  r!=0);.  assert(
27610 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27620 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
27630 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
27640 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
27650 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27660 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
27670 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
27680 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
27690 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
276a0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69  6)pOp->p4.i;.  i
276b0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f  f( pOp->opcode<O
276c0 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61  P_IdxLT ){.    a
276d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
276e0 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
276f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27700 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxGT );.    r.d
27710 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
27720 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
27730 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27740 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f  ==OP_IdxGE || pO
27750 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
27760 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xLT );.    r.def
27770 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d  ault_rc = 0;.  }
27780 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
27790 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
277a0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
277b0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
277c0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
277d0 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
277e0 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
277f0 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
27800 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e    res = 0;  /* N
27810 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
27820 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
27830 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
27840 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
27850 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64  eIdxKeyCompare(d
27860 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29  b, pC, &r, &res)
27870 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f  ;.  assert( (OP_
27880 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxLE&1)==(OP_Id
27890 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64  xLT&1) && (OP_Id
278a0 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47  xGE&1)==(OP_IdxG
278b0 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70  T&1) );.  if( (p
278c0 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28  Op->opcode&1)==(
278d0 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20  OP_IdxLT&1) ){. 
278e0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
278f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
27900 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
27910 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
27920 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d   res = -res;.  }
27930 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
27940 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
27950 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
27960 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
27970 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20   );.    res++;. 
27980 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
27990 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20  aken(res>0,2);. 
279a0 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
279b0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
279c0 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   1 ;.  }.  break
279d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
279e0 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33  Destroy P1 P2 P3
279f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
27a00 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61  e an entire data
27a10 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
27a20 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
27a30 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  age in the datab
27a40 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67  ase.** file is g
27a50 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a  iven by P1..**.*
27a60 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
27a70 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69  g destroyed is i
27a80 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
27a90 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d  ase file if P3==
27aa0 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20  0.  If.** P3==1 
27ab0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
27ac0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
27ad0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
27ae0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
27af0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
27b00 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
27b10 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
27b20 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
27b30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56  ..**.** If AUTOV
27b40 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64  ACUUM is enabled
27b50 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73   then it is poss
27b60 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
27b70 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d  r root page.** m
27b80 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e  ight be moved in
27b90 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c  to the newly del
27ba0 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69  eted root page i
27bb0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
27bc0 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  all.** root page
27bd0 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20  s contiguous at 
27be0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
27bf0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
27c00 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61  The former.** va
27c10 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20  lue of the root 
27c20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20  page that moved 
27c30 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f  - its value befo
27c40 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75  re the move occu
27c50 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f  rred -.** is sto
27c60 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
27c70 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20  P2.  If no page 
27c80 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73  .** movement was
27c90 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75   required (becau
27ca0 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  se the table bei
27cb0 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61  ng dropped was a
27cc0 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c  lready .** the l
27cd0 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64  ast one in the d
27ce0 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20  atabase) then a 
27cf0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
27d00 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
27d10 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
27d20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e  is disabled then
27d30 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
27d40 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
27d50 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
27d60 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20  : Clear.*/.case 
27d70 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20  OP_Destroy: {   
27d80 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
27d90 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
27da0 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74  oved;.  int iCnt
27db0 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  ;.  Vdbe *pVdbe;
27dc0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61  .  int iDb;..  a
27dd0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
27de0 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66  ly==0 );.#ifndef
27df0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27e00 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74  TUALTABLE.  iCnt
27e10 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62   = 0;.  for(pVdb
27e20 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64  e=db->pVdbe; pVd
27e30 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62  be; pVdbe = pVdb
27e40 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69  e->pNext){.    i
27e50 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d  f( pVdbe->magic=
27e60 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
27e70 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61  && pVdbe->bIsRea
27e80 64 65 72 20 0a 20 20 20 20 20 26 26 20 70 56 64  der .     && pVd
27e90 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64  be->inVtabMethod
27ea0 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e  <2 && pVdbe->pc>
27eb0 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  =0 .    ){.     
27ec0 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
27ed0 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
27ee0 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b  = db->nVdbeRead;
27ef0 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e  .#endif.  pOut->
27f00 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
27f10 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  ;.  if( iCnt>1 )
27f20 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
27f30 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
27f40 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
27f50 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
27f60 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
27f70 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
27f80 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
27f90 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
27fa0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
27fb0 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f   iDb) );.    iMo
27fc0 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  ved = 0;  /* Not
27fd0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74   needed.  Only t
27fe0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
27ff0 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
28000 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
28010 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
28020 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
28030 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
28040 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
28050 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
28060 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
28070 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28080 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
28090 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
280a0 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
280b0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
280c0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64  3RootPageMoved(d
280d0 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20  b, iDb, iMoved, 
280e0 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20  pOp->p1);.      
280f0 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f  /* All OP_Destro
28100 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63  y operations occ
28110 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62  ur on the same b
28120 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73  tree */.      as
28130 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d  sert( resetSchem
28140 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72  aOnFault==0 || r
28150 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
28160 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20  t==iDb+1 );.    
28170 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46    resetSchemaOnF
28180 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20  ault = iDb+1;.  
28190 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
281a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
281b0 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50  code: Clear P1 P
281c0 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  2 P3.**.** Delet
281d0 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f  e all contents o
281e0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
281f0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
28200 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  ose root page.**
28210 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28220 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
28230 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69  y P1.  But, unli
28240 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e  ke Destroy, do n
28250 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65  ot.** remove the
28260 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28270 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
28280 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
28290 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
282a0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61  ear is in the ma
282b0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
282c0 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
282d0 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
282e0 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
282f0 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
28300 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
28310 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
28320 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
28330 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
28340 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
28350 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
28360 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
28370 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
28380 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65  n the table refe
28390 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20  rred to must be 
283a0 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62  an.** intkey tab
283b0 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65  le (an SQL table
283c0 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e  , not an index).
283d0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
283e0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a  e row change .**
283f0 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
28400 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
28410 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
28420 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
28430 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50  leared. .** If P
28440 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
28450 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n zero, then the
28460 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
28470 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   register P3 is.
28480 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ** also incremen
28490 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
284a0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
284b0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
284c0 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ared..**.** See 
284d0 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f  also: Destroy.*/
284e0 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20  .case OP_Clear: 
284f0 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  {.  int nChange;
28500 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30  . .  nChange = 0
28510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
28520 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
28530 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
28540 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
28550 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72   pOp->p2) );.  r
28560 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
28570 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
28580 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
28590 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
285a0 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
285b0 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
285c0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
285d0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
285e0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
285f0 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
28600 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
28610 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
28620 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
28630 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
28640 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
28650 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
28660 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
28670 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
28680 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
28690 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
286a0 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a  tSorter P1 * * *
286b0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
286c0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f  all contents fro
286d0 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  m the ephemeral 
286e0 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a  table or sorter.
286f0 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20  ** that is open 
28700 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  on cursor P1..**
28710 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28720 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
28730 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20  ursors used for 
28740 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f  sorting and.** o
28750 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70  pened with OP_Op
28760 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f  enEphemeral or O
28770 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f  P_SorterOpen..*/
28780 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f  .case OP_ResetSo
28790 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75  rter: {.  VdbeCu
287a0 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73  rsor *pC;. .  as
287b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
287c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
287d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
287e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
287f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
28800 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
28810 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20 20 20 20  >pSorter ){.    
28820 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
28830 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 70  rReset(db, pC->p
28840 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65  Sorter);.  }else
28850 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
28860 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
28870 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
28880 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
28890 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75  OfCursor(pC->pCu
288a0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
288b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
288c0 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
288d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
288e0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
288f0 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
28900 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
28910 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
28920 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
28930 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
28940 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
28950 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
28960 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
28970 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
28980 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
28990 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
289a0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
289b0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
289c0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
289d0 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
289e0 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
289f0 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
28a00 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
28a10 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
28a20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
28a30 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
28a40 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
28a50 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
28a60 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
28a70 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
28a80 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
28a90 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
28aa0 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
28ab0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
28ac0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
28ad0 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
28ae0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
28af0 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
28b00 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
28b10 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
28b20 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
28b30 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
28b40 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
28b50 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
28b60 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
28b70 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
28b80 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
28b90 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
28ba0 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
28bb0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
28bc0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
28bd0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
28be0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
28bf0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
28c00 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
28c10 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
28c20 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
28c30 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61   */.case OP_Crea
28c40 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  teTable: {      
28c50 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
28c60 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
28c70 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67  pgno;.  int flag
28c80 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  s;.  Db *pDb;.. 
28c90 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
28ca0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28cb0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
28cc0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
28cd0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
28ce0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
28cf0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
28d00 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
28d10 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
28d20 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
28d30 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
28d40 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
28d50 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
28d60 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
28d70 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
28d80 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
28d90 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
28da0 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
28db0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
28dc0 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
28dd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
28de0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
28df0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
28e00 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
28e10 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
28e20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
28e30 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
28e40 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
28e50 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
28e60 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
28e70 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
28e80 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
28e90 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
28ea0 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
28eb0 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
28ec0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
28ed0 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
28ee0 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
28ef0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
28f00 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
28f10 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
28f20 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
28f30 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
28f40 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
28f50 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
28f60 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
28f70 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
28f80 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
28f90 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
28fa0 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
28fb0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
28fc0 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
28fd0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
28fe0 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
28ff0 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
29000 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
29010 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
29020 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
29030 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
29040 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
29050 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
29060 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
29070 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
29080 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
29090 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
290a0 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
290b0 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
290c0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
290d0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
290e0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
290f0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
29100 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
29110 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
29120 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
29130 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
29140 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
29150 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
29160 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
29170 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
29180 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
29190 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
291a0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
291b0 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
291c0 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
291d0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
291e0 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
291f0 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
29200 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
29210 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
29220 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
29230 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
29240 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
29250 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
29260 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
29270 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
29280 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
29290 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
292a0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
292b0 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
292c0 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
292d0 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
292e0 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
292f0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
29300 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
29310 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
29320 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
29330 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
29340 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
29350 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
29360 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
29370 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
29380 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
29390 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
293a0 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
293b0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
293c0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
293d0 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74    if( rc ) sqlit
293e0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
293f0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
29400 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
29410 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
29420 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
29430 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
29440 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
29450 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
29460 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
29470 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
29480 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
29490 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
294a0 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
294b0 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
294c0 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
294d0 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
294e0 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
294f0 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
29500 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
29510 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
29520 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
29530 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
29540 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
29550 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
29560 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
29570 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
29580 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
29590 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
295a0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
295b0 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
295c0 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
295d0 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
295e0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
295f0 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
29600 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
29610 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
29620 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
29630 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
29640 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
29650 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
29660 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
29670 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
29680 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
29690 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
296a0 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
296b0 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
296c0 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
296d0 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
296e0 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
296f0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
29700 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
29710 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
29720 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
29730 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
29740 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a  se OP_DropTable:
29750 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
29760 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
29770 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
29780 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
29790 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
297a0 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
297b0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
297c0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
297d0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
297e0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
297f0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
29800 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
29810 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
29820 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
29830 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
29840 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
29850 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
29860 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
29870 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  e).** in order t
29880 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
29890 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
298a0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
298b0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
298c0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
298d0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
298e0 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
298f0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
29900 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
29910 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
29920 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
29930 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
29940 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
29950 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
29960 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
29970 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
29980 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
29990 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
299a0 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
299b0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
299c0 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
299d0 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
299e0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
299f0 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
29a00 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
29a10 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
29a20 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
29a30 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
29a40 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
29a50 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
29a60 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
29a70 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
29a80 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
29a90 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
29aa0 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
29ab0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
29ac0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
29ad0 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
29ae0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
29af0 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
29b00 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
29b10 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
29b20 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
29b30 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
29b40 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
29b50 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
29b60 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
29b70 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
29b80 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
29b90 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
29ba0 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
29bb0 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
29bc0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
29bd0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
29be0 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
29bf0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
29c00 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
29c10 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
29c20 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
29c30 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
29c40 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
29c50 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
29c60 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
29c70 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
29c80 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
29c90 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
29ca0 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
29cb0 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
29cc0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
29cd0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
29ce0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
29cf0 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
29d00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
29d10 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
29d20 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
29d30 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
29d40 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
29d50 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
29d60 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
29d70 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
29d80 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
29d90 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
29da0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
29db0 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
29dc0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
29dd0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
29de0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
29df0 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
29e00 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
29e10 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
29e20 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
29e30 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
29e40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
29e50 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
29e60 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
29e70 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
29e80 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
29e90 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
29ea0 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
29eb0 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
29ec0 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
29ed0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
29ee0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
29ef0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
29f00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
29f10 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
29f20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
29f30 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
29f40 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
29f50 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
29f60 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
29f70 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
29f80 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
29f90 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
29fa0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
29fb0 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
29fc0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
29fd0 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  >0 );.  aRoot = 
29fe0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
29ff0 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e  aw(db, sizeof(in
2a000 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a  t)*(nRoot+1) );.
2a010 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29    if( aRoot==0 )
2a020 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2a030 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2a040 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2a050 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2a060 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
2a070 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2a080 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2a090 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2a0a0 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
2a0b0 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2a0c0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2a0d0 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
2a0e0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2a0f0 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b  >p1];.  for(j=0;
2a100 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a   j<nRoot; j++){.
2a110 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28      aRoot[j] = (
2a120 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49  int)sqlite3VdbeI
2a130 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d  ntValue(&pIn1[j]
2a140 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a  );.  }.  aRoot[j
2a150 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  ] = 0;.  assert(
2a160 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
2a170 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2a180 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2a190 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20  eMask, pOp->p5) 
2a1a0 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2a1b0 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
2a1c0 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
2a1d0 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
2a1e0 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
2a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a200 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
2a210 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
2a220 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2a230 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20  e(db, aRoot);.  
2a240 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2a250 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
2a260 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2a270 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
2a280 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2a290 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
2a2a0 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
2a2b0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2a2c0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
2a2d0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2a2e0 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2a2f0 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2a300 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2a310 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2a320 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2a330 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2a340 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2a350 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2a360 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2a370 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2a380 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2a390 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2a3a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2a3b0 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74  ynopsis:  rowset
2a3c0 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
2a3d0 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
2a3e0 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
2a3f0 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
2a400 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
2a410 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
2a420 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2a430 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2a440 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
2a450 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
2a460 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
2a470 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
2a480 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
2a490 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2a4a0 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
2a4b0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
2a4c0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
2a4d0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2a4e0 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
2a4f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2a500 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
2a510 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2a520 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
2a530 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2a540 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2a550 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2a560 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
2a570 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2a580 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2a590 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
2a5a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2a5b0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
2a5c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2a5d0 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77  psis:  r[P3]=row
2a5e0 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
2a5f0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
2a600 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
2a610 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
2a620 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
2a630 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2a640 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
2a650 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
2a660 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
2a670 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
2a680 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
2a690 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2a6a0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
2a6b0 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
2a6c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2a6d0 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
2a6e0 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20   val;..  pIn1 = 
2a6f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2a700 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2a710 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2a720 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
2a730 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
2a740 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
2a750 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
2a760 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
2a770 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
2a780 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2a790 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
2a7a0 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
2a7b0 70 32 20 2d 20 31 3b 0a 20 20 20 20 56 64 62 65  p2 - 1;.    Vdbe
2a7c0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
2a7d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
2a7e0 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75  * A value was pu
2a7f0 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  lled from the in
2a800 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  dex */.    sqlit
2a810 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2a820 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
2a830 2c 20 76 61 6c 29 3b 0a 20 20 20 20 56 64 62 65  , val);.    Vdbe
2a840 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29  BranchTaken(0,2)
2a850 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
2a860 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2a870 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2a880 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
2a890 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
2a8a0 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20  is: if r[P3] in 
2a8b0 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20  rowset(P1) goto 
2a8c0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2a8d0 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
2a8e0 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
2a8f0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
2a900 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
2a910 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
2a920 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
2a930 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
2a940 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
2a950 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
2a960 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
2a970 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
2a980 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
2a990 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
2a9a0 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
2a9b0 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
2a9c0 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
2a9d0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
2a9e0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
2a9f0 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
2aa00 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
2aa10 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a  uccessive sets.*
2aa20 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77  * of integers, w
2aa30 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f  here each set co
2aa40 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
2aa50 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a  ates. Each set.*
2aa60 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69  * of values is i
2aa70 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
2aa80 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
2aa90 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
2aaa0 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
2aab0 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
2aac0 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20  P4=-1.  P4 must 
2aad0 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a  be either -1 or.
2aae0 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ** non-negative.
2aaf0 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69    For non-negati
2ab00 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20  ve values of P4 
2ab10 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34  only the lower 4
2ab20 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67  .** bits are sig
2ab30 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nificant..**.** 
2ab40 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
2ab50 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
2ab60 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
2ab70 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
2ab80 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74  st.** the rowset
2ab90 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
2aba0 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
2abb0 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
2abc0 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
2abd0 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
2abe0 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
2abf0 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
2ac00 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
2ac10 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
2ac20 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
2ac30 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
2ac40 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
2ac50 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
2ac60 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
2ac70 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
2ac80 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
2ac90 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
2aca0 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
2acb0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
2acc0 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
2acd0 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
2ace0 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
2acf0 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
2ad00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2ad10 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
2ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ad30 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
2ad40 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
2ad50 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
2ad60 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2ad70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
2ad80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2ad90 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34    iSet = pOp->p4
2ada0 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  .i;.  assert( pI
2adb0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
2adc0 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  t );..  /* If th
2add0 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20  ere is anything 
2ade0 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77  other than a row
2adf0 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65  set object in me
2ae00 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20  mory cell P1,.  
2ae10 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77  ** delete it now
2ae20 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
2ae30 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79  P1 with an empty
2ae40 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69   rowset.  */.  i
2ae50 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2ae60 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2ae70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2ae80 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
2ae90 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
2aea0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2aeb0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
2aec0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2aed0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2aee0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2aef0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53   );.  assert( iS
2af00 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d  et==-1 || iSet>=
2af10 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20  0 );.  if( iSet 
2af20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20  ){.    exists = 
2af30 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
2af40 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2af50 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75  t, iSet, pIn3->u
2af60 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  .i);.    VdbeBra
2af70 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21  nchTaken(exists!
2af80 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65  =0,2);.    if( e
2af90 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70  xists ){.      p
2afa0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2afb0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2afc0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53    }.  }.  if( iS
2afd0 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
2afe0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2aff0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2b000 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2b010 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
2b020 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b030 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
2b040 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
2b050 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2b060 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2b070 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
2b080 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
2b090 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
2b0a0 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
2b0b0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2b0c0 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
2b0d0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
2b0e0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
2b0f0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
2b100 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
2b110 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
2b120 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
2b130 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
2b140 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
2b150 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2b160 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
2b170 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
2b180 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
2b190 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
2b1a0 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
2b1b0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2b1c0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
2b1d0 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
2b1e0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
2b1f0 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
2b200 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
2b210 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
2b220 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
2b230 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
2b240 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
2b250 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2b260 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
2b270 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
2b280 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
2b290 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
2b2a0 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
2b2b0 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
2b2c0 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
2b2d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
2b2e0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
2b2f0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
2b300 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2b310 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
2b320 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
2b330 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2b340 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b360 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
2b370 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
2b380 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2b390 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
2b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b3b0 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
2b3c0 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
2b3d0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
2b3e0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2b3f0 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
2b400 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
2b410 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
2b420 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
2b430 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
2b440 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
2b450 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
2b460 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
2b470 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
2b480 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
2b490 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
2b4a0 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
2b4b0 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
2b4c0 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
2b4d0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
2b4e0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
2b4f0 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
2b500 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
2b510 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
2b520 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
2b530 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2b540 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2b550 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
2b560 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
2b570 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
2b580 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
2b590 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
2b5a0 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
2b5b0 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
2b5c0 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
2b5d0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
2b5e0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
2b5f0 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
2b600 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
2b610 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
2b620 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
2b630 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
2b640 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
2b650 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
2b660 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
2b670 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
2b680 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
2b690 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2b6a0 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
2b6b0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
2b6c0 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
2b6d0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
2b6e0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
2b6f0 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
2b700 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
2b710 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
2b720 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
2b730 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
2b740 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
2b750 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
2b760 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
2b770 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
2b780 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
2b790 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
2b7a0 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
2b7b0 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
2b7c0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
2b7d0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
2b7e0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
2b7f0 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
2b800 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
2b810 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
2b820 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
2b830 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
2b840 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
2b850 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
2b860 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2b870 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
2b880 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
2b890 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
2b8a0 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
2b8b0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
2b8c0 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
2b8d0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2b8e0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
2b8f0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2b900 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
2b910 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
2b920 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
2b930 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
2b940 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
2b950 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
2b960 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
2b970 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
2b980 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
2b990 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
2b9a0 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
2b9b0 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
2b9c0 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
2b9d0 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
2b9e0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2b9f0 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
2ba00 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
2ba10 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
2ba20 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
2ba30 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
2ba40 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
2ba50 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
2ba60 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
2ba70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
2ba80 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
2ba90 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
2baa0 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
2bab0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
2bac0 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
2bad0 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
2bae0 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
2baf0 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
2bb00 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
2bb10 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
2bb20 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
2bb30 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
2bb40 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
2bb50 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
2bb60 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
2bb70 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
2bb80 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
2bb90 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
2bba0 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
2bbb0 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
2bbc0 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
2bbd0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
2bbe0 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
2bbf0 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
2bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
2bc10 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
2bc20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2bc30 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2bc40 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
2bc50 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20  rsor *).        
2bc60 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2bc70 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66  ->nOnce * sizeof
2bc80 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  (u8);.    pFrame
2bc90 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2bca0 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
2bcb0 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
2bcc0 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
2bcd0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2bce0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2bcf0 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
2bd00 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
2bd10 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
2bd20 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
2bd30 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
2bd40 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
2bd50 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2bd60 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
2bd70 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
2bd80 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2bd90 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
2bda0 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65  = pc;.    pFrame
2bdb0 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
2bdc0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
2bdd0 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
2bde0 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
2bdf0 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
2be00 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
2be10 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
2be20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
2be30 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
2be40 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
2be50 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
2be60 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
2be70 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d  token;.    pFram
2be80 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->aOnceFlag = p
2be90 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20  ->aOnceFlag;.   
2bea0 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c   pFrame->nOnceFl
2beb0 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ag = p->nOnceFla
2bec0 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  g;..    pEnd = &
2bed0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2bee0 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
2bef0 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
2bf00 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
2bf10 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
2bf20 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
2bf30 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
2bf40 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
2bf50 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  ed;.      pMem->
2bf60 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
2bf70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
2bf80 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61  me = pRt->u.pFra
2bf90 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  me;.    assert( 
2bfa0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70  pProgram->nMem+p
2bfb0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
2bfc0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2bfd0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2bfe0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
2bff0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2c000 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
2c010 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20   pc==pFrame->pc 
2c020 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72  );.  }..  p->nFr
2c030 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d  ame++;.  pFrame-
2c040 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46  >pParent = p->pF
2c050 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  rame;.  pFrame->
2c060 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
2c070 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d  Rowid;.  pFrame-
2c080 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43  >nChange = p->nC
2c090 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61  hange;.  p->nCha
2c0a0 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
2c0b0 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
2c0c0 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
2c0d0 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2c0e0 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70  pFrame)[-1];.  p
2c0f0 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d  ->nMem = pFrame-
2c100 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d  >nChildMem;.  p-
2c110 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29  >nCursor = (u16)
2c120 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2c130 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20  r;.  p->apCsr = 
2c140 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26  (VdbeCursor **)&
2c150 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b  aMem[p->nMem+1];
2c160 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20  .  p->aOp = aOp 
2c170 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
2c180 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
2c190 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e  gram->nOp;.  p->
2c1a0 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20  aOnceFlag = (u8 
2c1b0 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e  *)&p->apCsr[p->n
2c1c0 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f  Cursor];.  p->nO
2c1d0 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72  nceFlag = pProgr
2c1e0 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20  am->nOnce;.  pc 
2c1f0 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70  = -1;.  memset(p
2c200 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20  ->aOnceFlag, 0, 
2c210 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a  p->nOnceFlag);..
2c220 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2c230 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
2c240 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2c250 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
2c260 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
2c270 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
2c280 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
2c290 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
2c2a0 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
2c2b0 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
2c2c0 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
2c2d0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
2c2e0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
2c2f0 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
2c300 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
2c310 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
2c320 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
2c330 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
2c340 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
2c350 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
2c360 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
2c370 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
2c380 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
2c390 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
2c3a0 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
2c3b0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
2c3c0 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
2c3d0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2c3e0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
2c3f0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2c400 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
2c410 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
2c420 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
2c430 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
2c440 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2c450 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2c460 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2c470 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
2c480 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  In;.  pFrame = p
2c490 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
2c4a0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2c4b0 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
2c4c0 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
2c4d0 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
2c4e0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
2c4f0 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
2c500 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
2c510 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
2c520 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
2c530 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
2c540 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2c550 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2c560 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
2c570 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
2c580 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2c590 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a   fkctr[P1]+=P2.*
2c5a0 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
2c5b0 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
2c5c0 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
2c5d0 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
2c5e0 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
2c5f0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2c600 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
2c610 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
2c620 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2c630 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
2c640 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2c650 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
2c660 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
2c670 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
2c680 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
2c690 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
2c6a0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2c6b0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2c6c0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2c6d0 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
2c6e0 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
2c6f0 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a  ITE_DeferFKs ){.
2c700 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
2c710 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  dImmCons += pOp-
2c720 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  >p2;.  }else if(
2c730 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2c740 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2c750 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2c760 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
2c770 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
2c780 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
2c790 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2c7a0 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
2c7b0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2c7c0 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31  sis: if fkctr[P1
2c7d0 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]==0 goto P2.**.
2c7e0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
2c7f0 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
2c800 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2c810 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
2c820 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
2c830 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
2c840 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
2c850 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
2c860 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2c870 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
2c880 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
2c890 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2c8a0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2c8b0 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
2c8c0 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
2c8d0 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
2c8e0 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
2c8f0 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
2c900 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2c910 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
2c920 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
2c930 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
2c940 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
2c950 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
2c960 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
2c970 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2c980 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
2c990 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
2c9a0 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
2c9b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c9c0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
2c9d0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
2c9e0 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66  chTaken(db->nDef
2c9f0 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
2ca00 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2ca10 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
2ca20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72   if( db->nDeferr
2ca30 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
2ca40 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2ca50 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d  s==0 ) pc = pOp-
2ca60 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
2ca70 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2ca80 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  ken(p->nFkConstr
2ca90 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
2caa0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2cab0 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
2cac0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2cad0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2cae0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
2caf0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2cb00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2cb10 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2cb20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2cb30 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
2cb40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2cb50 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
2cb60 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
2cb70 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2cb80 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2cb90 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
2cba0 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
2cbb0 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
2cbc0 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
2cbd0 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
2cbe0 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
2cbf0 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
2cc00 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
2cc10 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2cc20 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
2cc30 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
2cc40 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
2cc50 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2cc60 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
2cc70 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
2cc80 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
2cc90 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
2cca0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2ccb0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
2ccc0 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
2ccd0 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
2cce0 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
2ccf0 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
2cd00 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
2cd10 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
2cd20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2cd30 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2cd40 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
2cd50 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
2cd60 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2cd70 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
2cd80 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
2cd90 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
2cda0 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
2cdb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2cdc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
2cdd0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2cde0 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
2cdf0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
2ce00 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2ce10 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2ce20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
2ce30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2ce40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2ce50 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
2ce60 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2ce70 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
2ce80 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
2ce90 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
2cea0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2ceb0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
2cec0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
2ced0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
2cee0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2cef0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2cf00 31 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]>0 goto P2.**.
2cf10 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2cf20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2cf30 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2cf40 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
2cf50 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2cf60 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2cf70 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2cf80 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2cf90 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2cfa0 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2cfb0 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2cfc0 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2cfd0 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2cfe0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
2cff0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2d000 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2d010 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2d020 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2d030 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
2d040 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70  beBranchTaken( p
2d050 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a  In1->u.i>0, 2);.
2d060 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
2d070 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2d080 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2d090 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d0a0 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20  pcode: IfNeg P1 
2d0b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2d0c0 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33  opsis: r[P1]+=P3
2d0d0 2c 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74  , if r[P1]<0 got
2d0e0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2d0f0 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2d100 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2d110 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20   Add literal P3 
2d120 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 0a  to the value in.
2d130 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
2d140 68 65 6e 20 69 66 20 74 68 65 20 76 61 6c 75 65  hen if the value
2d150 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2d160 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72  is less than zer
2d170 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  o, jump to P2. .
2d180 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67  */.case OP_IfNeg
2d190 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2d1a0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2d1b0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2d1c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2d1d0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2d1e0 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  t );.  pIn1->u.i
2d1f0 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56   += pOp->p3;.  V
2d200 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2d210 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
2d220 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
2d230 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2d240 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2d250 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d260 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31  pcode: IfZero P1
2d270 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2d280 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50  nopsis: r[P1]+=P
2d290 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67  3, if r[P1]==0 g
2d2a0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  oto P2.**.** The
2d2b0 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
2d2c0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2d2d0 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2d2e0 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20  al P3 to the.** 
2d2f0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2d300 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65  r P1.  If the re
2d310 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20  sult is exactly 
2d320 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
2d330 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72  */.case OP_IfZer
2d340 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
2d350 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2d360 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2d370 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2d380 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2d390 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
2d3a0 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i += pOp->p3;.  
2d3b0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2d3c0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29  pIn1->u.i==0, 2)
2d3d0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2d3e0 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20  i==0 ){.     pc 
2d3f0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2d400 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2d410 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
2d420 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  p * P2 P3 P4 P5.
2d430 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
2d440 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
2d450 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
2d460 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
2d470 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2d480 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
2d490 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
2d4a0 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
2d4b0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2d4c0 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
2d4d0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
2d4e0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
2d4f0 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67  nction.  Use reg
2d500 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74  ister.** P3 as t
2d510 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
2d520 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
2d530 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
2d540 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
2d550 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
2d560 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65  cessors..*/.case
2d570 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
2d580 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
2d590 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2d5a0 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 4d 65 6d  Mem *pRec;.  Mem
2d5b0 20 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   t;.  sqlite3_co
2d5c0 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
2d5d0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
2d5e0 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  al;..  n = pOp->
2d5f0 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p5;.  assert( n>
2d600 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26  =0 );.  pRec = &
2d610 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2d620 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
2d630 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
2d640 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
2d650 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
2d660 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
2d670 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2d680 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
2d690 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
2d6a0 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
2d6b0 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a  hange(p, pRec);.
2d6c0 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20    }.  ctx.pFunc 
2d6d0 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
2d6e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d6f0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2d700 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2d710 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70  rsor) );.  ctx.p
2d720 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d  Mem = pMem = &aM
2d730 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2d740 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69  Mem->n++;.  sqli
2d750 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26  te3VdbeMemInit(&
2d760 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  t, db, MEM_Null)
2d770 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d 20 26  ;.  ctx.pOut = &
2d780 74 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  t;.  ctx.isError
2d790 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 56 64 62   = 0;.  ctx.pVdb
2d7a0 65 20 3d 20 70 3b 0a 20 20 63 74 78 2e 69 4f 70  e = p;.  ctx.iOp
2d7b0 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e 73 6b 69   = pc;.  ctx.ski
2d7c0 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28 63 74  pFlag = 0;.  (ct
2d7d0 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28  x.pFunc->xStep)(
2d7e0 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
2d7f0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
2d800 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20  -23230 */.  if( 
2d810 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
2d820 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2d830 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2d840 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2d850 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 74  e3_value_text(&t
2d860 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
2d870 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
2d880 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c 61 67  if( ctx.skipFlag
2d890 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2d8a0 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2d8b0 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2d8c0 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
2d8d0 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71  ;.    if( i ) sq
2d8e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2d8f0 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31  nt64(&aMem[i], 1
2d900 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
2d910 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
2d920 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
2d930 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
2d940 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
2d950 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
2d960 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a  cum=r[P1] N=P2.*
2d970 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
2d980 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
2d990 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
2d9a0 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
2d9b0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
2d9c0 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
2d9d0 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
2d9e0 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
2d9f0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
2da00 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
2da10 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
2da20 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
2da30 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
2da40 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
2da50 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
2da60 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
2da70 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
2da80 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
2da90 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
2daa0 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
2dab0 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
2dac0 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
2dad0 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
2dae0 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
2daf0 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
2db00 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
2db10 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
2db20 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
2db30 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
2db40 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
2db50 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
2db60 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
2db70 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
2db80 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
2db90 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
2dba0 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
2dbb0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2dbc0 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
2dbd0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2dbe0 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
2dbf0 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45   & ~(MEM_Null|ME
2dc00 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Agg))==0 );.  
2dc10 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2dc20 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d  MemFinalize(pMem
2dc30 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29  , pOp->p4.pFunc)
2dc40 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
2dc50 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2dc60 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2dc70 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
2dc80 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
2dc90 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  m));.  }.  sqlit
2dca0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2dcb0 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64  ding(pMem, encod
2dcc0 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
2dcd0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d  AX_BLOBSIZE(pMem
2dce0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2dcf0 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d  VdbeMemTooBig(pM
2dd00 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  em) ){.    goto 
2dd10 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
2dd20 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
2dd30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2dd40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63  ./* Opcode: Chec
2dd50 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20  kpoint P1 P2 P3 
2dd60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70  * *.**.** Checkp
2dd70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31  oint database P1
2dd80 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f  . This is a no-o
2dd90 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63  p if P1 is not c
2dda0 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57  urrently in.** W
2ddb0 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74  AL mode. Paramet
2ddc0 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20  er P2 is one of 
2ddd0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2dde0 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a  T_PASSIVE, FULL.
2ddf0 2a 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20  ** or RESTART.  
2de00 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
2de10 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
2de20 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
2de30 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
2de40 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
2de50 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
2de60 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2de70 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
2de80 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
2de90 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
2dea0 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
2deb0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
2dec0 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
2ded0 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
2dee0 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
2def0 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
2df00 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
2df10 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
2df20 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
2df30 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
2df40 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
2df50 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
2df60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
2df70 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
2df80 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
2df90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2dfa0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
2dfb0 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
2dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfd0 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
2dfe0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e000 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
2e010 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
2e020 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2e030 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
2e040 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
2e050 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
2e060 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e070 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2e080 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
2e090 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
2e0a0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2e0b0 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
2e0c0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2e0d0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
2e0e0 54 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d  TART.  );.  rc =
2e0f0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2e100 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
2e110 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
2e120 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
2e130 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
2e140 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  USY ){.    rc = 
2e150 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
2e160 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
2e170 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
2e180 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e190 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
2e1a0 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
2e1b0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2e1c0 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
2e1d0 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
2e1e0 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
2e1f0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2e200 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
2e210 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
2e220 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
2e230 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  *.**.** Change t
2e240 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
2e250 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
2e260 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
2e270 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
2e280 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2e290 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
2e2a0 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
2e2b0 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
2e2c0 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
2e2d0 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
2e2e0 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
2e2f0 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
2e300 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
2e310 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
2e320 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
2e330 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
2e340 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
2e350 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
2e360 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
2e370 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
2e380 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
2e390 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
2e3a0 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
2e3b0 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
2e3c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
2e3d0 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
2e3e0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2e3f0 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
2e400 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2e410 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
2e420 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
2e430 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
2e440 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e460 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
2e470 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
2e480 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
2e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4a0 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
2e4b0 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
2e4c0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
2e4d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2e4e0 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
2e4f0 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
2e500 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
2e510 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
2e520 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
2e530 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
2e540 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
2e550 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
2e560 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
2e570 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
2e580 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2e590 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
2e5a0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2e5b0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
2e5c0 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
2e5d0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2e5e0 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
2e5f0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2e600 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2e610 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
2e620 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2e630 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
2e640 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2e650 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2e660 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
2e670 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2e680 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
2e690 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2e6a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2e6b0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2e6c0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2e6d0 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74  nly==0 );..  pBt
2e6e0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2e6f0 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65  p1].pBt;.  pPage
2e700 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
2e710 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f  Pager(pBt);.  eO
2e720 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ld = sqlite3Page
2e730 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rGetJournalMode(
2e740 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65  pPager);.  if( e
2e750 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2e760 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65  ALMODE_QUERY ) e
2e770 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66  New = eOld;.  if
2e780 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f  ( !sqlite3PagerO
2e790 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c  kToChangeJournal
2e7a0 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65  Mode(pPager) ) e
2e7b0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66  New = eOld;..#if
2e7c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e7d0 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65  _WAL.  zFilename
2e7e0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
2e7f0 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20  ilename(pPager, 
2e800 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74  1);..  /* Do not
2e810 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74   allow a transit
2e820 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d  ion to journal_m
2e830 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61  ode=WAL for a da
2e840 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74  tabase.  ** in t
2e850 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65  emporary storage
2e860 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64   or if the VFS d
2e870 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
2e880 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20  shared memory . 
2e890 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d   */.  if( eNew==
2e8a0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2e8b0 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c  E_WAL.   && (sql
2e8c0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69  ite3Strlen30(zFi
2e8d0 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20  lename)==0      
2e8e0 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c       /* Temp fil
2e8f0 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21  e */.       || !
2e900 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53  sqlite3PagerWalS
2e910 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29  upported(pPager)
2e920 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64  )   /* No shared
2e930 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20  -memory support 
2e940 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77  */.  ){.    eNew
2e950 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20   = eOld;.  }..  
2e960 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29  if( (eNew!=eOld)
2e970 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41  .   && (eOld==PA
2e980 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e990 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47  WAL || eNew==PAG
2e9a0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2e9b0 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28  AL).  ){.    if(
2e9c0 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
2e9d0 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
2e9e0 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20  d>1 ){.      rc 
2e9f0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2ea00 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
2ea10 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2ea20 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
2ea30 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67     "cannot chang
2ea40 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72  e %s wal mode fr
2ea50 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
2ea60 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  saction",.      
2ea70 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52      (eNew==PAGER
2ea80 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2ea90 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74   ? "into" : "out
2eaa0 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20   of").      );. 
2eab0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2eac0 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69  }else{. .      i
2ead0 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2eae0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
2eaf0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
2eb00 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65  leaving WAL mode
2eb10 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20  , close the log 
2eb20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73  file. If success
2eb30 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20  ful, the call.  
2eb40 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65        ** to Page
2eb50 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63  rCloseWal() chec
2eb60 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65  kpoints and dele
2eb70 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68  tes the write-ah
2eb80 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20  ead-log .       
2eb90 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
2eba0 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
2ebb0 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
2ebc0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2ebd0 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  le .        ** a
2ebe0 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75  fter a successfu
2ebf0 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20  l return. .     
2ec00 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63     */.        rc
2ec10 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43   = sqlite3PagerC
2ec20 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b  loseWal(pPager);
2ec30 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
2ec40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2ec50 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
2ec60 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2ec70 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
2ec80 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2ec90 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64    }else if( eOld
2eca0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2ecb0 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20  ODE_MEMORY ){.  
2ecc0 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20        /* Cannot 
2ecd0 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63  transition direc
2ece0 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20  tly from MEMORY 
2ecf0 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64  to WAL.  Use mod
2ed00 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a  e OFF.        **
2ed10 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   as an intermedi
2ed20 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  ate */.        s
2ed30 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2ed40 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2ed50 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
2ed60 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20  ODE_OFF);.      
2ed70 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70  }.  .      /* Op
2ed80 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  en a transaction
2ed90 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2eda0 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73   file. Regardles
2edb0 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  s of the journal
2edc0 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20  .      ** mode, 
2edd0 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
2ede0 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72   always uses a r
2edf0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
2ee00 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
2ee10 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
2ee20 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
2ee30 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  t)==0 );.      i
2ee40 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2ee50 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
2ee60 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
2ee70 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e  Version(pBt, (eN
2ee80 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2ee90 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20  LMODE_WAL ? 2 : 
2eea0 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
2eeb0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
2eec0 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
2eed0 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66  MIT_WAL */..  if
2eee0 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77  ( rc ){.    eNew
2eef0 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65   = eOld;.  }.  e
2ef00 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67  New = sqlite3Pag
2ef10 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2ef20 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2ef30 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
2ef40 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
2ef50 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
2ef60 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
2ef70 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
2ef80 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
2ef90 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
2efa0 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
2efb0 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
2efc0 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
2efd0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
2efe0 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
2eff0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2f000 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
2f010 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
2f020 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
2f030 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
2f040 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
2f050 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
2f060 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
2f070 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
2f080 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
2f090 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a  Vacuum * * * * *
2f0a0 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68  .**.** Vacuum th
2f0b0 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
2f0c0 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2f0d0 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72  will cause other
2f0e0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68   virtual.** mach
2f0f0 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74  ines to be creat
2f100 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20  ed and run.  It 
2f110 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65  may not be calle
2f120 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a  d from within.**
2f130 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
2f140 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75  */.case OP_Vacuu
2f150 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  m: {.  assert( p
2f160 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2f170 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52  .  rc = sqlite3R
2f180 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72  unVacuum(&p->zEr
2f190 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65  rMsg, db);.  bre
2f1a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2f1b0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2f1c0 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2f1d0 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
2f1e0 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
2f1f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
2f200 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
2f210 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
2f220 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
2f230 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
2f240 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
2f250 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
2f260 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
2f270 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
2f280 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2f290 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2f2a0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2f2b0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
2f2c0 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
2f2d0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2f2e0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
2f2f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2f300 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2f310 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2f320 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2f330 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2f340 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
2f350 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2f360 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
2f370 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2f380 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2f390 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
2f3a0 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  pBt);.  VdbeBran
2f3b0 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49  chTaken(rc==SQLI
2f3c0 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66  TE_DONE,2);.  if
2f3d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
2f3e0 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  E ){.    pc = pO
2f3f0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72  p->p2 - 1;.    r
2f400 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2f410 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f420 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
2f430 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a   Expire P1 * * *
2f440 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
2f450 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
2f460 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e  ments to expire.
2f470 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65    When an expire
2f480 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69  d statement.** i
2f490 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67  s executed using
2f4a0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
2f4b0 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61  it will either a
2f4c0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
2f4d0 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66  reprepare itself
2f4e0 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67   (if it was orig
2f4f0 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75  inally created u
2f500 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  sing sqlite3_pre
2f510 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72  pare_v2()).** or
2f520 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69   it will fail wi
2f530 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  th SQLITE_SCHEMA
2f540 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
2f550 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
2f560 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
2f570 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
2f580 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
2f590 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
2f5a0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
2f5b0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
2f5c0 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61  s expired..*/.ca
2f5d0 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
2f5e0 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
2f5f0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
2f600 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2f610 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
2f620 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
2f630 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
2f640 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2f650 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2f660 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
2f670 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
2f680 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
2f690 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20  ynopsis: iDb=P1 
2f6a0 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33  root=P2 write=P3
2f6b0 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
2f6c0 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
2f6d0 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
2f6e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
2f6f0 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
2f700 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
2f710 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
2f720 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  abled. .**.** P1
2f730 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
2f740 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
2f750 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
2f760 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
2f770 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c  * on which the l
2f780 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e  ock is acquired.
2f790 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20    A readlock is 
2f7a0 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d  obtained if P3==
2f7b0 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20  0 or.** a write 
2f7c0 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  lock if P3==1..*
2f7d0 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73  *.** P2 contains
2f7e0 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
2f7f0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c  f the table to l
2f800 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f  ock..**.** P4 co
2f810 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
2f820 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   to the name of 
2f830 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2f840 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20  locked. This is 
2f850 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20  only.** used to 
2f860 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f  generate an erro
2f870 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65  r message if the
2f880 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20   lock cannot be 
2f890 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  obtained..*/.cas
2f8a0 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20  e OP_TableLock: 
2f8b0 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  {.  u8 isWriteLo
2f8c0 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33  ck = (u8)pOp->p3
2f8d0 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c  ;.  if( isWriteL
2f8e0 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66  ock || 0==(db->f
2f8f0 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64  lags&SQLITE_Read
2f900 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a  Uncommitted) ){.
2f910 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70      int p1 = pOp
2f920 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72  ->p1; .    asser
2f930 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64  t( p1>=0 && p1<d
2f940 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73  b->nDb );.    as
2f950 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2f960 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2f970 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  1) );.    assert
2f980 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2f990 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2f9a0 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2f9b0 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2f9c0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2f9d0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2f9e0 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2f9f0 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2fa00 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2fa10 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2fa20 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2fa30 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2fa40 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2fa50 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2fa60 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2fa70 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2fa80 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2fa90 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2faa0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2fab0 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2fac0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2fad0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2fae0 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2faf0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2fb00 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
2fb10 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
2fb20 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
2fb30 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
2fb40 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
2fb50 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
2fb60 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
2fb70 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
2fb80 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
2fb90 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
2fba0 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
2fbb0 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
2fbc0 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
2fbd0 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
2fbe0 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
2fbf0 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
2fc00 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
2fc10 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
2fc20 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
2fc30 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
2fc40 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
2fc50 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2fc60 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2fc70 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
2fc80 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
2fc90 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49  b ) sqlite3VtabI
2fca0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
2fcb0 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
2fcc0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2fcd0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2fce0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2fcf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2fd00 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2fd10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
2fd20 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
2fd30 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
2fd40 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
2fd50 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
2fd60 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
2fd70 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
2fd80 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
2fd90 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
2fda0 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
2fdb0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2fdc0 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
2fdd0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
2fde0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
2fdf0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2fe00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2fe10 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2fe20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2fe30 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2fe40 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
2fe50 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
2fe60 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
2fe70 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
2fe80 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
2fe90 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
2fea0 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
2feb0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2fec0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
2fed0 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
2fee0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
2fef0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2ff00 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
2ff10 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2ff20 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
2ff30 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2ff40 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2ff50 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2ff60 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2ff70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ff80 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2ff90 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
2ffa0 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
2ffb0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2ffc0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2ffd0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2ffe0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2fff0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
30000 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
30010 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
30020 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
30030 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
30040 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
30050 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
30060 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
30070 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
30080 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
30090 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
300a0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
300b0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
300c0 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
300d0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
300e0 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ule;..  assert( 
300f0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
30100 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56    pCur = 0;.  pV
30110 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20  tabCursor = 0;. 
30120 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
30130 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
30140 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69   pModule = (sqli
30150 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
30160 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
30170 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70  ssert(pVtab && p
30180 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20  Module);.  rc = 
30190 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
301a0 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73  Vtab, &pVtabCurs
301b0 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  or);.  sqlite3Vt
301c0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
301d0 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
301e0 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b  SQLITE_OK==rc ){
301f0 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
30200 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ze sqlite3_vtab_
30210 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73  cursor base clas
30220 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75  s */.    pVtabCu
30230 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56  rsor->pVtab = pV
30240 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69  tab;..    /* Ini
30250 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72  tialize vdbe cur
30260 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  sor object */.  
30270 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
30280 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
30290 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20  p1, 0, -1, 0);. 
302a0 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20     if( pCur ){. 
302b0 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62       pCur->pVtab
302c0 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75  Cursor = pVtabCu
302d0 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rsor;.    }else{
302e0 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
302f0 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
30300 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
30310 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
30320 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
30330 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30340 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30350 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
30360 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30370 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30380 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
30390 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
303a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61  * Synopsis: ipla
303b0 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50  n=r[P3] zplan='P
303c0 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  4'.**.** P1 is a
303d0 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
303e0 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
303f0 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
30400 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
30410 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
30420 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
30430 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
30440 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
30450 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
30460 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
30470 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
30480 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
30490 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
304a0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
304b0 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
304c0 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
304d0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
304e0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
304f0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
30500 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
30510 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
30520 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
30530 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
30540 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
30550 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
30560 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
30570 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
30580 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
30590 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
305a0 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
305b0 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
305c0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
305d0 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
305e0 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
305f0 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
30600 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
30610 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
30620 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
30630 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
30640 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
30650 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
30660 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
30670 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
30680 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
30690 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
306a0 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
306b0 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
306c0 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
306d0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
306e0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
306f0 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
30700 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
30710 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
30720 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
30730 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
30740 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
30750 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
30760 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
30770 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
30780 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
30790 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
307a0 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
307b0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
307c0 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70  3];.  pArgc = &p
307d0 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72  Query[1];.  pCur
307e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
307f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
30800 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72  memIsValid(pQuer
30810 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  y) );.  REGISTER
30820 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
30830 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
30840 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
30850 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43  rsor );.  pVtabC
30860 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56  ursor = pCur->pV
30870 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74  tabCursor;.  pVt
30880 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  ab = pVtabCursor
30890 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
308a0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
308b0 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
308c0 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
308d0 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
308e0 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
308f0 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
30900 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
30910 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
30920 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
30930 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
30940 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
30950 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
30960 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
30970 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
30980 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d  */.  {.    res =
30990 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20   0;.    apArg = 
309a0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f  p->apArg;.    fo
309b0 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b  r(i = 0; i<nArg;
309c0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41   i++){.      apA
309d0 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
309e0 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  +1];.    }..    
309f0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
30a00 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
30a10 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
30a20 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
30a30 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
30a40 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
30a50 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
30a60 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
30a70 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
30a80 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
30a90 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30aa0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
30ab0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
30ac0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
30ad0 20 20 7d 0a 20 20 20 20 56 64 62 65 42 72 61 6e    }.    VdbeBran
30ae0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
30af0 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
30b00 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
30b10 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
30b20 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
30b30 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
30b40 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
30b50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
30b60 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
30b70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30b80 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
30b90 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
30ba0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
30bb0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
30bc0 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a  vcolumn(P2).**.*
30bd0 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75  * Store the valu
30be0 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63  e of the P2-th c
30bf0 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  olumn of.** the 
30c00 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75  row of the virtu
30c10 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68  al-table that th
30c20 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20  e .** P1 cursor 
30c30 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69  is pointing to i
30c40 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
30c50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c  .*/.case OP_VCol
30c60 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  umn: {.  sqlite3
30c70 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
30c80 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
30c90 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
30ca0 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73   Mem *pDest;.  s
30cb0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73  qlite3_context s
30cc0 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65  Context;..  Vdbe
30cd0 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70  Cursor *pCur = p
30ce0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
30cf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
30d00 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
30d10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
30d20 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
30d30 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
30d40 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
30d50 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
30d60 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
30d70 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
30d80 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
30d90 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
30da0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
30db0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
30dc0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
30dd0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
30de0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
30df0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
30e00 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
30e10 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
30e20 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
30e30 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
30e40 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
30e50 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74  .  sContext.pOut
30e60 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53   = pDest;.  MemS
30e70 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
30e80 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72  , MEM_Null);.  r
30e90 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  c = pModule->xCo
30ea0 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62  lumn(pCur->pVtab
30eb0 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78  Cursor, &sContex
30ec0 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73  t, pOp->p2);.  s
30ed0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
30ee0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
30ef0 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74  ;.  if( sContext
30f00 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
30f10 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73  rc = sContext.is
30f20 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  Error;.  }.  sql
30f30 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
30f40 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e  coding(pDest, en
30f50 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53  coding);.  REGIS
30f60 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
30f70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
30f80 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
30f90 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
30fa0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
30fb0 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
30fc0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
30fd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30fe0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30ff0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
31000 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
31010 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31020 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
31030 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
31040 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
31050 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
31060 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
31070 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
31080 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
31090 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
310a0 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
310b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
310c0 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
310d0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
310e0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
310f0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
31100 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
31110 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
31120 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
31130 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
31140 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
31150 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
31160 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
31170 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
31180 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
31190 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
311a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
311b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
311c0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
311d0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
311e0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
311f0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
31200 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
31210 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
31220 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
31230 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
31240 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
31250 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
31260 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
31270 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
31280 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
31290 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
312a0 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
312b0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
312c0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
312d0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
312e0 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
312f0 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
31300 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
31310 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
31320 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
31330 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
31340 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
31350 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
31360 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
31370 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
31380 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
31390 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
313a0 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
313b0 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
313c0 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  */.  p->inVtabMe
313d0 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
313e0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
313f0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
31400 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
31410 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c  ethod = 0;.  sql
31420 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
31430 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
31440 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
31450 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
31460 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
31470 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
31480 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  );.  }.  VdbeBra
31490 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29  nchTaken(!res,2)
314a0 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ;.  if( !res ){.
314b0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
314c0 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
314d0 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20   P2 */.    pc = 
314e0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
314f0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
31500 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23  r_interrupt;.}.#
31510 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
31520 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31530 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
31540 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
31550 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
31560 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a  : VRename P1 * *
31570 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
31580 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
31590 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
315a0 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
315b0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
315c0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
315d0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
315e0 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61  responding xRena
315f0 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76  me method. The v
31600 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73  alue.** in regis
31610 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64  ter P1 is passed
31620 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72   as the zName ar
31630 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52  gument to the xR
31640 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f  ename method..*/
31650 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65  .case OP_VRename
31660 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
31670 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d  ab *pVtab;.  Mem
31680 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61   *pName;..  pVta
31690 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
316a0 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  b->pVtab;.  pNam
316b0 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  e = &aMem[pOp->p
316c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
316d0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
316e0 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72  ename );.  asser
316f0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e  t( memIsValid(pN
31700 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74  ame) );.  assert
31710 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
31720 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
31730 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
31740 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
31750 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
31760 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74  EM_Str );.  test
31770 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
31780 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
31790 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
317a0 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
317b0 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73  UTF16BE );.  tes
317c0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
317d0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
317e0 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  E );.  rc = sqli
317f0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
31800 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c  oding(pName, SQL
31810 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
31820 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
31830 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61 62  {.    rc = pVtab
31840 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
31850 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d  me(pVtab, pName-
31860 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  >z);.    sqlite3
31870 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
31880 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
31890 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
318a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
318b0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
318c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
318d0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
318e0 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
318f0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
31900 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33  opsis: data=r[P3
31910 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  @P2].**.** P4 is
31920 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
31930 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
31940 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
31950 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
31960 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
31970 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
31980 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
31990 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
319a0 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
319b0 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
319c0 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
319d0 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
319e0 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
319f0 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
31a00 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
31a10 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
31a20 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
31a30 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
31a40 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
31a50 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
31a60 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
31a70 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
31a80 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
31a90 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
31aa0 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
31ab0 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
31ac0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
31ad0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
31ae0 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
31af0 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
31b00 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
31b10 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
31b20 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
31b30 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
31b40 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
31b50 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
31b60 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
31b70 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
31b80 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
31b90 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
31ba0 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
31bb0 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
31bc0 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
31bd0 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
31be0 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
31bf0 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
31c00 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
31c10 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
31c20 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
31c30 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
31c40 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
31c50 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
31c60 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
31c70 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
31c80 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
31c90 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
31ca0 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
31cb0 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
31cc0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
31cd0 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
31ce0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
31cf0 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
31d00 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
31d10 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
31d20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
31d30 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  erted..**.** P5 
31d40 69 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74  is the error act
31d50 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65  ions (OE_Replace
31d60 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67  , OE_Fail, OE_Ig
31d70 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a  nore, etc) to.**
31d80 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61   apply in the ca
31d90 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69  se of a constrai
31da0 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e  nt failure on an
31db0 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74   insert or updat
31dc0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55  e..*/.case OP_VU
31dd0 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74  pdate: {.  sqlit
31de0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
31df0 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
31e00 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
31e10 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
31e20 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
31e30 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
31e40 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
31e50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
31e60 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20  p2==1        || 
31e70 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c  pOp->p5==OE_Fail
31e80 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
31e90 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20  E_Rollback .    
31ea0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
31eb0 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e  E_Abort || pOp->
31ec0 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c  p5==OE_Ignore ||
31ed0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70   pOp->p5==OE_Rep
31ee0 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65  lace.  );.  asse
31ef0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
31f00 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  =0 );.  pVtab = 
31f10 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
31f20 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
31f30 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
31f40 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
31f50 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
31f60 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
31f70 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
31f80 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
31f90 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
31fa0 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
31fb0 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
31fc0 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
31fd0 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
31fe0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
31ff0 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
32000 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
32010 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
32020 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
32030 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
32040 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
32050 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
32060 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
32070 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
32080 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
32090 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
320a0 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
320b0 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
320c0 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
320d0 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
320e0 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
320f0 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
32100 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69  nflict;.    sqli
32110 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
32120 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
32130 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
32140 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
32150 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
32160 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
32170 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
32180 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
32190 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
321a0 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
321b0 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
321c0 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
321d0 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
321e0 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
321f0 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
32200 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
32210 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
32220 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
32230 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
32240 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
32250 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
32260 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
32270 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
32280 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
32290 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
322a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
322b0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
322c0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
322d0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
322e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
322f0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
32300 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
32310 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
32320 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
32330 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
32340 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
32350 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
32360 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
32370 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
32380 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
32390 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
323a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
323b0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
323c0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
323d0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
323e0 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ge(db->aDb[pOp->
323f0 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61  p1].pBt);.  brea
32400 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
32410 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
32420 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
32430 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50  ./* Opcode: MaxP
32440 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  gcnt P1 P2 P3 * 
32450 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73  *.**.** Try to s
32460 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
32470 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61  age count for da
32480 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65  tabase P1 to the
32490 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a   value in P3..**
324a0 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20   Do not let the 
324b0 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
324c0 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68  nt fall below th
324d0 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63  e current page c
324e0 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e  ount and.** do n
324f0 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61  ot change the ma
32500 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
32510 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e   value if P3==0.
32520 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
32530 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
32540 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68  unt after the ch
32550 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72  ange in register
32560 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
32570 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20  MaxPgcnt: {     
32580 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
32590 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75  rerelease */.  u
325a0 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d  nsigned int newM
325b0 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ax;.  Btree *pBt
325c0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
325d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
325e0 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
325f0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
32600 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
32610 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
32620 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
32630 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
32640 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
32650 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
32660 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
32670 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
32680 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
32690 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
326a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
326b0 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
326c0 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20   Init * P2 * P4 
326d0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
326e0 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a  Start at P2.**.*
326f0 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61  * Programs conta
32700 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  in a single inst
32710 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63  ance of this opc
32720 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20  ode as the very 
32730 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e  first.** opcode.
32740 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
32750 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
32760 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
32770 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
32780 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
32790 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
327a0 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
327b0 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
327c0 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f  e callback..** O
327d0 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b  r if P4 is blank
327e0 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67  , use the string
327f0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
32800 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a  ite3_sql()..**.*
32810 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a  * If P2 is not z
32820 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  ero, jump to ins
32830 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
32840 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20  case OP_Init: { 
32850 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
32860 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61   */.  char *zTra
32870 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a  ce;.  char *z;..
32880 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b    if( pOp->p2 ){
32890 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
328a0 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64  2 - 1;.  }.#ifnd
328b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
328c0 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78  RACE.  if( db->x
328d0 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e  Trace.   && !p->
328e0 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26  doingRerun.   &&
328f0 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   (zTrace = (pOp-
32900 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
32910 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30  z : p->zSql))!=0
32920 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71  .  ){.    z = sq
32930 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53  lite3VdbeExpandS
32940 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20  ql(p, zTrace);. 
32950 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
32960 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
32970 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
32980 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23  ee(db, z);.  }.#
32990 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
329a0 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a  _FCNTL_TRACE.  z
329b0 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
329c0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
329d0 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28   p->zSql);.  if(
329e0 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69   zTrace ){.    i
329f0 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
32a00 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
32a10 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62  +){.      if( Db
32a20 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
32a30 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63  eMask, i)==0 ) c
32a40 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
32a50 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
32a60 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b  rol(db, db->aDb[
32a70 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45  i].zName, SQLITE
32a80 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54  _FCNTL_TRACE, zT
32a90 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  race);.    }.  }
32aa0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
32ab0 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
32ac0 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  E */.#ifdef SQLI
32ad0 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28  TE_DEBUG.  if( (
32ae0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
32af0 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a  TE_SqlTrace)!=0.
32b00 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
32b10 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
32b20 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
32b30 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73  ))!=0.  ){.    s
32b40 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
32b50 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
32b60 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
32b70 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
32b80 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
32b90 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
32ba0 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 62 72 65  T_TRACE */.  bre
32bb0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
32bc0 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
32bd0 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
32be0 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
32bf0 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
32c00 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
32c10 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
32c20 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
32c30 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
32c40 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
32c50 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
32c60 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
32c70 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
32c80 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
32c90 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
32ca0 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
32cb0 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
32cc0 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
32cd0 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
32ce0 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
32cf0 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
32d00 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
32d10 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
32d20 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
32d30 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
32d40 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
32d50 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
32d60 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
32d70 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
32d80 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f  ->opcode==OP_Noo
32d90 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  p || pOp->opcode
32da0 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a  ==OP_Explain );.
32db0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
32dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
32e10 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
32e20 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
32e30 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
32e40 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
32e50 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
32e60 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
32e70 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
32e80 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
32e90 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
32ea0 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
32eb0 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
32ec0 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
32ed0 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
32ee0 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
32ef0 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
32f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32f10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32f20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
32f50 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
32f60 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
32f70 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20    u64 endTime = 
32f80 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
32f90 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64 54 69  .      if( endTi
32fa0 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 70 2d 3e  me>start ) pOp->
32fb0 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d  cycles += endTim
32fc0 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  e - start;.     
32fd0 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20   pOp->cnt++;.   
32fe0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
32ff0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
33000 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e  code adds nothin
33010 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  g to the actual 
33020 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20  functionality.  
33030 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67    ** of the prog
33040 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ram.  It is only
33050 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e   here for testin
33060 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e  g and debugging.
33070 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f  .    ** On the o
33080 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f  ther hand, it do
33090 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c  es burn CPU cycl
330a0 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68  es every time th
330b0 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65  rough.    ** the
330c0 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e   evaluator loop.
330d0 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76    So we can leav
330e0 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44  e it out when ND
330f0 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
33100 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  .    */.#ifndef 
33110 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  NDEBUG.    asser
33120 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c  t( pc>=-1 && pc<
33130 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65  p->nOp );..#ifde
33140 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
33150 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
33160 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
33170 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
33180 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28   rc!=0 ) printf(
33190 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20  "rc=%d\n",rc);. 
331a0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
331b0 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f  flags & (OPFLG_O
331c0 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f  UT2_PRERELEASE|O
331d0 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20  PFLG_OUT2) ){.  
331e0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
331f0 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ace(pOp->p2, &aM
33200 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
33210 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
33220 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
33230 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
33240 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
33250 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  ce(pOp->p3, &aMe
33260 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
33270 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
33280 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
33290 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
332a0 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
332b0 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
332c0 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
332d0 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
332e0 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
332f0 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
33300 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
33310 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
33320 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
33330 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
33340 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
33350 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
33360 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
33370 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
33380 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
33390 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
333a0 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
333b0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
333c0 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
333d0 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
333e0 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
333f0 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53         pc, p->zS
33400 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
33410 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
33420 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
33430 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
33440 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
33450 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
33460 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
33470 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65  .  if( resetSche
33480 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20  maOnFault>0 ){. 
33490 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
334a0 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73  neSchema(db, res
334b0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d  etSchemaOnFault-
334c0 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68  1);.  }..  /* Th
334d0 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
334e0 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70  ay out of this p
334f0 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61  rocedure.  We ha
33500 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61  ve to.  ** relea
33510 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f  se the mutexes o
33520 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65  n btrees that we
33530 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74  re acquired at t
33540 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a  he.  ** top. */.
33550 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64  vdbe_return:.  d
33560 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
33570 61 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74  astRowid;.  test
33580 63 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20  case( nVmStep>0 
33590 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  );.  p->aCounter
335a0 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
335b0 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28  US_VM_STEP] += (
335c0 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73  int)nVmStep;.  s
335d0 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28  qlite3VdbeLeave(
335e0 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  p);.  return rc;
335f0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
33600 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
33610 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
33620 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
33630 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
33640 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
33650 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
33660 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
33670 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74  zErrMsg, db, "st
33680 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
33690 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
336a0 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
336b0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
336c0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
336d0 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
336e0 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
336f0 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
33700 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
33710 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  1;.  sqlite3SetS
33720 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
33730 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d  g, db, "out of m
33740 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
33750 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
33760 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
33770 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
33780 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
33790 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
337a0 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
337b0 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
337c0 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
337d0 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
337e0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
337f0 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
33800 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
33810 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
33820 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
33830 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
33840 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
33850 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
33860 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
33870 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
33880 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
33890 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
338a0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
338b0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
338c0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
338d0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
338e0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
338f0 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
33900 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
33910 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
33920 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
33930 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
33940 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
33950 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
33960 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
33970 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
33980 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
33990 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
339a0 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
339b0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
339c0 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.