/ Hex Artifact Content
Login

Artifact 4faacd47f8dae8c950367f25e50da70efa103a34:


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 2f 0a 23 69 66 20 21 64  taken..*/.#if !d
1090: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
10a0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
10b0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
10c0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
10d0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
10e0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
10f0: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1100: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1110: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1120: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e  dbeTakeBranch(in
1130: 74 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  t iSrcLine, u8 I
1140: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28  , u8 M){.    if(
1150: 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20   iSrcLine<=2 && 
1160: 41 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e  ALWAYS(iSrcLine>
1170: 30 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20  0) ){.      M = 
1180: 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20  iSrcLine;.      
1190: 2f 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72  /* Assert the tr
11a0: 75 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72  uth of VdbeCover
11b0: 61 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29  ageAlwaysTaken()
11c0: 20 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56   and .      ** V
11d0: 64 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72  dbeCoverageNever
11e0: 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20  Taken() */.     
11f0: 20 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29   assert( (M & I)
1200: 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==I );.    }else
1210: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
1220: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1230: 78 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29  xVdbeBranch==0 )
1240: 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54   return;  /*NO_T
1250: 45 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  EST*/.      sqli
1260: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1270: 78 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69  xVdbeBranch(sqli
1280: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1290: 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a  pVdbeBranchArg,.
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49        iSrcLine,I
12d0: 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ,M);.    }.  }.#
12e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
12f0: 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72  vert the given r
1300: 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73  egister into a s
1310: 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27  tring if it isn'
1320: 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79  t one.** already
1330: 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  . Return non-zer
1340: 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  o if a malloc() 
1350: 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fails..*/.#defin
1360: 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65  e Stringify(P, e
1370: 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29  nc) \.   if(((P)
1380: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72  ->flags&(MEM_Str
1390: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26  |MEM_Blob))==0 &
13a0: 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  & sqlite3VdbeMem
13b0: 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29  Stringify(P,enc)
13c0: 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20  ) \.     { goto 
13d0: 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a  no_mem; }../*.**
13e0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   An ephemeral st
13f0: 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e  ring value (sign
1400: 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d  ified by the MEM
1410: 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e  _Ephem flag) con
1420: 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74  tains.** a point
1430: 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61  er to a dynamica
1440: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74  lly allocated st
1450: 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20  ring where some 
1460: 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20  other entity.** 
1470: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
1480: 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  or deallocating 
1490: 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65  that string.  Be
14a0: 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74  cause the regist
14b0: 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63  er.** does not c
14c0: 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e  ontrol the strin
14d0: 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64  g, it might be d
14e0: 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74  eleted without t
14f0: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b  he register.** k
1500: 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a  nowing it..**.**
1510: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f   This routine co
1520: 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65  nverts an epheme
1530: 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  ral string into 
1540: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1550: 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e  located.** strin
1560: 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73  g that the regis
1570: 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72  ter itself contr
1580: 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ols.  In other w
1590: 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76  ords, it.** conv
15a0: 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65  erts an MEM_Ephe
15b0: 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  m string into a 
15c0: 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d  string with P.z=
15d0: 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23  =P.zMalloc..*/.#
15e0: 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72  define Deephemer
15f0: 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66  alize(P) \.   if
1600: 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45  ( ((P)->flags&ME
1610: 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20  M_Ephem)!=0 \.  
1620: 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56       && sqlite3V
1630: 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
1640: 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e  ble(P) ){ goto n
1650: 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75  o_mem;}../* Retu
1660: 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63  rn true if the c
1670: 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64  ursor was opened
1680: 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70   using the OP_Op
1690: 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e  enSorter opcode.
16a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f   */.#define isSo
16b0: 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53  rter(x) ((x)->pS
16c0: 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  orter!=0)../*.**
16d0: 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75   Allocate VdbeCu
16e0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72  rsor number iCur
16f0: 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e  .  Return a poin
1700: 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75  ter to it.  Retu
1710: 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65  rn NULL.** if we
1720: 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f   run out of memo
1730: 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64  ry..*/.static Vd
1740: 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61  beCursor *alloca
1750: 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65  teCursor(.  Vdbe
1760: 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20   *p,            
1770: 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c    /* The virtual
1780: 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e   machine */.  in
1790: 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20  t iCur,         
17a0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
17b0: 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73  the new VdbeCurs
17c0: 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  or */.  int nFie
17d0: 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ld,           /*
17e0: 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
17f0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  s in the table o
1800: 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  r index */.  int
1810: 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20   iDb,           
1820: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
1830: 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67  he cursor belong
1840: 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20  s to, or -1 */. 
1850: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1860: 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66  or     /* True f
1870: 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73  or B-Tree.  Fals
1880: 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
1890: 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b  le or vtab */.){
18a0: 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d  .  /* Find the m
18b0: 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
18c0: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  will be used to 
18d0: 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f  store the blob o
18e0: 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65  f memory.  ** re
18f0: 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
1900: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1910: 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76  ture. It is conv
1920: 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20  enient to use a 
1930: 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72  .  ** vdbe memor
1940: 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65  y cell to manage
1950: 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   the memory allo
1960: 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20  cation required 
1970: 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43  for a.  ** VdbeC
1980: 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20  ursor structure 
1990: 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  for the followin
19a0: 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a  g reasons:.  **.
19b0: 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d    **   * Sometim
19c0: 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  es cursor number
19d0: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
19e0: 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65   couple of diffe
19f0: 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75  rent.  **     pu
1a00: 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65  rposes in a vdbe
1a10: 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69   program. The di
1a20: 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67  fferent uses mig
1a30: 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20  ht require.  ** 
1a40: 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69      different si
1a50: 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e  zed allocations.
1a60: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72   Memory cells pr
1a70: 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20  ovide growable. 
1a80: 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69   **     allocati
1a90: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ons..  **.  **  
1aa0: 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e   * When using EN
1ab0: 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
1ac0: 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63  GEMENT, memory c
1ad0: 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a  ell buffers can.
1ae0: 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65    **     be free
1af0: 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65  d lazily via the
1b00: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
1b10: 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54  _memory() API. T
1b20: 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e  his.  **     min
1b30: 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65  imizes the numbe
1b40: 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c  r of malloc call
1b50: 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79  s made by the sy
1b60: 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  stem..  **.  ** 
1b70: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72  Memory cells for
1b80: 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c   cursors are all
1b90: 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f  ocated at the to
1ba0: 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73  p of the address
1bb0: 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d  .  ** space. Mem
1bc0: 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65  ory cell (p->nMe
1bd0: 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  m) corresponds t
1be0: 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63  o cursor 0. Spac
1bf0: 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f  e for.  ** curso
1c00: 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62  r 1 is managed b
1c10: 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  y memory cell (p
1c20: 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a  ->nMem-1), etc..
1c30: 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d    */.  Mem *pMem
1c40: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e   = &p->aMem[p->n
1c50: 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e  Mem-iCur];..  in
1c60: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1c70: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1c80: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1c90: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1ca0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1cb0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1cc0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42  ld + .      (isB
1cd0: 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74  treeCursor?sqlit
1ce0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
1cf0: 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72  e():0);..  asser
1d00: 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  t( iCur<p->nCurs
1d10: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
1d20: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20  pCsr[iCur] ){.  
1d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1d40: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1d50: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
1d60: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1d70: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
1d80: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
1d90: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d  VdbeMemGrow(pMem
1da0: 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  , nByte, 0) ){. 
1db0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
1dc0: 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43  ] = pCx = (VdbeC
1dd0: 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  ursor*)pMem->z;.
1de0: 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20      memset(pCx, 
1df0: 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75  0, sizeof(VdbeCu
1e00: 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d  rsor));.    pCx-
1e10: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
1e20: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
1e30: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73  ield;.    if( is
1e40: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1e50: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1e60: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1e70: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
1e80: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
1e90: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
1ea0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1eb0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
1ec0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
1ed0: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
1ee0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
1ef0: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
1f00: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
1f10: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
1f20: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
1f30: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
1f40: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
1f50: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
1f60: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
1f70: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
1f80: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
1f90: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
1fa0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
1fb0: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
1fc0: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
1fd0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
1fe0: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
1ff0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2000: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2010: 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20  ty(Mem *pRec){. 
2020: 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a   double rValue;.
2030: 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20    i64 iValue;.  
2040: 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65  u8 enc = pRec->e
2050: 6e 63 3b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  nc;.  if( (pRec-
2060: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d  >flags&MEM_Str)=
2070: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69  =0 ) return;.  i
2080: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2090: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
20a0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
20b0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
20c0: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
20d0: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
20e0: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
20f0: 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e  c) ){.    pRec->
2100: 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20  u.i = iValue;.  
2110: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2120: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73   MEM_Int;.  }els
2130: 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 72 20 3d  e{.    pRec->r =
2140: 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65   rValue;.    pRe
2150: 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
2160: 52 65 61 6c 3b 0a 20 20 7d 0a 7d 0a 23 64 65 66  Real;.  }.}.#def
2170: 69 6e 65 20 41 70 70 6c 79 4e 75 6d 65 72 69 63  ine ApplyNumeric
2180: 41 66 66 69 6e 69 74 79 28 58 29 20 20 5c 0a 20  Affinity(X)  \. 
2190: 20 20 69 66 28 28 28 58 29 2d 3e 66 6c 61 67 73    if(((X)->flags
21a0: 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  &(MEM_Real|MEM_I
21b0: 6e 74 29 29 3d 3d 30 29 7b 61 70 70 6c 79 4e 75  nt))==0){applyNu
21c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
21d0: 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  ;}../*.** Proces
21e0: 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e  sing is determin
21f0: 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74  e by the affinit
2200: 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a  y parameter:.**.
2210: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ** SQLITE_AFF_IN
2220: 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45  TEGER:.** SQLITE
2230: 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51  _AFF_REAL:.** SQ
2240: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
2250: 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63  :.**    Try to c
2260: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
2270: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2280: 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a  entation or a .*
2290: 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  *    floating-po
22a0: 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  int representati
22b0: 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72  on if an integer
22c0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
22d0: 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73  **    is not pos
22e0: 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61  sible.  Note tha
22f0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65  t the integer re
2300: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a  presentation is.
2310: 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65  **    always pre
2320: 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20  ferred, even if 
2330: 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20  the affinity is 
2340: 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a  REAL, because.**
2350: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72      an integer r
2360: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2370: 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69   more space effi
2380: 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a  cient on disk..*
2390: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
23a0: 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76  TEXT:.**    Conv
23b0: 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65  ert pRec to a te
23c0: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
23d0: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  n..**.** SQLITE_
23e0: 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20  AFF_NONE:.**    
23f0: 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20  No-op.  pRec is 
2400: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74  unchanged..*/.st
2410: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41  atic void applyA
2420: 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a  ffinity(.  Mem *
2430: 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f  pRec,          /
2440: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61  * The value to a
2450: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f  pply affinity to
2460: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
2470: 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65  ity,      /* The
2480: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
2490: 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20  applied */.  u8 
24a0: 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  enc             
24b0: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78   /* Use this tex
24c0: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b  t encoding */.){
24d0: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  .  if( affinity=
24e0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
24f0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
2500: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
2510: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
2520: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2530: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2540: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2550: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2560: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2570: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2580: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2590: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
25a0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
25b0: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
25c0: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
25d0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
25e0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
25f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2600: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2610: 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20   enc);.    }.   
2620: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20   pRec->flags &= 
2630: 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  ~(MEM_Real|MEM_I
2640: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nt);.  }else if(
2650: 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54   affinity!=SQLIT
2660: 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20  E_AFF_NONE ){.  
2670: 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69    assert( affini
2680: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  ty==SQLITE_AFF_I
2690: 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69  NTEGER || affini
26a0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  ty==SQLITE_AFF_R
26b0: 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  EAL.            
26c0: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
26d0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
26e0: 20 29 3b 0a 20 20 20 20 41 70 70 6c 79 4e 75 6d   );.    ApplyNum
26f0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2700: 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  c);.    if( pRec
2710: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
2720: 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  al ){.      sqli
2730: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
2740: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2750: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2760: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2770: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2780: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2790: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
27a0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
27b0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
27c0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
27d0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
27e0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
27f0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2800: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2810: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2820: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2830: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2840: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2850: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2860: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2870: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2880: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2890: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
28a0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
28b0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
28c0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
28d0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
28e0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
28f0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2900: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2910: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2920: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2930: 20 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69      eType = sqli
2940: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
2950: 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Val);.  }.  retu
2960: 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a  rn eType;.}../*.
2970: 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73  ** Exported vers
2980: 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69  ion of applyAffi
2990: 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65  nity(). This one
29a0: 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65   works on sqlite
29b0: 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f  3_value*, .** no
29c0: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d  t the internal M
29d0: 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69  em* type..*/.voi
29e0: 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
29f0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73  plyAffinity(.  s
2a00: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2a10: 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69  al, .  u8 affini
2a20: 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b  ty, .  u8 enc.){
2a30: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
2a40: 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66  ((Mem *)pVal, af
2a50: 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a  finity, enc);.}.
2a60: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
2a70: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
2a80: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
2a90: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
2aa0: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
2ab0: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
2ac0: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
2ad0: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
2ae0: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
2af0: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
2b00: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
2b10: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
2b20: 2d 3e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  ->r and pMem->u.
2b30: 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e  i appropriately.
2b40: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e  .*/.static u16 n
2b50: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
2b60: 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65  pMem){.  if( pMe
2b70: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
2b80: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b  Int|MEM_Real) ){
2b90: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d  .    return pMem
2ba0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2bb0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
2bc0: 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  }.  if( pMem->fl
2bd0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
2be0: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
2bf0: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28  if( sqlite3AtoF(
2c00: 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e  pMem->z, &pMem->
2c10: 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  r, pMem->n, pMem
2c20: 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20  ->enc)==0 ){.   
2c30: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
2c40: 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
2c50: 65 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a  e3Atoi64(pMem->z
2c60: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d  , &pMem->u.i, pM
2c70: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2c80: 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
2c90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d        return MEM
2ca0: 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _Int;.    }.    
2cb0: 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b  return MEM_Real;
2cc0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
2cd0: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
2ce0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
2cf0: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
2d00: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2d10: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
2d20: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
2d30: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
2d40: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
2d50: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2d60: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
2d70: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
2d80: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
2d90: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
2da0: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
2db0: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
2dc0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
2dd0: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
2de0: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
2df0: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
2e00: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
2e10: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
2e20: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
2e30: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2e40: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
2e50: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
2e60: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2e70: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
2e80: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2e90: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
2ea0: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
2eb0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
2ec0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
2ed0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
2ee0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
2ef0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
2f00: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
2f10: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2f20: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
2f30: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
2f40: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f50: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
2f60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2f70: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2f80: 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a   "%c", c);.    z
2f90: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
2fa0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
2fb0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2fc0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
2fd0: 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  d[", pMem->n);. 
2fe0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
2ff0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3000: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
3010: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3020: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
3030: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3040: 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22  00, zCsr, "%02X"
3050: 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b  , ((int)pMem->z[
3060: 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20  i] & 0xFF));.   
3070: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3080: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3090: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
30a0: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
30b0: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
30c0: 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65      char z = pMe
30d0: 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69  m->z[i];.      i
30e0: 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36  f( z<32 || z>126
30f0: 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27   ) *zCsr++ = '.'
3100: 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43  ;.      else *zC
3110: 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a  sr++ = z;.    }.
3120: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3130: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3140: 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73   "]%s", encnames
3150: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3160: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3170: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3180: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3190: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73  _Zero ){.      s
31a0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
31b0: 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22  100, zCsr,"+%dz"
31c0: 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b  ,pMem->u.nZero);
31d0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
31e0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
31f0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3200: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
3210: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3220: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74  M_Str ){.    int
3230: 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b   j, k;.    zBuf[
3240: 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66  0] = ' ';.    if
3250: 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b  ( f & MEM_Dyn ){
3260: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3270: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
3280: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3290: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
32a0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
32b0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
32c0: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  tic ){.      zBu
32d0: 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20  f[1] = 't';.    
32e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
32f0: 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65  MEM_Dyn|MEM_Ephe
3300: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3310: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3320: 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a  Ephem ){.      z
3330: 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20  Buf[1] = 'e';.  
3340: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3350: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3360: 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20  _Dyn))==0 );.   
3370: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42   }else{.      zB
3380: 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20  uf[1] = 's';.   
3390: 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20   }.    k = 2;.  
33a0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
33b0: 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d  tf(100, &zBuf[k]
33c0: 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29  , "%d", pMem->n)
33d0: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
33e0: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
33f0: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3400: 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66  ++] = '[';.    f
3410: 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20  or(j=0; j<15 && 
3420: 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b  j<pMem->n; j++){
3430: 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d  .      u8 c = pM
3440: 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20  em->z[j];.      
3450: 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63  if( c>=0x20 && c
3460: 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20  <0x7f ){.       
3470: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a   zBuf[k++] = c;.
3480: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3490: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
34a0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20   '.';.      }.  
34b0: 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b    }.    zBuf[k++
34c0: 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c  ] = ']';.    sql
34d0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
34e0: 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e  0,&zBuf[k], encn
34f0: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3500: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
3510: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
3520: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3530: 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23  ++] = 0;.  }.}.#
3540: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
3550: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
3560: 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65   Print the value
3570: 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66   of a register f
3580: 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f  or tracing purpo
3590: 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ses:.*/.static v
35a0: 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  oid memTracePrin
35b0: 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  t(Mem *p){.  if(
35c0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
35d0: 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20 20  Undefined ){.   
35e0: 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66 69   printf(" undefi
35f0: 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ned");.  }else i
3600: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3610: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72  M_Null ){.    pr
3620: 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a 20  intf(" NULL");. 
3630: 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66   }else if( (p->f
3640: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
3650: 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f  MEM_Str))==(MEM_
3660: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a  Int|MEM_Str) ){.
3670: 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a      printf(" si:
3680: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3690: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
36a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
36b0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69  {.    printf(" i
36c0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
36d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36e0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
36f0: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
3700: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3710: 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  eal ){.    print
3720: 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  f(" r:%g", p->r)
3730: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3740: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3750: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3760: 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73    printf(" (rows
3770: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
3780: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
3790: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
37a0: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
37b0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
37c0: 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42  printf(" %s", zB
37d0: 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69  uf);.  }.}.stati
37e0: 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72 54  c void registerT
37f0: 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d  race(int iReg, M
3800: 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66  em *p){.  printf
3810: 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69  ("REG[%d] = ", i
3820: 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65  Reg);.  memTrace
3830: 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e  Print(p);.  prin
3840: 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64  tf("\n");.}.#end
3850: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3860: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
3870: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
3880: 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61  (R,M) if(db->fla
3890: 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72  gs&SQLITE_VdbeTr
38a0: 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61 63  ace)registerTrac
38b0: 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20  e(R,M).#else.#  
38c0: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
38d0: 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69  TRACE(R,M).#endi
38e0: 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f  f...#ifdef VDBE_
38f0: 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20  PROFILE../* .** 
3900: 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e  hwtime.h contain
3910: 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c  s inline assembl
3920: 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c  er code for impl
3930: 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67  ementing .** hig
3940: 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69  h-performance ti
3950: 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a  ming routines..*
3960: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69  /.#include "hwti
3970: 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23  me.h"..#endif..#
3980: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
3990: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
39a0: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
39b0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
39c0: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
39d0: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
39e0: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
39f0: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
3a00: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
3a10: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
3a20: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
3a30: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
3a40: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
3a50: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
3a60: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
3a70: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
3a80: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
3a90: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
3aa0: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
3ab0: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
3ac0: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
3ad0: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
3ae0: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
3af0: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
3b00: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
3b10: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
3b20: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
3b30: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
3b40: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
3b50: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
3b60: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
3b70: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
3b80: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
3b90: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  .../*.** Execute
3ba0: 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44   as much of a VD
3bb0: 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65  BE program as we
3bc0: 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73   can..** This is
3bd0: 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c   the core of sql
3be0: 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a  ite3_step().  .*
3bf0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
3c00: 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70  eExec(.  Vdbe *p
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
3c30: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30  */.){.  int pc=0
3c40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3c50: 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61     /* The progra
3c60: 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f  m counter */.  O
3c70: 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  p *aOp = p->aOp;
3c80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70            /* Cop
3c90: 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20  y of p->aOp */. 
3ca0: 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20   Op *pOp;       
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
3cc0: 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e  urrent operation
3cd0: 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   */.  int rc = S
3ce0: 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20  QLITE_OK;       
3cf0: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
3d00: 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  urn */.  sqlite3
3d10: 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20   *db = p->db;   
3d20: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
3d30: 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65  ase */.  u8 rese
3d40: 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d  tSchemaOnFault =
3d50: 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68   0; /* Reset sch
3d60: 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72  ema after an err
3d70: 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a  or if positive *
3d80: 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20  /.  u8 encoding 
3d90: 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f  = ENC(db);     /
3da0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65  * The database e
3db0: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
3dc0: 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20   iCompare = 0;  
3dd0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
3de0: 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d  t of last OP_Com
3df0: 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a  pare operation *
3e00: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d  /.  unsigned nVm
3e10: 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20 2f  Step = 0;      /
3e20: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
3e30: 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65 70  ual machine step
3e40: 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
3e50: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
3e60: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73  S_CALLBACK.  uns
3e70: 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4c  igned nProgressL
3e80: 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f  imit = 0;/* Invo
3e90: 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29 20 77  ke xProgress() w
3ea0: 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61 63  hen nVmStep reac
3eb0: 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64  hes this */.#end
3ec0: 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d  if.  Mem *aMem =
3ed0: 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20   p->aMem;       
3ee0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d  /* Copy of p->aM
3ef0: 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  em */.  Mem *pIn
3f00: 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  1 = 0;          
3f10: 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20     /* 1st input 
3f20: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
3f30: 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20   *pIn2 = 0;     
3f40: 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69          /* 2nd i
3f50: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
3f60: 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b    Mem *pIn3 = 0;
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3f80: 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  3rd input operan
3f90: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  d */.  Mem *pOut
3fa0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
3fb0: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72    /* Output oper
3fc0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50  and */.  int *aP
3fd0: 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20  ermute = 0;     
3fe0: 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69      /* Permutati
3ff0: 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  on of columns fo
4000: 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a  r OP_Compare */.
4010: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20    i64 lastRowid 
4020: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
4030: 20 20 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65    /* Saved value
4040: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73   of the last ins
4050: 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66  ert ROWID */.#if
4060: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
4070: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4090: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
40a0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
40b0: 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
40c0: 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43  /*** INSERT STAC
40d0: 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a  K UNION HERE ***
40e0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
40f0: 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
4100: 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c  C_RUN );  /* sql
4110: 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69  ite3_step() veri
4120: 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73  fies this */.  s
4130: 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72 28  qlite3VdbeEnter(
4140: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
4150: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
4160: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
4170: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
4180: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
4190: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
41a0: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
41b0: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
41c0: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
41d0: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
41e0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
41f0: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
4200: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63  LITE_OK || p->rc
4210: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
4220: 20 28 28 70 2d 3e 72 63 26 30 78 46 46 29 20 3d   ((p->rc&0xFF) =
4230: 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29  = SQLITE_LOCKED)
4240: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
4250: 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e  bIsReader || p->
4260: 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20  readOnly!=0 );. 
4270: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
4280: 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e  OK;.  p->iCurren
4290: 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73  tTime = 0;.  ass
42a0: 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d  ert( p->explain=
42b0: 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75  =0 );.  p->pResu
42c0: 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d  ltSet = 0;.  db-
42d0: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75  >busyHandler.nBu
42e0: 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62  sy = 0;.  if( db
42f0: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
4300: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
4310: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
4320: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
4330: 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69  OTraceSql(p);.#i
4340: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4350: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4360: 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50  ACK.  if( db->xP
4370: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 61  rogress ){.    a
4380: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
4390: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
43a0: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
43b0: 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 2d  t = (unsigned)p-
43c0: 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
43d0: 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53  _STMTSTATUS_VM_S
43e0: 54 45 50 5d 3b 0a 20 20 20 20 69 66 28 20 6e 50  TEP];.    if( nP
43f0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d 3d 30 20  rogressLimit==0 
4400: 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65  ){.      nProgre
4410: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4420: 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20  rogressOps;.    
4430: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 50 72  }else{.      nPr
4440: 6f 67 72 65 73 73 4c 69 6d 69 74 20 25 3d 20 28  ogressLimit %= (
4450: 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e 6e 50 72  unsigned)db->nPr
4460: 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d  ogressOps;.    }
4470: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64  .  }.#endif.#ifd
4480: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4490: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65    sqlite3BeginBe
44a0: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
44b0: 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20  if( p->pc==0.   
44c0: 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  && (p->db->flags
44d0: 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c   & (SQLITE_VdbeL
44e0: 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64  isting|SQLITE_Vd
44f0: 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62  beEQP|SQLITE_Vdb
4500: 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b  eTrace))!=0.  ){
4510: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
4520: 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20  int once = 1;.  
4530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4540: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66  ntSql(p);.    if
4550: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4560: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
4570: 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69  ing ){.      pri
4580: 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61  ntf("VDBE Progra
4590: 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a  m Listing:\n");.
45a0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
45b0: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
45c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
45d0: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
45e0: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
45f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4600: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4610: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45  s & SQLITE_VdbeE
4620: 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  QP ){.      for(
4630: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4640: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
4650: 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d   aOp[i].opcode==
4660: 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20  OP_Explain ){.  
4670: 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65          if( once
4680: 20 29 20 70 72 69 6e 74 66 28 22 56 44 42 45 20   ) printf("VDBE 
4690: 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b  Query Plan:\n");
46a0: 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74  .          print
46b0: 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d  f("%s\n", aOp[i]
46c0: 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20  .p4.z);.        
46d0: 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20    once = 0;.    
46e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
46f0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
4700: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4710: 45 5f 56 64 62 65 54 72 61 63 65 20 29 20 20 70  E_VdbeTrace )  p
4720: 72 69 6e 74 66 28 22 56 44 42 45 20 54 72 61 63  rintf("VDBE Trac
4730: 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71  e:\n");.  }.  sq
4740: 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
4750: 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20  lloc();.#endif. 
4760: 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72   for(pc=p->pc; r
4770: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63  c==SQLITE_OK; pc
4780: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
4790: 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e   pc>=0 && pc<p->
47a0: 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64  nOp );.    if( d
47b0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
47c0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23  ) goto no_mem;.#
47d0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
47e0: 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73  LE.    start = s
47f0: 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
4800: 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74  #endif.    nVmSt
4810: 65 70 2b 2b 3b 0a 20 20 20 20 70 4f 70 20 3d 20  ep++;.    pOp = 
4820: 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f  &aOp[pc];..    /
4830: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
4840: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
4850: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
4860: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
4870: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
4880: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
4890: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
48a0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
48b0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
48c0: 6f 75 74 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20  out, pc, pOp);. 
48d0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
48e0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
48f0: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4900: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4910: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4920: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4930: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4940: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
4950: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
4960: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
4970: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
4980: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4990: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
49a0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
49b0: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
49c0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
49d0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
49e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
49f0: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
4a00: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
4a10: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61  dif..    /* On a
4a20: 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  ny opcode with t
4a30: 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65  he "out2-prerele
4a40: 61 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61  ase" tag, free a
4a50: 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e  ny.    ** extern
4a60: 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f  al allocations o
4a70: 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e  ut of mem[p2] an
4a80: 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  d set mem[p2] to
4a90: 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e   be.    ** an un
4aa0: 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e  defined integer.
4ab0: 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65    Opcodes will e
4ac0: 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68  ither fill in th
4ad0: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a  e integer.    **
4ae0: 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72   value or conver
4af0: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64  t mem[p2] to a d
4b00: 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20  ifferent type.. 
4b10: 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
4b20: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
4b30: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
4b40: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
4b50: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  e] );.    if( pO
4b60: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
4b70: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
4b80: 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  SE ){.      asse
4b90: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
4ba0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
4bb0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
4bc0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
4bd0: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
4be0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
4bf0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
4c00: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
4c10: 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61      VdbeMemRelea
4c20: 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  se(pOut);.      
4c30: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
4c40: 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  M_Int;.    }..  
4c50: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
4c60: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
4c70: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
4c80: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4c90: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
4ca0: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  ags & OPFLG_IN1)
4cb0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
4cc0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
4cd0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4ce0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
4cf0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
4d00: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
4d10: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
4d20: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
4d30: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
4d40: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
4d50: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
4d60: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
4d70: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
4d80: 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b  (pOp->p1, &aMem[
4d90: 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d  pOp->p1]);.    }
4da0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
4db0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
4dc0: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
4dd0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
4de0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
4df0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4e00: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
4e10: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
4e20: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
4e30: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
4e40: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
4e50: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
4e60: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
4e70: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
4e80: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
4e90: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ACE(pOp->p2, &aM
4ea0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
4eb0: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
4ec0: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
4ed0: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
4ee0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
4ef0: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
4f00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
4f10: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
4f20: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  or) );.      ass
4f30: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
4f40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
4f50: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4f60: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
4f70: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
4f80: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
4f90: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
4fa0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
4fb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
4fc0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
4fd0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
4fe0: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
4ff0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5000: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5010: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5020: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
5030: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5040: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
5050: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
5060: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
5070: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5080: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21  s & OPFLG_OUT3)!
5090: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
50a0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
50b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
50c0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
50d0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
50e0: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
50f0: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
5100: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
5110: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
5120: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
5130: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
5140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5180: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
5190: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
51a0: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
51b0: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
51c0: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
51d0: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
51e0: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
51f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
5200: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
5210: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
5220: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
5230: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
5240: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
5250: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
5260: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
5270: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
5280: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
5290: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
52a0: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
52b0: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
52c0: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
52d0: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
52e0: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
52f0: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
5300: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
5310: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
5320: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
5330: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
5340: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
5350: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
5360: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
5370: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
5380: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
5390: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
53a0: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
53b0: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
53c0: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
53d0: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
53e0: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
53f0: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5400: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
5410: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
5420: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
5430: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
5440: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
5450: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
5460: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
5470: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
5480: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
5490: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
54a0: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
54b0: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
54c0: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
54d0: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
54e0: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
54f0: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
5500: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
5510: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
5520: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
5530: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
5540: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
5550: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
5560: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
5570: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
5580: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
5590: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
55a0: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
55b0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
55c0: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
55d0: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
55e0: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
55f0: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
5600: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
5610: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
5620: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
5630: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
5640: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
5650: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
5660: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
5670: 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65  n3, out2_prerele
5680: 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  ase, out2, out3.
5690: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
56a0: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
56b0: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
56c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
56d0: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
56e0: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
56f0: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
5700: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
5710: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
5720: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
5730: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
5740: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
5750: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
5760: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
5770: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
5780: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
5790: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
57a0: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
57b0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
57c0: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
57d0: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
57e0: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
57f0: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
5800: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
5810: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
5820: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
5830: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
5840: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5860: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5870: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5880: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5890: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
58a0: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
58b0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
58c0: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
58d0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
58e0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
58f0: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
5900: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
5910: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
5920: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
5930: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
5940: 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68  rogram..**.** Th
5950: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69  e P1 parameter i
5960: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75  s not actually u
5970: 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
5980: 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74  de.  However, it
5990: 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  .** is sometimes
59a0: 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61   set to 1 instea
59b0: 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74  d of 0 as a hint
59c0: 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   to the command-
59d0: 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68  line shell.** th
59e0: 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20  at this Goto is 
59f0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
5a00: 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68  loop and that th
5a10: 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20  e lines from P2 
5a20: 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63  down.** to the c
5a30: 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75  urrent line shou
5a40: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66  ld be indented f
5a50: 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
5a60: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  t..*/.case OP_Go
5a70: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
5a80: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70    /* jump */.  p
5a90: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
5aa0: 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74  ..  /* Opcodes t
5ab0: 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
5ac0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
5ad0: 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f  loop (OP_Next, O
5ae0: 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f  P_Prev,.  ** OP_
5af0: 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74  VNext, OP_RowSet
5b00: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
5b10: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
5b20: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
5b30: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
5b40: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
5b50: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
5b60: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
5b70: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
5b80: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5b90: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
5ba0: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
5bb0: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
5bc0: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
5bd0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
5be0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
5bf0: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
5c00: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
5c10: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
5c20: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
5c30: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
5c40: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
5c50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
5c60: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
5c70: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
5c80: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
5c90: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
5ca0: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
5cb0: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
5cc0: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
5cd0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
5ce0: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
5cf0: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
5d00: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
5d10: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
5d20: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
5d30: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
5d40: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
5d50: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
5d60: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
5d70: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
5d80: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
5d90: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
5da0: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
5db0: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
5dc0: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
5dd0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
5de0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
5df0: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
5e00: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
5e10: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
5e20: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
5e30: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
5e40: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
5e50: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
5e60: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
5e70: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5e80: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
5e90: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
5ea0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
5eb0: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
5ec0: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
5ed0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
5ee0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
5ef0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
5f00: 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20  ogressLimit ){. 
5f10: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
5f20: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
5f30: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
5f40: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
5f50: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5f60: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
5f70: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
5f80: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
5f90: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
5fa0: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
5fb0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
5fc0: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
5fd0: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
5fe0: 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  lt;.    }.  }.#e
5ff0: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
6000: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6010: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6020: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6030: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6040: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
6050: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
6060: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6070: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
6080: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
6090: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
60a0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
60b0: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
60c0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
60d0: 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ) );.  pIn1 = &a
60e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
60f0: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
6100: 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20  ynamic(pIn1)==0 
6110: 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  );.  memAboutToC
6120: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
6130: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6140: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
6150: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6160: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6170: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
6180: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
6190: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
61a0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
61b0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
61c0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
61d0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
61e0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
61f0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
6200: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
6210: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
6220: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
6230: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
6240: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
6250: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
6260: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6270: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6280: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6290: 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e  nt );.  pc = (in
62a0: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
62b0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
62c0: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
62d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
62e0: 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  e: InitCoroutine
62f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
6300: 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69 73  .** Set up regis
6310: 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  ter P1 so that i
6320: 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20  t will Yield to 
6330: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a  the coroutine.**
6340: 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64 72   located at addr
6350: 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ess P3..**.** If
6360: 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20   P2!=0 then the 
6370: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
6380: 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61  entation immedia
6390: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20  tely follows.** 
63a0: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f  this opcode.  So
63b0: 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63   jump over the c
63c0: 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65  oroutine impleme
63d0: 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64  ntation to.** ad
63e0: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  dress P2..**.** 
63f0: 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72  See also: EndCor
6400: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
6410: 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a  P_InitCoroutine:
6420: 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a   {     /* jump *
6430: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6440: 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70  >p1>0 &&  pOp->p
6450: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
6460: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6470: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6480: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6490: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
64a0: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
64b0: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
64c0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
64d0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
64e0: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
64f0: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6500: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6510: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6520: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6530: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 70   if( pOp->p2 ) p
6540: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6550: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6560: 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f  Opcode:  EndCoro
6570: 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a  utine P1 * * * *
6580: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72  .**.** The instr
6590: 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64  uction at the ad
65a0: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
65b0: 72 20 50 31 20 69 73 20 61 6e 20 59 69 65 6c 64  r P1 is an Yield
65c0: 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  ..** Jump to the
65d0: 20 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66   P2 parameter of
65e0: 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20   that Yield..** 
65f0: 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20  After the jump, 
6600: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f  register P1 beco
6610: 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a  mes undefined..*
6620: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
6630: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
6640: 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75  case OP_EndCorou
6650: 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20  tine: {         
6660: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64    /* in1 */.  Vd
6670: 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20  beOp *pCaller;. 
6680: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6690: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
66a0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
66b0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
66c0: 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30  rt( pIn1->u.i>=0
66d0: 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d   && pIn1->u.i<p-
66e0: 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65  >nOp );.  pCalle
66f0: 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  r = &aOp[pIn1->u
6700: 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  .i];.  assert( p
6710: 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d  Caller->opcode==
6720: 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73  OP_Yield );.  as
6730: 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70  sert( pCaller->p
6740: 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d  2>=0 && pCaller-
6750: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
6760: 70 63 20 3d 20 70 43 61 6c 6c 65 72 2d 3e 70 32  pc = pCaller->p2
6770: 20 2d 20 31 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c   - 1;.  pIn1->fl
6780: 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
6790: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
67a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65  ./* Opcode:  Yie
67b0: 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ld P1 P2 * * *.*
67c0: 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72  *.** Swap the pr
67d0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69  ogram counter wi
67e0: 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  th the value in 
67f0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68  register P1.  Th
6800: 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66  is.** has the ef
6810: 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67  fect of yielding
6820: 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e   to a coroutine.
6830: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
6840: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20  routine that is 
6850: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
6860: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
6870: 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20  s with.** Yield 
6880: 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63  or Return then c
6890: 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e  ontinue to the n
68a0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
68b0: 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20    But if.** the 
68c0: 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68  coroutine launch
68d0: 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
68e0: 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68  uction ends with
68f0: 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  .** EndCoroutine
6900: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
6910: 32 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f  2 rather than co
6920: 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68  ntinuing with th
6930: 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75  e.** next instru
6940: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
6950: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
6960: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6970: 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20  Yield: {        
6980: 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70      /* in1, jump
6990: 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74   */.  int pcDest
69a0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
69b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
69c0: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
69d0: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
69e0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
69f0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73  MEM_Int;.  pcDes
6a00: 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  t = (int)pIn1->u
6a10: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
6a20: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
6a30: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6a40: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63  pIn1);.  pc = pc
6a50: 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Dest;.  break;.}
6a60: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
6a70: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
6a80: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
6a90: 70 73 69 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d  psis:  if r[P3]=
6aa0: 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20  null halt.**.** 
6ab0: 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
6ac0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
6ad0: 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74   If it is NULL t
6ae0: 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a  hen Halt using.*
6af0: 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20  * parameter P1, 
6b00: 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66  P2, and P4 as if
6b10: 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c   this were a Hal
6b20: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
6b30: 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  If the.** value 
6b40: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
6b50: 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
6b60: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
6b70: 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65   a no-op..** The
6b80: 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68   P5 parameter sh
6b90: 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61  ould be 1..*/.ca
6ba0: 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c  se OP_HaltIfNull
6bb0: 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20  : {      /* in3 
6bc0: 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
6bd0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
6be0: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
6bf0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
6c00: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
6c10: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
6c20: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
6c30: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
6c40: 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
6c50: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
6c60: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
6c70: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
6c80: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
6c90: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
6ca0: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
6cb0: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
6cc0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
6cd0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
6ce0: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
6cf0: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
6d00: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
6d10: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
6d20: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
6d30: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
6d40: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
6d50: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
6d60: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
6d70: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
6d80: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
6d90: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
6da0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
6db0: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
6dc0: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
6dd0: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
6de0: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
6df0: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
6e00: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
6e10: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
6e20: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
6e30: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
6e40: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
6e50: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
6e60: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
6e70: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
6e80: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
6e90: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
6ea0: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
6eb0: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
6ec0: 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76  .**.** P5 is a v
6ed0: 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61  alue between 0 a
6ee0: 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c  nd 4, inclusive,
6ef0: 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74   that modifies t
6f00: 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a  he P4 string..**
6f10: 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63  .**    0:  (no c
6f20: 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20  hange).**    1: 
6f30: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61   NOT NULL contra
6f40: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
6f50: 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20  *    2:  UNIQUE 
6f60: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6f70: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20  d: P4.**    3:  
6f80: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
6f90: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
6fa0: 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45    4:  FOREIGN KE
6fb0: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
6fc0: 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66  led: P4.**.** If
6fd0: 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20   P5 is not zero 
6fe0: 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20  and P4 is NULL, 
6ff0: 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20  then everything 
7000: 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73  after the ":" is
7010: 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a  .** omitted..**.
7020: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
7030: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
7040: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
7050: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
7060: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
7070: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
7080: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
7090: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
70a0: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
70b0: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
70c0: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
70d0: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
70e0: 61 6c 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  alt: {.  const c
70f0: 68 61 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f  har *zType;.  co
7100: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d  nst char *zLogFm
7110: 74 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  t;..  if( pOp->p
7120: 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  1==SQLITE_OK && 
7130: 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
7140: 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62   /* Halt the sub
7150: 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e  -program. Return
7160: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
7170: 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f  parent frame. */
7180: 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a  .    VdbeFrame *
7190: 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
71a0: 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d  me;.    p->pFram
71b0: 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  e = pFrame->pPar
71c0: 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61  ent;.    p->nFra
71d0: 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65  me--;.    sqlite
71e0: 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
71f0: 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
7200: 0a 20 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65  .    pc = sqlite
7210: 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72  3VdbeFrameRestor
7220: 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c  e(pFrame);.    l
7230: 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
7240: 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66  astRowid;.    if
7250: 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67  ( pOp->p2==OE_Ig
7260: 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a  nore ){.      /*
7270: 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20   Instruction pc 
7280: 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61  is the OP_Progra
7290: 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  m that invoked t
72a0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a  he sub-program .
72b0: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
72c0: 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e  ly being halted.
72d0: 20 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72   If the p2 instr
72e0: 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f  uction of this O
72f0: 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20  P_Halt.      ** 
7300: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73  instruction is s
7310: 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c  et to OE_Ignore,
7320: 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72   then the sub-pr
7330: 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e  ogram is throwin
7340: 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47  g.      ** an IG
7350: 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20  NORE exception. 
7360: 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d  In this case jum
7370: 70 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73  p to the address
7380: 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20   specified.     
7390: 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66   ** as the p2 of
73a0: 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f   the calling OP_
73b0: 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20  Program.  */.   
73c0: 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70     pc = p->aOp[p
73d0: 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  c].p2-1;.    }. 
73e0: 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b     aOp = p->aOp;
73f0: 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61  .    aMem = p->a
7400: 4d 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  Mem;.    break;.
7410: 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f    }.  p->rc = pO
7420: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
7430: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
7440: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
7450: 20 70 63 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63   pc;.  if( p->rc
7460: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   ){.    if( pOp-
7470: 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61  >p5 ){.      sta
7480: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
7490: 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20   const azType[] 
74a0: 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20  = { "NOT NULL", 
74b0: 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b  "UNIQUE", "CHECK
74c0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74f0: 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b  "FOREIGN KEY" };
7500: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
7510: 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70  Op->p5>=1 && pOp
7520: 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5<=4 );.     
7530: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7540: 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  p5==1 );.      t
7550: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7560: 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==2 );.      tes
7570: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7580: 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  3 );.      testc
7590: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20  ase( pOp->p5==4 
75a0: 29 3b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d  );.      zType =
75b0: 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d   azType[pOp->p5-
75c0: 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  1];.    }else{. 
75d0: 20 20 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a       zType = 0;.
75e0: 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
75f0: 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f  ( zType!=0 || pO
7600: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
7610: 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f    zLogFmt = "abo
7620: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
7630: 3a 20 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a  : %s";.    if( z
7640: 54 79 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e  Type && pOp->p4.
7650: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
7660: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
7670: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
7680: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7690: 65 64 3a 20 25 73 22 2c 20 0a 20 20 20 20 20 20  ed: %s", .      
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76b0: 20 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e   zType, pOp->p4.
76c0: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  z);.    }else if
76d0: 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  ( pOp->p4.z ){. 
76e0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
76f0: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
7700: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70  g, db, "%s", pOp
7710: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c  ->p4.z);.    }el
7720: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
7730: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
7740: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20  ErrMsg, db, "%s 
7750: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7760: 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20  d", zType);.    
7770: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
7780: 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46  g(pOp->p1, zLogF
7790: 6d 74 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c  mt, pc, p->zSql,
77a0: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
77b0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
77c0: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
77d0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
77e0: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
77f0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
7800: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
7810: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7820: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
7830: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
7840: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
7850: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
7860: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
7870: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
7880: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
7890: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
78a0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
78b0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
78c0: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
78d0: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
78e0: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
78f0: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
7900: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
7910: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
7920: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7930: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
7940: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
7950: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
7960: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
7970: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
7980: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
7990: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
79a0: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
79b0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
79c0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
79d0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
79e0: 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
79f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34  /* Opcode: Int64
7a00: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
7a10: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
7a20: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
7a30: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
7a40: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
7a50: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
7a60: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
7a70: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7a80: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
7a90: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7aa0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7ab0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7ac0: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
7ad0: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
7ae0: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
7af0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
7b00: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
7b10: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
7b20: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
7b30: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7b40: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
7b50: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7b60: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
7b70: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
7b80: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
7b90: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
7ba0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7bb0: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
7bc0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7bd0: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70  TK_FLOAT, out2-p
7be0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
7bf0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7c00: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
7c10: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
7c20: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
7c30: 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70  ;.  pOut->r = *p
7c40: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
7c50: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
7c60: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
7c70: 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  ng8 * P2 * P4 *.
7c80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
7c90: 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34  2]='P4'.**.** P4
7ca0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c   points to a nul
7cb0: 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d   terminated UTF-
7cc0: 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f  8 string. This o
7cd0: 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f  pcode is transfo
7ce0: 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e  rmed .** into an
7cf0: 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72   OP_String befor
7d00: 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64  e it is executed
7d10: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74   for the first t
7d20: 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20  ime.  During.** 
7d30: 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74  this transformat
7d40: 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20  ion, the length 
7d50: 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20  of string P4 is 
7d60: 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f  computed and sto
7d70: 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31  red.** as the P1
7d80: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63   parameter..*/.c
7d90: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
7da0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
7db0: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
7dc0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7dd0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7de0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
7df0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
7e00: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
7e10: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
7e20: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
7e30: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7e40: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
7e50: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
7e60: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
7e70: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
7e80: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
7e90: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
7ea0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
7eb0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66  _STATIC);.    if
7ec0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  ( rc==SQLITE_TOO
7ed0: 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62  BIG ) goto too_b
7ee0: 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  ig;.    if( SQLI
7ef0: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
7f00: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
7f10: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
7f20: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
7f30: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
7f40: 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d  ->zMalloc==pOut-
7f50: 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >z );.    assert
7f60: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
7f70: 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20  (pOut)==0 );.   
7f80: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pOut->zMalloc =
7f90: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
7fa0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
7fb0: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
7fc0: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
7fd0: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
7fe0: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
7ff0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
8000: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
8010: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
8020: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
8030: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
8040: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8050: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8060: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8070: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8080: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8090: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
80a0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
80b0: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
80c0: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
80d0: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
80e0: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20   String P1 P2 * 
80f0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8100: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65  : r[P2]='P4' (le
8110: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n=P1).**.** The 
8120: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
8130: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
8140: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
8150: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
8160: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
8170: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
8180: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8190: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
81a0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
81b0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
81c0: 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
81d0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
81e0: 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ->z = pOp->p4.z;
81f0: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70  .  pOut->n = pOp
8200: 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->p1;.  pOut->en
8210: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
8220: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
8230: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
8240: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8250: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
8260: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8270: 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c    r[P2..P3]=NULL
8280: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
8290: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
82a0: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
82b0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
82c0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
82d0: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
82e0: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
82f0: 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65  y register in be
8300: 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e  tween P2 and P3.
8310: 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65    If P3.** is le
8320: 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69  ss than P2 (typi
8330: 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f  cally P3 is zero
8340: 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69  ) then only regi
8350: 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65  ster P2 is.** se
8360: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t to NULL..**.**
8370: 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
8380: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
8390: 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  en also set the 
83a0: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67  MEM_Cleared flag
83b0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c   so that.** NULL
83c0: 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74   values will not
83d0: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65   compare equal e
83e0: 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55  ven if SQLITE_NU
83f0: 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a  LLEQ is set on.*
8400: 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71  * OP_Ne or OP_Eq
8410: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
8420: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
8430: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
8440: 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a  e */.  int cnt;.
8450: 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a    u16 nullFlag;.
8460: 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d    cnt = pOp->p3-
8470: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
8480: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
8490: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
84a0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
84b0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70  s = nullFlag = p
84c0: 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75  Op->p1 ? (MEM_Nu
84d0: 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20  ll|MEM_Cleared) 
84e0: 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68  : MEM_Null;.  wh
84f0: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
8500: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
8510: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
8520: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62  , pOut);.    Vdb
8530: 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74  eMemRelease(pOut
8540: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
8550: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20  gs = nullFlag;. 
8560: 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20     cnt--;.  }.  
8570: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8580: 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31  ode: SoftNull P1
8590: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f   * * * *.** Syno
85a0: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c  psis:  r[P1]=NUL
85b0: 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69  L.**.** Set regi
85c0: 73 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20  ster P1 to have 
85d0: 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61  the value NULL a
85e0: 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50  s seen by the OP
85f0: 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69  _MakeRecord.** i
8600: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20  nstruction, but 
8610: 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20  do not free any 
8620: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
8630: 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64  emory associated
8640: 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67   with.** the reg
8650: 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69  ister, so that i
8660: 66 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20  f the value was 
8670: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
8680: 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65   that was.** pre
8690: 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75  viously copied u
86a0: 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74  sing OP_SCopy, t
86b0: 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63  he copies will c
86c0: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61  ontinue to be va
86d0: 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lid..*/.case OP_
86e0: 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73  SoftNull: {.  as
86f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
8700: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
8710: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
8720: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
8730: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
8740: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f  Out->flags = (pO
8750: 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75  ut->flags|MEM_Nu
8760: 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e  ll)&~MEM_Undefin
8770: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
8780: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
8790: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
87a0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
87b0: 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  P4 (len=P1).**.*
87c0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
87d0: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
87e0: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
87f0: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
8800: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8810: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
8820: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
8830: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8840: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
8850: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
8860: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
8870: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
8880: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8890: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e  pOp->p4.z, pOp->
88a0: 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75  p1, 0, 0);.  pOu
88b0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
88c0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
88d0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
88e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
88f0: 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20  pcode: Variable 
8900: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
8910: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8920: 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29  parameter(P1,P4)
8930: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
8940: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
8950: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31  und parameter P1
8960: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8970: 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70  2.**.** If the p
8980: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65  arameter is name
8990: 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65  d, then its name
89a0: 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a   appears in P4..
89b0: 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
89c0: 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  is used by sqlit
89d0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
89e0: 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73  r_name()..*/.cas
89f0: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
8a10: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
8a20: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
8a30: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
8a40: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
8a50: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
8a60: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
8a70: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
8a80: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8a90: 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .z==0 || pOp->p4
8aa0: 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70  .z==p->azVar[pOp
8ab0: 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61  ->p1-1] );.  pVa
8ac0: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70  r = &p->aVar[pOp
8ad0: 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28  ->p1 - 1];.  if(
8ae0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
8af0: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
8b00: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
8b10: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
8b20: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
8b30: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
8b40: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
8b50: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
8b60: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8b70: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
8b80: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
8b90: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
8ba0: 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a  P2@P3]=r[P1@P3].
8bb0: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50  **.** Move the P
8bc0: 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  3 values in regi
8bd0: 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ster P1..P1+P3-1
8be0: 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65   over into.** re
8bf0: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
8c00: 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20  3-1.  Registers 
8c10: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a  P1..P1+P3-1 are.
8c20: 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20  ** left holding 
8c30: 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  a NULL.  It is a
8c40: 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69  n error for regi
8c50: 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50  ster ranges.** P
8c60: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50  1..P1+P3-1 and P
8c70: 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76  2..P2+P3-1 to ov
8c80: 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e  erlap.  It is an
8c90: 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33   error.** for P3
8ca0: 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
8cb0: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d   1..*/.case OP_M
8cc0: 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ove: {.  char *z
8cd0: 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c  Malloc;   /* Hol
8ce0: 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f  ding variable fo
8cf0: 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  r allocated memo
8d00: 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ry */.  int n;  
8d10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8d20: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
8d30: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
8d40: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
8d50: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
8d60: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
8d70: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
8d80: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
8d90: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
8da0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
8db0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
8dc0: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
8dd0: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
8de0: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
8df0: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
8e00: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
8e10: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
8e20: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
8e30: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
8e40: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
8e50: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
8e60: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
8e70: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c     assert( pIn1<
8e80: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  =&aMem[(p->nMem-
8e90: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
8ea0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
8eb0: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
8ec0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
8ed0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
8ee0: 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73     VdbeMemReleas
8ef0: 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61  e(pOut);.    zMa
8f00: 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61  lloc = pOut->zMa
8f10: 6c 6c 6f 63 3b 0a 20 20 20 20 6d 65 6d 63 70 79  lloc;.    memcpy
8f20: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 73 69 7a  (pOut, pIn1, siz
8f30: 65 6f 66 28 4d 65 6d 29 29 3b 0a 23 69 66 64 65  eof(Mem));.#ifde
8f40: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
8f50: 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63     if( pOut->pSc
8f60: 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70  opyFrom>=&aMem[p
8f70: 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f  1] && pOut->pSco
8f80: 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b  pyFrom<&aMem[p1+
8f90: 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20  pOp->p3] ){.    
8fa0: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
8fb0: 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e  om += p1 - pOp->
8fc0: 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p2;.    }.#endif
8fd0: 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  .    pIn1->flags
8fe0: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
8ff0: 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 78 44 65 6c  ;.    pIn1->xDel
9000: 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 31 2d 3e   = 0;.    pIn1->
9010: 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f  zMalloc = zMallo
9020: 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  c;.    REGISTER_
9030: 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74  TRACE(p2++, pOut
9040: 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
9050: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68     pOut++;.  }wh
9060: 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72  ile( --n );.  br
9070: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9080: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33  e: Copy P1 P2 P3
9090: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
90a0: 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50  : r[P2@P3+1]=r[P
90b0: 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  1@P3+1].**.** Ma
90c0: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
90d0: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
90e0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
90f0: 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a  P2..P2+P3..**.**
9100: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
9110: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
9120: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
9130: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
9140: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
9150: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
9160: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
9170: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
9180: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
9190: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
91a0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31   pOp->p3;.  pIn1
91b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
91c0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
91d0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
91e0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
91f0: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29   );.  while( 1 )
9200: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
9210: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9220: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
9230: 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70  Ephem);.    Deep
9240: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
9250: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9260: 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e  DEBUG.    pOut->
9270: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a  pScopyFrom = 0;.
9280: 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53  #endif.    REGIS
9290: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
92a0: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
92b0: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
92c0: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
92d0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
92e0: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
92f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9300: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
9310: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9320: 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]=r[P1].**.*
9330: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
9340: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
9350: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
9360: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
9370: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
9380: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
9390: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
93a0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
93b0: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
93c0: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
93d0: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
93e0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
93f0: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
9400: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
9410: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
9420: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
9430: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
9440: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
9450: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
9460: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
9470: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
9480: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
9490: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
94a0: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
94b0: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
94c0: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
94d0: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
94e0: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
94f0: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
9500: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
9510: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
9520: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9530: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9540: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
9550: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9560: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
9570: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
9580: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
9590: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
95a0: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
95b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
95c0: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
95d0: 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74  pyFrom==0 ) pOut
95e0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70  ->pScopyFrom = p
95f0: 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72  In1;.#endif.  br
9600: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9610: 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20  e: ResultRow P1 
9620: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
9630: 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b  psis:  output=r[
9640: 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P1@P2].**.** The
9650: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
9660: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
9670: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
9680: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
9690: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
96a0: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
96b0: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
96c0: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
96d0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
96e0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
96f0: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
9700: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
9710: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
9720: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
9730: 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32  e r(P1)..r(P1+P2
9740: 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a  -1) values as.**
9750: 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e   the result row.
9760: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
9770: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
9780: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
9790: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
97a0: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
97b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
97c0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
97d0: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
97e0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
97f0: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a  >nCursor)+1 );..
9800: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
9810: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
9820: 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74  LBACK.  /* Run t
9830: 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e  he progress coun
9840: 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20  ter just before 
9850: 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a  returning..  */.
9860: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
9870: 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d  ess!=0.   && nVm
9880: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
9890: 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78  imit.   && db->x
98a0: 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72  Progress(db->pPr
98b0: 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20  ogressArg)!=0.  
98c0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
98d0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
98e0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
98f0: 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64  r_halt;.  }.#end
9900: 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  if..  /* If this
9910: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76   statement has v
9920: 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74  iolated immediat
9930: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
9940: 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20  nstraints, do.  
9950: 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68  ** not return th
9960: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
9970: 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64   modified. And d
9980: 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68  o not RELEASE th
9990: 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a  e statement.  **
99a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74   transaction. It
99b0: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
99c0: 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20  led back.  */.  
99d0: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28  if( SQLITE_OK!=(
99e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
99f0: 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29  CheckFk(p, 0)) )
9a00: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
9a10: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
9a20: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20  ountRows );.    
9a30: 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53  assert( p->usesS
9a40: 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20  tmtJournal );.  
9a50: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
9a60: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  /* If the SQLITE
9a70: 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20  _CountRows flag 
9a80: 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65  is set in sqlite
9a90: 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  3.flags mask, th
9aa0: 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61  en .  ** DML sta
9ab0: 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74  tements invoke t
9ac0: 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65  his opcode to re
9ad0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
9ae0: 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f  of rows .  ** mo
9af0: 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73  dified to the us
9b00: 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  er. This is the 
9b10: 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20  only way that a 
9b20: 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65  VM that.  ** ope
9b30: 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ns a statement t
9b40: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69  ransaction may i
9b50: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
9b60: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e..  **.  ** In 
9b70: 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63  case this is suc
9b80: 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63  h a statement, c
9b90: 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65  lose any stateme
9ba0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  nt transaction. 
9bb0: 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68   ** opened by th
9bc0: 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74  is VM before ret
9bd0: 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74  urning control t
9be0: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
9bf0: 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75   is to.  ** ensu
9c00: 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  re that statemen
9c10: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  t-transactions a
9c20: 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64  re always nested
9c30: 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e  , not overlappin
9c40: 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f  g..  ** If the o
9c50: 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  pen statement-tr
9c60: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
9c70: 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68   closed here, th
9c80: 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a  en the user.  **
9c90: 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65   may step anothe
9ca0: 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20  r VM that opens 
9cb0: 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e  its own statemen
9cc0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54  t transaction. T
9cd0: 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61  his.  ** may lea
9ce0: 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67  d to overlapping
9cf0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
9d00: 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  actions..  **.  
9d10: 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
9d20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
9d30: 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65  never a top-leve
9d40: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  l transaction.  
9d50: 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52  Hence.  ** the R
9d60: 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f  ELEASE call belo
9d70: 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  w can never fail
9d80: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
9d90: 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
9da0: 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53  0 || db->flags&S
9db0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
9dc0: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
9dd0: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
9de0: 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54  ent(p, SAVEPOINT
9df0: 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28  _RELEASE);.  if(
9e00: 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
9e10: 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65  E_OK) ){.    bre
9e20: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e  ak;.  }..  /* In
9e30: 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68  validate all eph
9e40: 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f  emeral cursor ro
9e50: 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d  w caches */.  p-
9e60: 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e  >cacheCtr = (p->
9e70: 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b  cacheCtr + 2)|1;
9e80: 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
9e90: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
9ea0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
9eb0: 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61  are \000 termina
9ec0: 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76  ted.  ** and hav
9ed0: 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79  e an assigned ty
9ee0: 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73  pe.  The results
9ef0: 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61   are de-ephemera
9f00: 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20  lized as.  ** a 
9f10: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
9f20: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
9f30: 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d  esultSet = &aMem
9f40: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
9f50: 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b  (i=0; i<pOp->p2;
9f60: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
9f70: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70  t( memIsValid(&p
9f80: 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44  Mem[i]) );.    D
9f90: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70  eephemeralize(&p
9fa0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73  Mem[i]);.    ass
9fb0: 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c  ert( (pMem[i].fl
9fc0: 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
9fd0: 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
9fe0: 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  || (pMem[i].flag
9ff0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
a000: 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
a010: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a020: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
a030: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49  em[i]);.    REGI
a040: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
a050: 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b  p1+i, &pMem[i]);
a060: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
a070: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
a080: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a  to no_mem;..  /*
a090: 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52   Return SQLITE_R
a0a0: 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20  OW.  */.  p->pc 
a0b0: 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d  = pc + 1;.  rc =
a0c0: 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67   SQLITE_ROW;.  g
a0d0: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
a0e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
a0f0: 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a  oncat P1 P2 P3 *
a100: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a110: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31  r[P3]=r[P2]+r[P1
a120: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
a130: 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72  text in register
a140: 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64   P1 onto the end
a150: 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a   of the text in.
a160: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61  ** register P2 a
a170: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
a180: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
a190: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
a1a0: 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65   the P1 or P2 te
a1b0: 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  xt are NULL then
a1c0: 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50   store NULL in P
a1d0: 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20  3..**.**   P3 = 
a1e0: 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49  P2 || P1.**.** I
a1f0: 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72  t is illegal for
a200: 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65   P1 and P3 to be
a210: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
a220: 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a  er. Sometimes,.*
a230: 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73  * if P3 is the s
a240: 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20  ame register as 
a250: 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  P2, the implemen
a260: 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a  tation is able.*
a270: 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d  * to avoid a mem
a280: 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cpy()..*/.case O
a290: 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20  P_Concat: {     
a2a0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
a2b0: 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c   TK_CONCAT, in1,
a2c0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
a2d0: 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49  i64 nByte;..  pI
a2e0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
a2f0: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
a300: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
a310: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
a320: 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
a330: 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20   pIn1!=pOut );. 
a340: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
a350: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
a360: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
a370: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
a380: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
a390: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
a3a0: 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28   if( ExpandBlob(
a3b0: 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42  pIn1) || ExpandB
a3c0: 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f  lob(pIn2) ) goto
a3d0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e   no_mem;.  Strin
a3e0: 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
a3f0: 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66  ing);.  Stringif
a400: 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn2, encoding
a410: 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e  );.  nByte = pIn
a420: 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a  1->n + pIn2->n;.
a430: 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
a440: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
a450: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
a460: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
a470: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
a480: 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
a490: 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32  ut, (int)nByte+2
a4a0: 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b  , pOut==pIn2) ){
a4b0: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
a4c0: 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  ;.  }.  MemSetTy
a4d0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
a4e0: 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75  _Str);.  if( pOu
a4f0: 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d  t!=pIn2 ){.    m
a500: 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70  emcpy(pOut->z, p
a510: 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29  In2->z, pIn2->n)
a520: 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26  ;.  }.  memcpy(&
a530: 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d  pOut->z[pIn2->n]
a540: 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d  , pIn1->z, pIn1-
a550: 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  >n);.  pOut->z[n
a560: 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d  Byte]=0;.  pOut-
a570: 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b  >z[nByte+1] = 0;
a580: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c  .  pOut->flags |
a590: 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  = MEM_Term;.  pO
a5a0: 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
a5b0: 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  te;.  pOut->enc 
a5c0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
a5d0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
a5e0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
a5f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a600: 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Add P1 P2 P3 * *
a610: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
a620: 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d  [P3]=r[P1]+r[P2]
a630: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76  .**.** Add the v
a640: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
a650: 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
a660: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
a670: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
a680: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
a690: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
a6a0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
a6b0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
a6c0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
a6d0: 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50  code: Multiply P
a6e0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
a6f0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
a700: 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]*r[P2].**.*
a710: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
a720: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
a730: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
a740: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a750: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
a760: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
a770: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
a780: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
a790: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
a7a0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
a7b0: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
a7c0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
a7d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
a7e0: 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a  3]=r[P2]-r[P1].*
a7f0: 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68  *.** Subtract th
a800: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
a810: 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20  ter P1 from the 
a820: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a830: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
a840: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
a850: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
a860: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
a870: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
a880: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
a890: 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64  /* Opcode: Divid
a8a0: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
a8b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
a8c0: 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a  3]=r[P2]/r[P1].*
a8d0: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
a8e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a8f0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
a900: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
a910: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
a920: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a930: 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50  ster P3 (P3=P2/P
a940: 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  1). If the value
a950: 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
a960: 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
a970: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
a980: 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20  NULL. If either 
a990: 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c  input is .** NUL
a9a0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a9b0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a9c0: 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50  ode: Remainder P
a9d0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
a9e0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
a9f0: 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]%r[P1].**.*
aa00: 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65  * Compute the re
aa10: 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e  mainder after in
aa20: 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50  teger register P
aa30: 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20  2 is divided by 
aa40: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
aa50: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
aa60: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
aa70: 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P3. .** If the 
aa80: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
aa90: 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65  r P1 is zero the
aaa0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
aab0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70  .** If either op
aac0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74  erand is NULL, t
aad0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
aae0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  L..*/.case OP_Ad
aaf0: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
ab00: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ab10: 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e  TK_PLUS, in1, in
ab20: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ab30: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
ab40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ab50: 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69  e as TK_MINUS, i
ab60: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ab70: 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c  .case OP_Multipl
ab80: 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y:              
ab90: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
aba0: 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AR, in1, in2, ou
abb0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69  t3 */.case OP_Di
abc0: 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20  vide:           
abd0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
abe0: 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69  TK_SLASH, in1, i
abf0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
ac00: 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b   OP_Remainder: {
ac10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ac20: 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e  me as TK_REM, in
ac30: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ac40: 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20    char bIntint; 
ac50: 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74    /* Started out
ac60: 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20   as two integer 
ac70: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31  operands */.  u1
ac80: 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a  6 flags;      /*
ac90: 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20   Combined MEM_* 
aca0: 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20  flags from both 
acb0: 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20  inputs */.  u16 
acc0: 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e  type1;      /* N
acd0: 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c  umeric type of l
ace0: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
acf0: 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20   u16 type2;     
ad00: 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65   /* Numeric type
ad10: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
ad20: 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20  d */.  i64 iA;  
ad30: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
ad40: 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  r value of left 
ad50: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
ad60: 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iB;         /* 
ad70: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
ad80: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
ad90: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20  /.  double rA;  
ada0: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
adb0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
adc0: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42  d */.  double rB
add0: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
ade0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
adf0: 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31  erand */..  pIn1
ae00: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
ae10: 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d  ];.  type1 = num
ae20: 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a  ericType(pIn1);.
ae30: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
ae40: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32  Op->p2];.  type2
ae50: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
ae60: 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  In2);.  pOut = &
ae70: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
ae80: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
ae90: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
aea0: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
aeb0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
aec0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
aed0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
aee0: 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26  ;.  if( (type1 &
aef0: 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74   type2 & MEM_Int
af00: 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d  )!=0 ){.    iA =
af10: 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn1->u.i;.    
af20: 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  iB = pIn2->u.i;.
af30: 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b      bIntint = 1;
af40: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
af50: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
af60: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
af70: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
af80: 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29  AddInt64(&iB,iA)
af90: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
afa0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
afb0: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
afc0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62    if( sqlite3Sub
afd0: 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20  Int64(&iB,iA) ) 
afe0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62  goto fp_math;  b
aff0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b000: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69   OP_Multiply:  i
b010: 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  f( sqlite3MulInt
b020: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
b030: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
b040: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
b050: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
b060: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
b070: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
b080: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
b090: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
b0a0: 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53  1 && iB==SMALLES
b0b0: 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66  T_INT64 ) goto f
b0c0: 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20  p_math;.        
b0d0: 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB /= iA;.      
b0e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
b0f0: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
b100: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
b110: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
b120: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
b130: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
b140: 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20  ( iA==-1 ) iA = 
b150: 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d  1;.        iB %=
b160: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
b170: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
b180: 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  }.    pOut->u.i 
b190: 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = iB;.    MemSet
b1a0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
b1b0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
b1c0: 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20  {.    bIntint = 
b1d0: 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20  0;.fp_math:.    
b1e0: 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rA = sqlite3Vdbe
b1f0: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b  RealValue(pIn1);
b200: 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65  .    rB = sqlite
b210: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
b220: 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68  In2);.    switch
b230: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
b240: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
b250: 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b  dd:         rB +
b260: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
b270: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
b280: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42  _Subtract:    rB
b290: 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   -= rA;       br
b2a0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b2b0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
b2c0: 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20  rB *= rA;       
b2d0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b2e0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
b2f0: 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c         /* (doubl
b300: 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53  e)0 In case of S
b310: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
b320: 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a  ING_POINT... */.
b330: 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d          if( rA==
b340: 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f  (double)0 ) goto
b350: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
b360: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
b370: 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20      rB /= rA;.  
b380: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b390: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
b3a0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41  lt: {.        iA
b3b0: 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20   = (i64)rA;.    
b3c0: 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42      iB = (i64)rB
b3d0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
b3e0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
b3f0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
b400: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
b410: 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20  ( iA==-1 ) iA = 
b420: 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20  1;.        rB = 
b430: 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41  (double)(iB % iA
b440: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
b450: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
b460: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
b470: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
b480: 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  T.    pOut->u.i 
b490: 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = rB;.    MemSet
b4a0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
b4b0: 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  EM_Int);.#else. 
b4c0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73     if( sqlite3Is
b4d0: 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20  NaN(rB) ){.     
b4e0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b4f0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b500: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
b510: 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  >r = rB;.    Mem
b520: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
b530: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
b540: 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79 70   if( ((type1|typ
b550: 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  e2)&MEM_Real)==0
b560: 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a   && !bIntint ){.
b570: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b580: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
b590: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65  (pOut);.    }.#e
b5a0: 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
b5b0: 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65  ;..arithmetic_re
b5c0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20  sult_is_null:.  
b5d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
b5e0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62  tNull(pOut);.  b
b5f0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b600: 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a  de: CollSeq P1 *
b610: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69   * P4.**.** P4 i
b620: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
b630: 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e   CollSeq struct.
b640: 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c   If the next cal
b650: 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63  l to a user func
b660: 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65  tion.** or aggre
b670: 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74  gate calls sqlit
b680: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
b690: 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69  (), this collati
b6a0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c  on sequence will
b6b0: 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e  .** be returned.
b6c0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
b6d0: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69   the built-in mi
b6e0: 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e  n(), max() and n
b6f0: 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74  ullif().** funct
b700: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ions..**.** If P
b710: 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  1 is not zero, t
b720: 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69  hen it is a regi
b730: 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73  ster that a subs
b740: 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a  equent min() or.
b750: 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  ** max() aggrega
b760: 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31  te will set to 1
b770: 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   if the current 
b780: 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d  row is not the m
b790: 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78  inimum or.** max
b7a0: 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65  imum.  The P1 re
b7b0: 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61  gister is initia
b7c0: 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68  lized to 0 by th
b7d0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
b7e0: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  **.** The interf
b7f0: 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20  ace used by the 
b800: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
b810: 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69  f the aforementi
b820: 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  oned functions.*
b830: 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68  * to retrieve th
b840: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
b850: 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73  ence set by this
b860: 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61   opcode is not a
b870: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c  vailable.** publ
b880: 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73  icly, only to us
b890: 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66  er functions def
b8a0: 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a  ined in func.c..
b8b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53  */.case OP_CollS
b8c0: 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  eq: {.  assert( 
b8d0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
b8e0: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28  COLLSEQ );.  if(
b8f0: 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
b900: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
b910: 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
b920: 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20  ->p1], 0);.  }. 
b930: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b940: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
b950: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
b960: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
b970: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
b980: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
b990: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
b9a0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
b9b0: 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75   a Function stru
b9c0: 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65  cture that.** de
b9d0: 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69  fines the functi
b9e0: 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  on) with P5 argu
b9f0: 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d  ments taken from
ba00: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
ba10: 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20  .** successors. 
ba20: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
ba30: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
ba40: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
ba50: 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65  r P3..** Registe
ba60: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
ba70: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
ba80: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
ba90: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
baa0: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
bab0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
bac0: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
bad0: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
bae0: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
baf0: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
bb00: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
bb10: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
bb20: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
bb30: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
bb40: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
bb50: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
bb60: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
bb70: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
bb80: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
bb90: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
bba0: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
bbb0: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
bbc0: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
bbd0: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
bbe0: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
bbf0: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
bc00: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
bc10: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
bc20: 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61   also: AggStep a
bc30: 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  nd AggFinal.*/.c
bc40: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
bc50: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65   {.  int i;.  Me
bc60: 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74  m *pArg;.  sqlit
bc70: 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
bc80: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
bc90: 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e  **apVal;.  int n
bca0: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  ;..  n = pOp->p5
bcb0: 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
bcc0: 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
bcd0: 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
bce0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
bcf0: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
bd00: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
bd10: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20  rsor) );.  pOut 
bd20: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
bd30: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
bd40: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
bd50: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
bd60: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
bd70: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  pOp->p2+n<=(p->n
bd80: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
bd90: 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
bda0: 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
bdb0: 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
bdc0: 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20  >p2+n );.  pArg 
bdd0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
bde0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
bdf0: 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a  ; i++, pArg++){.
be00: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
be10: 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a  sValid(pArg) );.
be20: 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
be30: 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  Arg;.    Deephem
be40: 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20  eralize(pArg);. 
be50: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
be60: 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72  E(pOp->p2+i, pAr
be70: 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  g);.  }..  asser
be80: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
be90: 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20  P4_FUNCDEF );.  
bea0: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
beb0: 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78  >p4.pFunc;.  ctx
bec0: 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78  .iOp = pc;.  ctx
bed0: 2e 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f  .pVdbe = p;..  /
bee0: 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
bef0: 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
bf00: 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
bf10: 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
bf20: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
bf30: 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ctx.s so in case
bf40: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
bf50: 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20  on can use.  ** 
bf60: 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
bf70: 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
bf80: 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
bf90: 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20  ng a new one..  
bfa0: 2a 2f 0a 20 20 6d 65 6d 63 70 79 28 26 63 74 78  */.  memcpy(&ctx
bfb0: 2e 73 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f 66  .s, pOut, sizeof
bfc0: 28 4d 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d 3e  (Mem));.  pOut->
bfd0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
bfe0: 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
bff0: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c   0;.  pOut->zMal
c000: 6c 6f 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53 65  loc = 0;.  MemSe
c010: 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73  tTypeFlag(&ctx.s
c020: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20  , MEM_Null);..  
c030: 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20  ctx.fErrorOrAux 
c040: 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
c050: 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20  Func->funcFlags 
c060: 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
c070: 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
c080: 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b  sert( pOp>aOp );
c090: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
c0a0: 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
c0b0: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
c0c0: 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
c0d0: 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
c0e0: 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
c0f0: 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
c100: 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d  pColl;.  }.  db-
c110: 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
c120: 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e  tRowid;.  (*ctx.
c130: 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63  pFunc->xFunc)(&c
c140: 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f  tx, n, apVal); /
c150: 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
c160: 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f  3230 */.  lastRo
c170: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
c180: 77 69 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e  wid;..  if( db->
c190: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
c1a0: 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75      /* Even thou
c1b0: 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61  gh a malloc() ha
c1c0: 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d  s failed, the im
c1d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
c1e0: 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20  the.    ** user 
c1f0: 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76  function may hav
c200: 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69  e called an sqli
c210: 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29  te3_result_XXX()
c220: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a   function.    **
c230: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c   to return a val
c240: 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ue. The followin
c250: 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20  g call releases 
c260: 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20  any resources.  
c270: 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20    ** associated 
c280: 77 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75  with such a valu
c290: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  e..    */.    sq
c2a0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
c2b0: 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20  ase(&ctx.s);.   
c2c0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
c2d0: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66  }..  /* If the f
c2e0: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64  unction returned
c2f0: 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77   an error, throw
c300: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f   an exception */
c310: 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f  .  if( ctx.fErro
c320: 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66  rOrAux ){.    if
c330: 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
c340: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
c350: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
c360: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
c370: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
c380: 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20  t(&ctx.s));.    
c390: 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
c3a0: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
c3b0: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
c3c0: 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f  uxData(p, pc, pO
c3d0: 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  p->p1);.  }..  /
c3e0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
c3f0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
c400: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
c410: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
c420: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
c430: 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69  g(&ctx.s, encodi
c440: 6e 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ng);.  assert( p
c450: 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  Out->flags==MEM_
c460: 4e 75 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70 79  Null );.  memcpy
c470: 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20 73  (pOut, &ctx.s, s
c480: 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 69  izeof(Mem));.  i
c490: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
c4a0: 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b  mTooBig(pOut) ){
c4b0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
c4c0: 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20  g;.  }..#if 0.  
c4d0: 2f 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e  /* The app-defin
c4e0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ed function has 
c4f0: 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74  done something t
c500: 68 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68  hat as caused th
c510: 69 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e  is.  ** statemen
c520: 74 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50  t to expire.  (P
c530: 65 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74  erhaps the funct
c540: 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74  ion called sqlit
c550: 65 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77  e3_exec().  ** w
c560: 69 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42  ith a CREATE TAB
c570: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20  LE statement.). 
c580: 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70   */.  if( p->exp
c590: 69 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  ired ) rc = SQLI
c5a0: 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66  TE_ABORT;.#endif
c5b0: 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ..  REGISTER_TRA
c5c0: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
c5d0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
c5e0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
c5f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c600: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
c610: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c620: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
c630: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
c640: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
c650: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
c660: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
c670: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
c680: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
c690: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c6a0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c6b0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
c6c0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c6d0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
c6e0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
c6f0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c700: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
c710: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
c720: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
c730: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
c740: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
c750: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
c760: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
c770: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
c780: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
c790: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
c7a0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
c7b0: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
c7c0: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
c7d0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
c7e0: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
c7f0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
c800: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
c810: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
c820: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
c830: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
c840: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
c850: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
c860: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
c870: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c890: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c8a0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c8b0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c8c0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
c8d0: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
c8e0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
c8f0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
c900: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
c910: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
c920: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c930: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
c940: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
c950: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
c960: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
c970: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
c980: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
c990: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c9a0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c9b0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c9c0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c9d0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
c9e0: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
c9f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ca00: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
ca10: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ca20: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ca50: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
ca60: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
ca70: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
ca80: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ca90: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
caa0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cab0: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
cac0: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
cad0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
cae0: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
caf0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
cb00: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
cb10: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
cb20: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
cb30: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
cb40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
cb50: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
cb60: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
cb70: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
cb80: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
cb90: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
cba0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
cbb0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
cbc0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
cbd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
cbe0: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
cbf0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
cc00: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
cc10: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
cc20: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
cc30: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
cc40: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
cc50: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
cc60: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
cc70: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
cc80: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
cc90: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
cca0: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
ccb0: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
ccc0: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
ccd0: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
cce0: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
ccf0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
cd00: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
cd10: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
cd20: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
cd30: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
cd40: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
cd50: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
cd60: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
cd70: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
cd80: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
cd90: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
cda0: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
cdb0: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
cdc0: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
cdd0: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
cde0: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
cdf0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
ce00: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
ce10: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
ce20: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
ce30: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
ce40: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
ce50: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
ce60: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
ce70: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
ce80: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
ce90: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
cea0: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
ceb0: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
cec0: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
ced0: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
cee0: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
cef0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
cf00: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
cf10: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
cf20: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
cf30: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
cf40: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
cf50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
cf60: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
cf70: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
cf80: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
cf90: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
cfa0: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
cfb0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cfc0: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
cfd0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
cfe0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
cff0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d000: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d010: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d020: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d030: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d040: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d050: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d060: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d070: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d080: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d090: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d0a0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d0b0: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d0c0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d0d0: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d0e0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d0f0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d100: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d110: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
d120: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
d130: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
d140: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
d150: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
d160: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
d170: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
d180: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
d190: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
d1a0: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
d1b0: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
d1c0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
d1d0: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
d1e0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
d1f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
d200: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
d210: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d220: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
d230: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d240: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
d250: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d260: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
d270: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
d280: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
d290: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
d2a0: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
d2b0: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
d2c0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d2d0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
d2e0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
d2f0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
d300: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
d310: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
d320: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
d330: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d340: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
d350: 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
d360: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
d370: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
d380: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
d390: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d3a0: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
d3b0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
d3c0: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
d3d0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
d3e0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d3f0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
d400: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
d410: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
d420: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
d430: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
d440: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
d450: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
d460: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
d470: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
d480: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
d490: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
d4a0: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
d4b0: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
d4c0: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
d4d0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
d4e0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
d4f0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
d500: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
d510: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
d520: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
d530: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
d540: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d550: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d560: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d570: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d580: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
d590: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
d5a0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d5b0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
d5c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d5d0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
d5e0: 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a  ode: ToText P1 *
d5f0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
d600: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
d610: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
d620: 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68  e text..** If th
d630: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
d640: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
d650: 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67  o a string using
d660: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
d670: 6e 74 20 6f 66 20 73 70 72 69 6e 74 66 28 29 2e  nt of sprintf().
d680: 20 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72    Blob values ar
d690: 65 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a  e unchanged and.
d6a0: 2a 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64  ** are afterward
d6b0: 73 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72  s simply interpr
d6c0: 65 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a  eted as text..**
d6d0: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d6e0: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d6f0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d700: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d710: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
d720: 54 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Text: {         
d730: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d740: 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20   as TK_TO_TEXT, 
d750: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d760: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d770: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
d780: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
d790: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
d7a0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61   MEM_Null ) brea
d7b0: 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d  k;.  assert( MEM
d7c0: 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e  _Str==(MEM_Blob>
d7d0: 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  >3) );.  pIn1->f
d7e0: 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66  lags |= (pIn1->f
d7f0: 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e  lags&MEM_Blob)>>
d800: 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  3;.  applyAffini
d810: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
d820: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
d830: 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  ng);.  rc = Expa
d840: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
d850: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
d860: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c  ags & MEM_Str ||
d870: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
d880: 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  d );.  pIn1->fla
d890: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c  gs &= ~(MEM_Int|
d8a0: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f  MEM_Real|MEM_Blo
d8b0: 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55  b|MEM_Zero);.  U
d8c0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
d8d0: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  ZE(pIn1);.  brea
d8e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d8f0: 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a   ToBlob P1 * * *
d900: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
d910: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d920: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20  ster P1 to be a 
d930: 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20  BLOB..** If the 
d940: 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63  value is numeric
d950: 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  , convert it to 
d960: 61 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a  a string first..
d970: 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73  ** Strings are s
d980: 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65  imply reinterpre
d990: 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74  ted as blobs wit
d9a0: 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74  h no change.** t
d9b0: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
d9c0: 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e   data..**.** A N
d9d0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
d9e0: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
d9f0: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
da00: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
da10: 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b  ase OP_ToBlob: {
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
da40: 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a  TO_BLOB, in1 */.
da50: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
da60: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
da70: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
da80: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
da90: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
daa0: 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  s & MEM_Blob)==0
dab0: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
dac0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
dad0: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63  TE_AFF_TEXT, enc
dae0: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65  oding);.    asse
daf0: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
db00: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
db10: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
db20: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
db30: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c  lag(pIn1, MEM_Bl
db40: 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ob);.  }else{.  
db50: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d    pIn1->flags &=
db60: 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26   ~(MEM_TypeMask&
db70: 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a  ~MEM_Blob);.  }.
db80: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
db90: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
dba0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
dbb0: 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31  de: ToNumeric P1
dbc0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
dbd0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
dbe0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
dbf0: 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74   be numeric (eit
dc00: 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65  her an.** intege
dc10: 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d  r or a floating-
dc20: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a  point number.).*
dc30: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
dc40: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
dc50: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
dc60: 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68  t to an using th
dc70: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
dc80: 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f  of atoi() or ato
dc90: 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20  f() and store 0 
dca0: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
dcb0: 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73  rsion .** is pos
dcc0: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
dcd0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
dce0: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
dcf0: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
dd00: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
dd10: 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63  ase OP_ToNumeric
dd20: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
dd30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
dd40: 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69  TK_TO_NUMERIC, i
dd50: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
dd60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
dd70: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
dd80: 75 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  umerify(pIn1);. 
dd90: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
dda0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
ddb0: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
ddc0: 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a  de: ToInt P1 * *
ddd0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
dde0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ddf0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
de00: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a  an integer.  If.
de10: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  ** The value is 
de20: 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c  currently a real
de30: 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74   number, drop it
de40: 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
de50: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
de60: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
de70: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
de80: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
de90: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
dea0: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
deb0: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
dec0: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
ded0: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69  version is possi
dee0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
def0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
df00: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
df10: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
df20: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
df30: 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20  e OP_ToInt: {   
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
df50: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
df60: 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  INT, in1 */.  pI
df70: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
df80: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
df90: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
dfa0: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
dfb0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
dfc0: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
dfd0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
dfe0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
dff0: 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20  E_OMIT_CAST) && 
e000: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
e010: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
e020: 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  INT)./* Opcode: 
e030: 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20  ToReal P1 * * * 
e040: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
e050: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e060: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66  ter P1 to be a f
e070: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
e080: 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20  mber..** If The 
e090: 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74  value is current
e0a0: 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63  ly an integer, c
e0b0: 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66  onvert it..** If
e0c0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
e0d0: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
e0e0: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
e0f0: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
e100: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
e110: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
e120: 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e  d store 0.0 if n
e130: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
e140: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
e150: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
e160: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
e170: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
e180: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
e190: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
e1a0: 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  oReal: {        
e1b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e1c0: 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c  e as TK_TO_REAL,
e1d0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e1e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e1f0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
e200: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
e210: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e220: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
e230: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
e240: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
e250: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
e260: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
e270: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
e280: 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69  T_CAST) && !defi
e290: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
e2a0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20  FLOATING_POINT) 
e2b0: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
e2c0: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
e2d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e2e0: 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74   r[P1]<r[P3] got
e2f0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  o P2.**.** Compa
e300: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
e310: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
e320: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
e330: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
e340: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
e350: 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P2.  .**.** If 
e360: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
e370: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
e380: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
e390: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
e3a0: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
e3b0: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
e3c0: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
e3d0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
e3e0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
e3f0: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
e400: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
e410: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
e420: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
e430: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
e440: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
e450: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
e460: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
e470: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
e480: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
e490: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
e4a0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
e4b0: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
e4c0: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
e4d0: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
e4e0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
e4f0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
e500: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
e510: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
e520: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
e530: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
e540: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
e550: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
e560: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
e570: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
e580: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
e590: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
e5a0: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
e5b0: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
e5c0: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
e5d0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
e5e0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
e5f0: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
e600: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
e610: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
e620: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
e630: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
e640: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
e650: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
e660: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
e670: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
e680: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
e690: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
e6a0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
e6b0: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
e6c0: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
e6d0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
e6e0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
e6f0: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
e700: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
e710: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
e720: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
e730: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
e740: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
e750: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
e760: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
e770: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
e780: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
e790: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
e7a0: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
e7b0: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
e7c0: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
e7d0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
e7e0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
e7f0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
e800: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
e810: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
e820: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
e830: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
e840: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
e850: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
e860: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
e870: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
e880: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
e890: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
e8a0: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
e8b0: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
e8c0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P2..**.** If t
e8d0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
e8e0: 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50   bit is set in P
e8f0: 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c  5, then NULL val
e900: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
e910: 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f  ed.** equal to o
e920: 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76  ne another, prov
e930: 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64  ided that they d
e940: 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72  o not have their
e950: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20   MEM_Cleared.** 
e960: 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f  bit set..*/./* O
e970: 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20  pcode: Ne P1 P2 
e980: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e990: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
e9a0: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e9b0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e9c0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e9d0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e9e0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e9f0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
ea00: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
ea10: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
ea20: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
ea30: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
ea40: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
ea50: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
ea60: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
ea70: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
ea80: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
ea90: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
eaa0: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
eab0: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
eac0: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
ead0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
eae0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
eaf0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
eb00: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
eb10: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
eb20: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
eb30: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
eb40: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
eb50: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
eb60: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
eb70: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
eb80: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
eb90: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
eba0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
ebb0: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
ebc0: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
ebd0: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
ebe0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
ebf0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72  sis: if r[P1]==r
ec00: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
ec10: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
ec20: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
ec30: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
ec40: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
ec50: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
ec60: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
ec70: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
ec80: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
ec90: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
eca0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ecb0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
ecc0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
ecd0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
ece0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
ecf0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
ed00: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
ed10: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
ed20: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
ed30: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
ed40: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
ed50: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
ed60: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
ed70: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
ed80: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
ed90: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
eda0: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
edb0: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
edc0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
edd0: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
ede0: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
edf0: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
ee00: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
ee10: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
ee20: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ee30: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
ee40: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
ee50: 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67  f r[P1]<=r[P3] g
ee60: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
ee70: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
ee80: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ee90: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
eea0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
eeb0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
eec0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
eed0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
eee0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
eef0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ef00: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ef10: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ef20: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ef30: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
ef40: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
ef50: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
ef60: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33  s: if r[P1]>r[P3
ef70: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
ef80: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
ef90: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
efa0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
efb0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
efc0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
efd0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
efe0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
eff0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
f000: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
f010: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f020: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f030: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f040: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
f050: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f060: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
f070: 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]>=r[P3] got
f080: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
f090: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f0a0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f0b0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f0c0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f0d0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f0e0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f0f0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
f100: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
f110: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
f120: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
f130: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
f140: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
f150: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
f160: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
f170: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f180: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
f190: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f1a0: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
f1b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f1c0: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
f1d0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
f1e0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f1f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
f200: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f210: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
f220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f230: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
f240: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f250: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
f260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f270: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
f280: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f290: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
f2a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f2b0: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
f2c0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
f2d0: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
f2e0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
f2f0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
f300: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
f310: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
f320: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
f330: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
f340: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
f350: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
f360: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f370: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f380: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
f390: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
f3a0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
f3b0: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
f3c0: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
f3d0: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
f3e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
f3f0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
f400: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
f410: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
f420: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
f430: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
f440: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
f450: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f460: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
f470: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
f480: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
f490: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
f4a0: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
f4b0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f4c0: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
f4d0: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
f4e0: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
f4f0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
f500: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
f510: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
f520: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
f530: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
f540: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
f550: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
f560: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
f570: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
f580: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
f590: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
f5a0: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
f5b0: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
f5c0: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
f5d0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
f5e0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f5f0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20  _JUMPIFNULL)==0 
f600: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
f610: 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags1&MEM_Null)!=
f620: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
f630: 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
f640: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
f650: 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
f660: 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
f670: 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
f680: 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75   Results are equ
f690: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
f6a0: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
f6b0: 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   1;  /* Results 
f6c0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
f6d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
f6e0: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
f6f0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
f700: 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
f710: 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
f720: 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
f730: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
f740: 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
f750: 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
f760: 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
f770: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f780: 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
f790: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
f7a0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f7b0: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
f7c0: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
f7d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
f7e0: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
f7f0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
f800: 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ll);.        REG
f810: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
f820: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
f830: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
f840: 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
f850: 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69  (2,3);.        i
f860: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f870: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29  ITE_JUMPIFNULL )
f880: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d  {.          pc =
f890: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20   pOp->p2-1;.    
f8a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
f8b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
f8c0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
f8d0: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
f8e0: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
f8f0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
f900: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
f910: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
f920: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
f930: 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20   affinity ){.   
f940: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
f950: 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn1, affinity,
f960: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
f970: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
f980: 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn3, affinity, 
f990: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
f9a0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
f9b0: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
f9c0: 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  mem;.    }..    
f9d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
f9e0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
f9f0: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
fa00: 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  ==0 );.    Expan
fa10: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
fa20: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
fa30: 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
fa40: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
fa50: 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
fa60: 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  p4.pColl);.  }. 
fa70: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
fa80: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
fa90: 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
faa0: 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
fab0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
fac0: 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
fad0: 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
fae0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
faf0: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
fb00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
fb10: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
fb20: 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
fb30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
fb40: 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
fb50: 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
fb60: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
fb70: 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
fb80: 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
fb90: 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
fba0: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
fbb0: 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
fbc0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
fbd0: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
fbe0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
fbf0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
fc00: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
fc10: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
fc20: 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47  i = res;.    REG
fc30: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
fc40: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
fc50: 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
fc60: 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
fc70: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
fc80: 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
fc90: 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
fca0: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
fcb0: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  p2-1;.    }.  }.
fcc0: 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
fcd0: 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
fce0: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
fcf0: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
fd00: 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d  ters. */.  pIn1-
fd10: 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e  >flags = (pIn1->
fd20: 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d  flags&~MEM_TypeM
fd30: 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d  ask) | (flags1&M
fd40: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
fd50: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pIn3->flags = (p
fd60: 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f  In3->flags&~MEM_
fd70: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
fd80: 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs3&MEM_TypeMask
fd90: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
fda0: 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
fdb0: 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
fdc0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
fdd0: 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
fde0: 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
fdf0: 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
fe00: 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
fe10: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
fe20: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
fe30: 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
fe40: 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
fe50: 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74  ext OP_Compare t
fe60: 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f  hat has.** the O
fe70: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
fe80: 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70  t set in P5. Typ
fe90: 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
fea0: 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
feb0: 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64   .** occur immed
fec0: 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
fed0: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
fee0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
fef0: 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
ff00: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
ff10: 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
ff20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
ff30: 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
ff40: 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  te = pOp->p4.ai;
ff50: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ff60: 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
ff70: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ff80: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
ff90: 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33  @P3] <-> r[P2@P3
ffa0: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  ].**.** Compare 
ffb0: 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72  two vectors of r
ffc0: 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
ffd0: 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
ffe0: 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20  ) (call this.** 
fff0: 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20  vector "A") and 
10000 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28  in reg(P2)..reg(
10010 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20  P2+P3-1) ("B"). 
10020 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   Save the result
10030 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61   of.** the compa
10040 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79  rison for use by
10050 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d   the next OP_Jum
10060 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  p instruct..**.*
10070 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
10080 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
10090 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
100a0 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72   order of compar
100b0 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72  ison is.** deter
100c0 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73  mined by the mos
100d0 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d  t recent OP_Perm
100e0 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  utation operator
100f0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46  .  If the.** OPF
10100 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
10110 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
10120 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70  egister are comp
10130 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69  ared in sequenti
10140 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a  al.** order..**.
10150 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e  ** P4 is a KeyIn
10160 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61  fo structure tha
10170 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74  t defines collat
10180 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e  ing sequences an
10190 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73  d sort.** orders
101a0 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69   for the compari
101b0 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  son.  The permut
101c0 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f  ation applies to
101d0 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e   registers.** on
101e0 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  ly.  The KeyInfo
101f0 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73   elements are us
10200 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e  ed sequentially.
10210 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61  .**.** The compa
10220 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20  rison is a sort 
10230 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e  comparison, so N
10240 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ULLs compare equ
10250 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65  al,.** NULLs are
10260 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65   less than numbe
10270 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20  rs, numbers are 
10280 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67  less than string
10290 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67  s,.** and string
102a0 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
102b0 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  blobs..*/.case O
102c0 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69  P_Compare: {.  i
102d0 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
102e0 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70   int p1;.  int p
102f0 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e  2;.  const KeyIn
10300 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
10310 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53  int idx;.  CollS
10320 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a  eq *pColl;    /*
10330 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
10340 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68  nce to use on th
10350 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74  is term */.  int
10360 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20   bRev;          
10370 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43  /* True for DESC
10380 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65  ENDING sort orde
10390 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  r */..  if( (pOp
103a0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
103b0 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72  RMUTE)==0 ) aPer
103c0 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20  mute = 0;.  n = 
103d0 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49  pOp->p3;.  pKeyI
103e0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
103f0 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
10400 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  ( n>0 );.  asser
10410 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29  t( pKeyInfo!=0 )
10420 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
10430 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
10440 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ;.#if SQLITE_DEB
10450 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74  UG.  if( aPermut
10460 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20  e ){.    int k, 
10470 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28  mx = 0;.    for(
10480 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69  k=0; k<n; k++) i
10490 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d  f( aPermute[k]>m
104a0 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74  x ) mx = aPermut
104b0 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  e[k];.    assert
104c0 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c  ( p1>0 && p1+mx<
104d0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
104e0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
104f0 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
10500 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  2+mx<=(p->nMem-p
10510 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10520 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
10530 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
10540 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  n<=(p->nMem-p->n
10550 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
10560 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
10570 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d   p2+n<=(p->nMem-
10580 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
10590 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
105a0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
105b0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
105c0 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61  ++){.    idx = a
105d0 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
105e0 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61  te[i] : i;.    a
105f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
10600 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  d(&aMem[p1+idx])
10610 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
10620 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
10630 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p2+idx]) );.   
10640 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
10650 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31  p1+idx, &aMem[p1
10660 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
10670 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
10680 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  x, &aMem[p2+idx]
10690 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
106a0 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c  <pKeyInfo->nFiel
106b0 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d  d );.    pColl =
106c0 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c   pKeyInfo->aColl
106d0 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20  [i];.    bRev = 
106e0 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f  pKeyInfo->aSortO
106f0 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f  rder[i];.    iCo
10700 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d  mpare = sqlite3M
10710 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b  emCompare(&aMem[
10720 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70  p1+idx], &aMem[p
10730 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a  2+idx], pColl);.
10740 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65      if( iCompare
10750 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52   ){.      if( bR
10760 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20  ev ) iCompare = 
10770 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20  -iCompare;.     
10780 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
10790 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30  }.  aPermute = 0
107a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
107b0 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31   Opcode: Jump P1
107c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
107d0 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73   Jump to the ins
107e0 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72  truction at addr
107f0 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50  ess P1, P2, or P
10800 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  3 depending on w
10810 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65  hether.** in the
10820 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
10830 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74  Compare instruct
10840 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f  ion the P1 vecto
10850 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a  r was less than.
10860 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20  ** equal to, or 
10870 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
10880 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70   P2 vector, resp
10890 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73  ectively..*/.cas
108a0 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20  e OP_Jump: {    
108b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
108c0 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61   */.  if( iCompa
108d0 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  re<0 ){.    pc =
108e0 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20 56   pOp->p1 - 1;  V
108f0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
10900 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ,3);.  }else if(
10910 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
10920 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
10930 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63   - 1;  VdbeBranc
10940 68 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20 7d  hTaken(1,3);.  }
10950 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70  else{.    pc = p
10960 4f 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64 62  Op->p3 - 1;  Vdb
10970 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
10980 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10990 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e  }../* Opcode: An
109a0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
109b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
109c0 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32  ]=(r[P1] && r[P2
109d0 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  ]).**.** Take th
109e0 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66  e logical AND of
109f0 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
10a00 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
10a10 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20  P2 and.** write 
10a20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
10a30 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
10a40 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
10a50 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73  or P2 is 0 (fals
10a60 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
10a70 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a  lt is 0 even if.
10a80 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  ** the other inp
10a90 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
10aa0 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20  ULL and true or 
10ab0 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a  two NULLs give.*
10ac0 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  * a NULL output.
10ad0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
10ae0 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
10af0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
10b00 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32  ]=(r[P1] || r[P2
10b10 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  ]).**.** Take th
10b20 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20  e logical OR of 
10b30 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
10b40 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
10b50 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
10b60 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69  e answer in regi
10b70 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
10b80 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
10b90 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72  2 is nonzero (tr
10ba0 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ue) then the res
10bb0 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a  ult is 1 (true).
10bc0 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f  ** even if the o
10bd0 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
10be0 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
10bf0 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c  false or two NUL
10c00 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c  Ls.** give a NUL
10c10 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  L output..*/.cas
10c20 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20  e OP_And:       
10c30 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10c40 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69  s TK_AND, in1, i
10c50 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
10c60 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20   OP_Or: {       
10c70 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10c80 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32   TK_OR, in1, in2
10c90 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
10ca0 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  v1;    /* Left o
10cb0 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53  perand:  0==FALS
10cc0 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
10cd0 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
10ce0 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f  /.  int v2;    /
10cf0 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a  * Right operand:
10d00 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
10d10 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
10d20 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e  r NULL */..  pIn
10d30 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
10d40 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
10d50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10d60 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a   ){.    v1 = 2;.
10d70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20    }else{.    v1 
10d80 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
10d90 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
10da0 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d    }.  pIn2 = &aM
10db0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
10dc0 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  f( pIn2->flags &
10dd0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
10de0 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v2 = 2;.  }else
10df0 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74  {.    v2 = sqlit
10e00 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
10e10 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69  In2)!=0;.  }.  i
10e20 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
10e30 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74  OP_And ){.    st
10e40 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
10e50 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67  ned char and_log
10e60 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30  ic[] = { 0, 0, 0
10e70 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c  , 0, 1, 2, 0, 2,
10e80 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61   2 };.    v1 = a
10e90 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  nd_logic[v1*3+v2
10ea0 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
10eb0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
10ec0 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f  igned char or_lo
10ed0 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20  gic[] = { 0, 1, 
10ee0 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31  2, 1, 1, 1, 2, 1
10ef0 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
10f00 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  or_logic[v1*3+v2
10f10 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20  ];.  }.  pOut = 
10f20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
10f30 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
10f40 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10f50 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
10f60 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10f70 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
10f80 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10f90 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
10fa0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10fb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
10fc0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
10fd0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
10fe0 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = !r[P1].**.** I
10ff0 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
11000 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11010 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
11020 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65  alue.  Store the
11030 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70  .** boolean comp
11040 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74  lement in regist
11050 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76  er P2.  If the v
11060 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11070 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c   P1 is .** NULL,
11080 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20   then a NULL is 
11090 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f  stored in P2..*/
110a0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
110c0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
110d0 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
110e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
110f0 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
11100 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
11110 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
11120 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11130 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
11140 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
11150 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
11160 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
11170 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c  Int64(pOut, !sql
11180 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
11190 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62  (pIn1));.  }.  b
111a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
111b0 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
111c0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
111d0 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31  is: r[P1]= ~r[P1
111e0 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
111f0 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
11200 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
11210 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
11220 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
11230 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
11240 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
11250 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
11260 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
11270 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
11280 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
11290 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
112b0 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
112c0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
112d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
112e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
112f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
11300 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
11310 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
11320 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
11330 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
11340 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11350 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
11360 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71  tInt64(pOut, ~sq
11370 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
11380 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
11390 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
113a0 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20  ode: Once P1 P2 
113b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  * * *.**.** Chec
113c0 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61  k the "once" fla
113d0 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20  g number P1. If 
113e0 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20  it is set, jump 
113f0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
11400 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  2. .** Otherwise
11410 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61  , set the flag a
11420 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
11430 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
11440 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f  ruction..** In o
11450 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73  ther words, this
11460 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 61   opcode causes a
11470 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63  ll following opc
11480 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67 68 20  odes up through 
11490 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69  P2.** (but not i
114a0 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20  ncluding P2) to 
114b0 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e  run just once an
114c0 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20  d to be skipped 
114d0 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  on subsequent.**
114e0 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74   times through t
114f0 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41  he loop..**.** A
11500 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20  ll "once" flags 
11510 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c  are initially cl
11520 65 61 72 65 64 20 77 68 65 6e 65 76 65 72 20 61  eared whenever a
11530 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
11540 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67  ent.** first beg
11550 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63  ins to run..*/.c
11560 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
11570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
11580 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
11590 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65  pOp->p1<p->nOnce
115a0 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72  Flag );.  VdbeBr
115b0 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e  anchTaken(p->aOn
115c0 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21  ceFlag[pOp->p1]!
115d0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d  =0, 2);.  if( p-
115e0 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
115f0 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  p1] ){.    pc = 
11600 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c  pOp->p2-1;.  }el
11610 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65  se{.    p->aOnce
11620 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  Flag[pOp->p1] = 
11630 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
11640 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
11650 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11660 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
11670 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11680 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
11690 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
116a0 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
116b0 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
116c0 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
116d0 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
116e0 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
116f0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
11700 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e   jump if P3 is n
11710 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f  on-zero..*/./* O
11720 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
11730 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
11740 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
11750 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11760 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
11770 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
11780 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c  s considered fal
11790 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  se if it has a n
117a0 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
117b0 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
117c0 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
117d0 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
117e0 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
117f0 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f   zero..*/.case O
11800 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
11810 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
11820 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
11830 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
11840 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
11850 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
11860 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
11870 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
11880 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11890 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
118a0 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
118b0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
118c0 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
118d0 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
118e0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
118f0 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
11900 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
11910 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
11920 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
11930 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
11940 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
11950 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  !c;.  }.  VdbeBr
11960 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20  anchTaken(c!=0, 
11970 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20  2);.  if( c ){. 
11980 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
11990 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
119a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
119b0 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
119c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
119d0 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f  f r[P1]==NULL go
119e0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
119f0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
11a00 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11a10 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
11a20 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
11a30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
11a40 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
11a50 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
11a60 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11a70 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
11a80 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
11a90 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11aa0 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)!=0, 2);.  if
11ab0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
11ac0 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
11ad0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
11ae0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
11af0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11b00 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20  : NotNull P1 P2 
11b10 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11b20 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c  s: if r[P1]!=NUL
11b30 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
11b40 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
11b50 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11b60 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55  ter P1 is not NU
11b70 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  LL.  .*/.case OP
11b80 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  _NotNull: {     
11b90 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11ba0 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75  s TK_NOTNULL, ju
11bb0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
11bc0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
11bd0 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
11be0 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
11bf0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
11c00 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
11c10 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
11c20 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
11c30 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
11c40 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
11c50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
11c60 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34  lumn P1 P2 P3 P4
11c70 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
11c80 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a    r[P3]=PX.**.**
11c90 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64   Interpret the d
11ca0 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20  ata that cursor 
11cb0 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20  P1 points to as 
11cc0 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c  a structure buil
11cd0 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d  t using.** the M
11ce0 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
11cf0 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65  ction.  (See the
11d00 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f   MakeRecord opco
11d10 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
11d20 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  l.** information
11d30 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61   about the forma
11d40 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20  t of the data.) 
11d50 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d   Extract the P2-
11d60 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f  th column.** fro
11d70 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20  m this record.  
11d80 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  If there are les
11d90 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a  s that (P2+1) .*
11da0 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  * values in the 
11db0 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20  record, extract 
11dc0 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  a NULL..**.** Th
11dd0 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65  e value extracte
11de0 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  d is stored in r
11df0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11e00 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  * If the column 
11e10 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74  contains fewer t
11e20 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74  han P2 fields, t
11e30 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55  hen extract a NU
11e40 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74  LL.  Or,.** if t
11e50 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  he P4 argument i
11e60 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74  s a P4_MEM use t
11e70 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
11e80 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a  P4 argument as.*
11e90 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a  * the result..**
11ea0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
11eb0 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74  G_CLEARCACHE bit
11ec0 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e   is set on P5 an
11ed0 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  d P1 is a pseudo
11ee0 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a  -table cursor,.*
11ef0 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65  * then the cache
11f00 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   of the cursor i
11f10 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f  s reset prior to
11f20 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20   extracting the 
11f30 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66  column..** The f
11f40 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61  irst OP_Column a
11f50 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d  gainst a pseudo-
11f60 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20  table after the 
11f70 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e  value of the con
11f80 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72  tent.** register
11f90 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f   has changed sho
11fa0 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69  uld have this bi
11fb0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  t set..**.** If 
11fc0 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  the OPFLAG_LENGT
11fd0 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
11fe0 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61  TYPEOFARG bits a
11ff0 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65  re set on P5 whe
12000 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  n.** the result 
12010 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  is guaranteed to
12020 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73   only be used as
12030 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66   the argument of
12040 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f   a length().** o
12050 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  r typeof() funct
12060 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
12070 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20  y.  The loading 
12080 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63  of large blobs c
12090 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64  an be.** skipped
120a0 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e   for length() an
120b0 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f  d all content lo
120c0 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69  ading can be ski
120d0 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  pped for typeof(
120e0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
120f0 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61  lumn: {.  i64 pa
12100 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20  yloadSize64; /* 
12110 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12120 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
12130 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
12140 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
12150 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
12160 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
12170 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
12180 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
12190 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
121a0 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
121b0 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
121c0 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20  32 *aType;      
121d0 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f    /* aType[i] ho
121e0 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  lds the numeric 
121f0 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68  type of the i-th
12200 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
12210 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
12220 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
12230 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
12240 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
12250 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
12260 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
12270 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
12280 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
12290 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
122a0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
122c0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
122d0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
122e0 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
122f0 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
12300 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
12310 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
12320 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
12330 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
12340 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
12350 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b  const u8 *zData;
12360 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
12370 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
12380 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
12390 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f  t u8 *zHdr;    /
123a0 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20  * Next unparsed 
123b0 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64  byte of the head
123c0 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  er */.  const u8
123d0 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f   *zEndHdr; /* Po
123e0 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
123f0 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
12400 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66  ader */.  u32 of
12410 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  fset;        /* 
12420 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  Offset into the 
12430 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a  data */.  u32 sz
12440 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20  Field;       /* 
12450 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12460 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  in the content o
12470 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75  f a field */.  u
12480 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20  32 avail;       
12490 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
124a0 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
124b0 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
124c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
124d0 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
124e0 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
124f0 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ader */.  Mem *p
12500 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
12510 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75  PseudoTable inpu
12520 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20  t register */.. 
12530 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
12540 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
12550 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
12560 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
12570 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  or) );.  pDest =
12580 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
12590 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
125a0 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
125b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
125c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
125d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
125e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
125f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
12600 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
12610 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c  rt( p2<pC->nFiel
12620 64 20 29 3b 0a 20 20 61 54 79 70 65 20 3d 20 70  d );.  aType = p
12630 43 2d 3e 61 54 79 70 65 3b 0a 20 20 61 4f 66 66  C->aType;.  aOff
12640 73 65 74 20 3d 20 61 54 79 70 65 20 2b 20 70 43  set = aType + pC
12650 2d 3e 6e 46 69 65 6c 64 3b 0a 23 69 66 6e 64 65  ->nField;.#ifnde
12660 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
12670 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
12680 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
12690 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50  rsor==0 ); /* OP
126a0 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20 63 61  _Column never ca
126b0 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61 6c 20  lled on virtual 
126c0 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
126d0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
126e0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
126f0 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d   pCrsr!=0 || pC-
12700 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e  >pseudoTableReg>
12710 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20 4e 55  0 ); /* pCrsr NU
12720 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c  LL on PseudoTabl
12730 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  es */.  assert( 
12740 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e  pCrsr!=0 || pC->
12750 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20 20 20  nullRow );      
12760 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52      /* pC->nullR
12770 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c  ow on PseudoTabl
12780 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74  es */..  /* If t
12790 68 65 20 63 75 72 73 6f 72 20 63 61 63 68 65 20  he cursor cache 
127a0 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67 20  is stale, bring 
127b0 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f  it up-to-date */
127c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
127d0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
127e0 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
127f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
12800 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
12810 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
12820 70 2d 3e 63 61 63 68 65 43 74 72 20 7c 7c 20 28  p->cacheCtr || (
12830 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43  pOp->p5&OPFLAG_C
12840 4c 45 41 52 43 41 43 48 45 29 21 3d 30 20 29 7b  LEARCACHE)!=0 ){
12850 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
12860 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
12870 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
12880 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
12890 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
128a0 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52  >0 );.        pR
128b0 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70  eg = &aMem[pC->p
128c0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
128d0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
128e0 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pReg->flags & ME
128f0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
12900 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
12910 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20  alid(pReg) );.  
12920 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
12930 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f  dSize = pC->szRo
12940 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67  w = avail = pReg
12950 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ->n;.        pC-
12960 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65  >aRow = (u8*)pRe
12970 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  g->z;.      }els
12980 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  e{.        MemSe
12990 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
129a0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
129b0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
129c0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
129d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
129e0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
129f0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
12a00 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
12a10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
12a20 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
12a30 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
12a40 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
12a50 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
12a60 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
12a70 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
12a80 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  64);.        ass
12a90 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12aa0 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65  OK ); /* True be
12ab0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
12ac0 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
12ad0 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a  ve */.        /*
12ae0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
12af0 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
12b00 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
12b10 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
12b20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64        ** payload
12b30 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20   size, so it is 
12b40 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70  impossible for p
12b50 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20  ayloadSize64 to 
12b60 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61  be.        ** la
12b70 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74  rger than 32 bit
12b80 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  s. */.        as
12b90 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69  sert( (payloadSi
12ba0 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  ze64 & SQLITE_MA
12bb0 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79  X_U32)==(u64)pay
12bc0 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20  loadSize64 );.  
12bd0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
12be0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
12bf0 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
12c00 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43  ail);.        pC
12c10 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
12c20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u32)payloadSize
12c30 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  64;.      }else{
12c40 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12c50 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
12c60 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
12c70 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41  ) );.        VVA
12c80 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
12c90 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
12ca0 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79  (pCrsr, &pC->pay
12cb0 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20  loadSize);.     
12cc0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
12cd0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
12ce0 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
12cf0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20  ot fail */.     
12d00 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
12d10 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
12d20 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
12d30 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
12d40 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c    assert( avail<
12d50 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61  =65536 );  /* Ma
12d60 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20  ximum page size 
12d70 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20  is 64KiB */.    
12d80 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
12d90 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
12da0 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ail ){.        p
12db0 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70  C->szRow = pC->p
12dc0 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
12dd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
12de0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
12df0 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  il;.      }.    
12e00 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
12e10 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
12e20 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
12e30 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
12e40 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f          goto too
12e50 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _big;.      }.  
12e60 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68    }.    pC->cach
12e70 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63  eStatus = p->cac
12e80 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69  heCtr;.    pC->i
12e90 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56  HdrOffset = getV
12ea0 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77  arint32(pC->aRow
12eb0 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70  , offset);.    p
12ec0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20  C->nHdrParsed = 
12ed0 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30  0;.    aOffset[0
12ee0 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20  ] = offset;.    
12ef0 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74  if( avail<offset
12f00 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d   ){.      /* pC-
12f10 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68  >aRow does not h
12f20 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ave to hold the 
12f30 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20  entire row, but 
12f40 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74  it does at least
12f50 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74  .      ** need t
12f60 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64  o cover the head
12f70 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  er of the record
12f80 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64  .  If pC->aRow d
12f90 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a  oes not contain.
12fa0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d        ** the com
12fb0 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68  plete header, th
12fc0 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72  en set it to zer
12fd0 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68  o, forcing the h
12fe0 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20  eader to be.    
12ff0 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
13000 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20   allocated. */. 
13010 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
13020 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  0;.      pC->szR
13030 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20  ow = 0;.    }.. 
13040 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
13050 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
13060 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e  se has not given
13070 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20   us an oversize 
13080 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44  header..    ** D
13090 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76  o this now to av
130a0 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20  oid an oversize 
130b0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
130c0 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  n..    **.    **
130d0 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61   Type entries ca
130e0 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  n be between 1 a
130f0 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e  nd 5 bytes each.
13100 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79    But 4 and 5 by
13110 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20  te.    ** types 
13120 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61  use so much data
13130 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72   space that ther
13140 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30  e can only be 40
13150 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20  96 and 32 of.   
13160 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63   ** them, respec
13170 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20  tively.  So the 
13180 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c  maximum header l
13190 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72  ength results fr
131a0 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79  om a.    ** 3-by
131b0 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
131c0 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
131d0 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
131e0 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
131f0 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
13200 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
13210 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
13220 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
13230 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  7..    */.    if
13240 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37  ( offset > 98307
13250 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d   || offset > pC-
13260 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a  >payloadSize ){.
13270 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
13280 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
13290 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
132a0 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20  lumn_error;.    
132b0 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  }.  }..  /* Make
132c0 20 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74   sure at least t
132d0 68 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e  he first p2+1 en
132e0 74 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61  tries of the hea
132f0 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20  der have been.  
13300 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61  ** parsed and va
13310 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lid information 
13320 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20  is in aOffset[] 
13330 61 6e 64 20 61 54 79 70 65 5b 5d 2e 0a 20 20 2a  and aType[]..  *
13340 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72  /.  if( pC->nHdr
13350 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
13360 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
13370 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61   more header ava
13380 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69  ilable for parsi
13390 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ng in the record
133a0 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20  , try.    ** to 
133b0 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e  extract addition
133c0 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72  al fields up thr
133d0 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68  ough the p2+1-th
133e0 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20   field .    */. 
133f0 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f     if( pC->iHdrO
13400 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d  ffset<aOffset[0]
13410 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   ){.      /* Mak
13420 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69  e sure zData poi
13430 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66  nts to enough of
13440 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63   the record to c
13450 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e  over the header.
13460 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
13470 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
13480 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
13490 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
134a0 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  m));.        rc 
134b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
134c0 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
134d0 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20   0, aOffset[0], 
134e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 20 20 20 20 21 70 43 2d 3e 69 73 54 61 62        !pC->isTab
13510 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  le, &sMem);.    
13520 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
13530 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
13540 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13550 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  n_error;.       
13560 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61   }.        zData
13570 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a   = (u8*)sMem.z;.
13580 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
13590 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d       zData = pC-
135a0 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20  >aRow;.      }. 
135b0 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20   .      /* Fill 
135c0 69 6e 20 61 54 79 70 65 5b 69 5d 20 61 6e 64 20  in aType[i] and 
135d0 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65  aOffset[i] value
135e0 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32  s through the p2
135f0 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20  -th field. */.  
13600 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72      i = pC->nHdr
13610 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66  Parsed;.      of
13620 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69  fset = aOffset[i
13630 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
13640 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
13650 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
13660 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
13670 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
13680 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20    assert( i<=p2 
13690 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20  && zHdr<zEndHdr 
136a0 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  );.      do{.   
136b0 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d       if( zHdr[0]
136c0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
136d0 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a     t = zHdr[0];.
136e0 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b            zHdr++
136f0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
13700 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
13710 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
13720 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
13730 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
13740 20 20 20 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b     aType[i] = t;
13750 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64  .        szField
13760 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
13770 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
13780 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
13790 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20  = szField;.     
137a0 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a     if( offset<sz
137b0 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75  Field ){  /* Tru
137c0 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72  e if offset over
137d0 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20  flows */.       
137e0 20 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48     zHdr = &zEndH
137f0 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65  dr[1];  /* Force
13800 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  s SQLITE_CORRUPT
13810 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f   return below */
13820 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
13830 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
13840 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20      i++;.       
13850 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66   aOffset[i] = of
13860 66 73 65 74 3b 0a 20 20 20 20 20 20 7d 77 68 69  fset;.      }whi
13870 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64  le( i<=p2 && zHd
13880 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20  r<zEndHdr );.   
13890 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65     pC->nHdrParse
138a0 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d  d = i;.      pC-
138b0 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75  >iHdrOffset = (u
138c0 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61  32)(zHdr - zData
138d0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  );.      if( pC-
138e0 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20  >aRow==0 ){.    
138f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13900 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
13910 3b 0a 20 20 20 20 20 20 20 20 73 4d 65 6d 2e 66  ;.        sMem.f
13920 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
13930 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
13940 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20    /* If we have 
13950 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72  read more header
13960 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63   data than was c
13970 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
13980 68 65 61 64 65 72 2c 0a 20 20 20 20 20 20 2a 2a  header,.      **
13990 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
139a0 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
139b0 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70   appears to be p
139c0 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
139d0 68 65 0a 20 20 20 20 20 20 2a 2a 20 72 65 63 6f  he.      ** reco
139e0 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e  rd, or if the en
139f0 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
13a00 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
13a10 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64  e before the end
13a20 0a 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  .      ** of the
13a30 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c   record (when al
13a40 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74  l fields present
13a50 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20  ), then we must 
13a60 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20  be dealing .    
13a70 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72    ** with a corr
13a80 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20  upt database..  
13a90 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
13aa0 20 28 7a 48 64 72 20 3e 20 7a 45 6e 64 48 64 72   (zHdr > zEndHdr
13ab0 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66  ).       || (off
13ac0 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  set > pC->payloa
13ad0 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20 7c 7c  dSize).       ||
13ae0 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20   (zHdr==zEndHdr 
13af0 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70  && offset!=pC->p
13b00 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
13b10 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20    ){.        rc 
13b20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
13b30 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
13b40 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72  oto op_column_er
13b50 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
13b60 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66   }..    /* If af
13b70 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78  ter trying to ex
13b80 74 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73 20  tra new entries 
13b90 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c  from the header,
13ba0 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20   nHdrParsed is. 
13bb0 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20     ** still not 
13bc0 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d  up to p2, that m
13bd0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65  eans that the re
13be0 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74  cord has fewer t
13bf0 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f  han p2.    ** co
13c00 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72  lumns.  So the r
13c10 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69  esult will be ei
13c20 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ther the default
13c30 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c   value or a NULL
13c40 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
13c50 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
13c60 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28  =p2 ){.      if(
13c70 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
13c80 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20  _MEM ){.        
13c90 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
13ca0 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
13cb0 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
13cc0 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
13cd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13ce0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
13cf0 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
13d00 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
13d10 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
13d20 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ut;.    }.  }.. 
13d30 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
13d40 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20  content for the 
13d50 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20  p2+1-th column. 
13d60 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c   Control can onl
13d70 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69  y.  ** reach thi
13d80 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73  s point if aOffs
13d90 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b  et[p2], aOffset[
13da0 70 32 2b 31 5d 2c 20 61 6e 64 20 61 54 79 70 65  p2+1], and aType
13db0 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c  [p2] are.  ** al
13dc0 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20  l valid..  */.  
13dd0 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
13de0 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61  HdrParsed );.  a
13df0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
13e00 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  E_OK );.  assert
13e10 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
13e20 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
13e30 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20  pDest) );.  if( 
13e40 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73  pC->szRow>=aOffs
13e50 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20  et[p2+1] ){.    
13e60 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
13e70 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
13e80 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e   the desired con
13e90 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65  tent fits on the
13ea0 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a   original.    **
13eb0 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68   page - where th
13ec0 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
13ed0 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   on an overflow 
13ee0 70 61 67 65 20 2a 2f 0a 20 20 20 20 56 64 62 65  page */.    Vdbe
13ef0 4d 65 6d 52 65 6c 65 61 73 65 28 70 44 65 73 74  MemRelease(pDest
13f00 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
13f10 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e  beSerialGet(pC->
13f20 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d  aRow+aOffset[p2]
13f30 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
13f40 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  st);.  }else{.  
13f50 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
13f60 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
13f70 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
13f80 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
13f90 2a 2f 0a 20 20 20 20 74 20 3d 20 61 54 79 70 65  */.    t = aType
13fa0 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20 28 28  [p2];.    if( ((
13fb0 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
13fc0 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c  G_LENGTHARG|OPFL
13fd0 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d  AG_TYPEOFARG))!=
13fe0 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28  0.          && (
13ff0 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d  (t>=12 && (t&1)=
14000 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20  =0) || (pOp->p5 
14010 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  & OPFLAG_TYPEOFA
14020 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c  RG)!=0)).     ||
14030 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56   (len = sqlite3V
14040 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
14050 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20  (t))==0.    ){. 
14060 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20       /* Content 
14070 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f  is irrelevant fo
14080 72 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  r the typeof() f
14090 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a  unction and for.
140a0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e        ** the len
140b0 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
140c0 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2e 20  if X is a blob. 
140d0 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
140e0 77 65 6c 6c 20 75 73 65 0a 20 20 20 20 20 20 2a  well use.      *
140f0 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  * bogus content 
14100 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
14110 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d  ing content from
14120 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72   disk.  NULL wor
14130 6b 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20  ks.      ** for 
14140 74 65 78 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e  text and blob an
14150 64 20 77 68 61 74 65 76 65 72 20 69 73 20 69 6e  d whatever is in
14160 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a 65   the payloadSize
14170 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20 20  64 variable.    
14180 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66    ** will work f
14190 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20 65 6c  or everything el
141a0 73 65 2e 20 20 43 6f 6e 74 65 6e 74 20 69 73 20  se.  Content is 
141b0 61 6c 73 6f 20 69 72 72 65 6c 65 76 61 6e 74 20  also irrelevant 
141c0 69 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  if.      ** the 
141d0 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69  content length i
141e0 73 20 30 2e 20 2a 2f 0a 20 20 20 20 20 20 7a 44  s 0. */.      zD
141f0 61 74 61 20 3d 20 74 3c 3d 31 33 20 3f 20 28 75  ata = t<=13 ? (u
14200 38 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  8*)&payloadSize6
14210 34 20 3a 20 30 3b 0a 20 20 20 20 20 20 73 4d 65  4 : 0;.      sMe
14220 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  m.zMalloc = 0;. 
14230 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14240 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
14250 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
14260 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
14270 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20  eMemMove(&sMem, 
14280 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63  pDest);.      rc
14290 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
142a0 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
142b0 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
142c0 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c 65  en, !pC->isTable
142d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20       &sMem);.   
14300 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
14310 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
14320 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
14330 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
14340 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
14350 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20  )sMem.z;.    }. 
14360 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
14370 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74  rialGet(zData, t
14380 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 2f 2a  , pDest);.    /*
14390 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c   If we dynamical
143a0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
143b0 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  ce to hold the d
143c0 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 20 20  ata (in the.    
143d0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
143e0 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c  mFromBtree() cal
143f0 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72  l above) then tr
14400 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f  ansfer control o
14410 66 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 64 79  f that.    ** dy
14420 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
14430 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20 74  ted space over t
14440 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72 75  o the pDest stru
14450 63 74 75 72 65 2e 0a 20 20 20 20 2a 2a 20 54 68  cture..    ** Th
14460 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65  is prevents a me
14470 6d 6f 72 79 20 63 6f 70 79 2e 20 2a 2f 0a 20 20  mory copy. */.  
14480 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c    if( sMem.zMall
14490 6f 63 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  oc ){.      asse
144a0 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d  rt( sMem.z==sMem
144b0 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  .zMalloc );.    
144c0 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
144d0 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 3d  mDynamic(pDest)=
144e0 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
144f0 72 74 28 20 28 70 44 65 73 74 2d 3e 66 6c 61 67  rt( (pDest->flag
14500 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
14510 4d 5f 53 74 72 29 29 3d 3d 30 20 7c 7c 20 70 44  M_Str))==0 || pD
14520 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29  est->z==sMem.z )
14530 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66  ;.      pDest->f
14540 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70  lags &= ~(MEM_Ep
14550 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b  hem|MEM_Static);
14560 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
14570 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
14580 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 20  .      pDest->z 
14590 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  = sMem.z;.      
145a0 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pDest->zMalloc =
145b0 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20   sMem.zMalloc;. 
145c0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74     }.  }.  pDest
145d0 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
145e0 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
145f0 3a 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69  :.  Deephemerali
14600 7a 65 28 70 44 65 73 74 29 3b 0a 6f 70 5f 63 6f  ze(pDest);.op_co
14610 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50  lumn_error:.  UP
14620 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
14630 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49  E(pDest);.  REGI
14640 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
14650 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72  p3, pDest);.  br
14660 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
14670 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50  e: Affinity P1 P
14680 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
14690 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72  psis: affinity(r
146a0 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41  [P1@P2]).**.** A
146b0 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20  pply affinities 
146c0 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32  to a range of P2
146d0 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
146e0 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a  ing with P1..**.
146f0 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e  ** P4 is a strin
14700 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
14710 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68  racters long. Th
14720 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
14730 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
14740 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
14750 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
14760 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
14770 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
14780 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  * memory cell in
14790 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63   the range..*/.c
147a0 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a  ase OP_Affinity:
147b0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
147c0 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  *zAffinity;   /*
147d0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
147e0 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
147f0 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20   char cAff;     
14800 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
14810 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
14820 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a  of affinity */..
14830 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
14840 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
14850 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20  t( zAffinity!=0 
14860 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
14870 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
14880 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
14890 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
148a0 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20   while( (cAff = 
148b0 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21  *(zAffinity++))!
148c0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
148d0 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d  ( pIn1 <= &p->aM
148e0 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  em[(p->nMem-p->n
148f0 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
14900 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
14910 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
14920 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
14930 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69  n1, cAff, encodi
14940 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ng);.    pIn1++;
14950 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
14960 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65  ./* Opcode: Make
14970 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20  Record P1 P2 P3 
14980 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
14990 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b  : r[P3]=mkrec(r[
149a0 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f  P1@P2]).**.** Co
149b0 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
149c0 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
149d0 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72  h P1 into the [r
149e0 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a  ecord format].**
149f0 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72   use as a data r
14a00 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62  ecord in a datab
14a10 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20  ase table or as 
14a20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69  a key.** in an i
14a30 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f  ndex.  The OP_Co
14a40 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
14a50 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
14a60 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50  d later..**.** P
14a70 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e  4 may be a strin
14a80 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
14a90 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54  racters long.  T
14aa0 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
14ab0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
14ac0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
14ad0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
14ae0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
14af0 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
14b00 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ** field of the 
14b10 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  index key..**.**
14b20 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f   The mapping fro
14b30 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61  m character to a
14b40 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e  ffinity is given
14b50 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41   by the SQLITE_A
14b60 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65  FF_.** macros de
14b70 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49  fined in sqliteI
14b80 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nt.h..**.** If P
14b90 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61  4 is NULL then a
14ba0 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20  ll index fields 
14bb0 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74  have the affinit
14bc0 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20  y NONE..*/.case 
14bd0 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b  OP_MakeRecord: {
14be0 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72  .  u8 *zNewRecor
14bf0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  d;        /* A b
14c00 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68  uffer to hold th
14c10 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e  e data for the n
14c20 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  ew record */.  M
14c30 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
14c40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
14c50 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34   record */.  u64
14c60 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20   nData;         
14c70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14c80 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
14c90 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
14ca0 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
14cb0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14cc0 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
14cd0 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ace */.  i64 nBy
14ce0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
14cf0 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65  /* Data space re
14d00 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
14d10 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
14d20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20  nZero;          
14d30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14d40 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
14d50 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14d60 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61  ord */.  int nVa
14d70 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  rint;           
14d80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
14d90 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a  es in a varint *
14da0 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74  /.  u32 serial_t
14db0 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79  ype;       /* Ty
14dc0 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65  pe field */.  Me
14dd0 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20  m *pData0;      
14de0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69       /* First fi
14df0 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e  eld to be combin
14e00 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ed into the reco
14e10 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61  rd */.  Mem *pLa
14e20 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
14e30 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20  * Last field of 
14e40 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
14e50 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
14e60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14e70 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
14e80 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68  e record */.  ch
14e90 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
14ea0 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
14eb0 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  nity string for 
14ec0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
14ed0 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  int file_format;
14ee0 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66         /* File f
14ef0 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
14f00 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
14f10 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
14f20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
14f30 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
14f40 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  d[] header */.  
14f50 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
14f60 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
14f70 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
14f80 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  rd[] content */.
14f90 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
14fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
14fb0 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  th of a field */
14fc0 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20  ..  /* Assuming 
14fd0 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  the record conta
14fe0 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68  ins N fields, th
14ff0 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
15000 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20  looks.  ** like 
15010 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  this:.  **.  ** 
15020 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15030 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15040 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15050 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15060 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20  --------.  ** | 
15070 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20  hdr-size | type 
15080 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e  0 | type 1 | ...
15090 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61   | type N-1 | da
150a0 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61  ta0 | ... | data
150b0 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d   N-1 | .  ** ---
150c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
150d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
150e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
150f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15100 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  -----.  **.  ** 
15110 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e  Data(0) is taken
15120 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
15130 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65  1.  Data(1) come
15140 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  s from register 
15150 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f  P1+1.  ** and so
15160 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a   froth..  **.  *
15170 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c  * Each type fiel
15180 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65  d is a varint re
15190 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73  presenting the s
151a0 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68  erial type of th
151b0 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f  e .  ** correspo
151c0 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65  nding data eleme
151d0 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56  nt (see sqlite3V
151e0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29  dbeSerialType())
151f0 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73  . The.  ** hdr-s
15200 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73  ize field is als
15210 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68  o a varint which
15220 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66   is the offset f
15230 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
15240 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65  g.  ** of the re
15250 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20  cord to data0.. 
15260 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b   */.  nData = 0;
15270 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15280 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
15290 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  ata space */.  n
152a0 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Hdr = 0;        
152b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
152c0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
152d0 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20  pace */.  nZero 
152e0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
152f0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
15300 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
15310 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
15320 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
15330 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79  >p1;.  zAffinity
15340 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
15350 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
15360 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26   && pOp->p2>0 &&
15370 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c   pOp->p2+nField<
15380 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
15390 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61  rsor)+1 );.  pDa
153a0 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65  ta0 = &aMem[nFie
153b0 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20  ld];.  nField = 
153c0 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74  pOp->p2;.  pLast
153d0 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c   = &pData0[nFiel
153e0 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72  d-1];.  file_for
153f0 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74  mat = p->minWrit
15400 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20  eFileFormat;..  
15410 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20  /* Identify the 
15420 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
15430 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
15440 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20  ->p3<pOp->p1 || 
15450 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31  pOp->p3>=pOp->p1
15460 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f  +pOp->p2 );.  pO
15470 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
15480 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
15490 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
154a0 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68  ;..  /* Apply th
154b0 65 20 72 65 71 75 65 73 74 65 64 20 61 66 66 69  e requested affi
154c0 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75  nity to all inpu
154d0 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  ts.  */.  assert
154e0 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
154f0 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69  );.  if( zAffini
15500 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d  ty ){.    pRec =
15510 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b   pData0;.    do{
15520 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
15530 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a  nity(pRec++, *(z
15540 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63  Affinity++), enc
15550 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73  oding);.      as
15560 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
15570 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70  0]==0 || pRec<=p
15580 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69  Last );.    }whi
15590 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  le( zAffinity[0]
155a0 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f   );.  }..  /* Lo
155b0 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  op through the e
155c0 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c  lements that wil
155d0 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65  l make up the re
155e0 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20  cord to figure. 
155f0 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68   ** out how much
15600 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72   space is requir
15610 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ed for the new r
15620 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52  ecord..  */.  pR
15630 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f  ec = pLast;.  do
15640 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
15650 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
15660 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  ;.    serial_typ
15670 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
15680 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
15690 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
156a0 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
156b0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
156c0 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
156d0 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
156e0 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
156f0 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74 61  .      if( nData
15700 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
15710 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
15720 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20  Blob(pRec);.    
15730 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
15740 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
15750 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20  u.nZero;.       
15760 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e   len -= pRec->u.
15770 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20  nZero;.      }. 
15780 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b     }.    nData +
15790 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63  = len;.    testc
157a0 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
157b0 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73  ==127 );.    tes
157c0 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
157d0 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e  pe==128 );.    n
157e0 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79  Hdr += serial_ty
157f0 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71  pe<=127 ? 1 : sq
15800 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73  lite3VarintLen(s
15810 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 7d  erial_type);.  }
15820 77 68 69 6c 65 28 20 28 2d 2d 70 52 65 63 29 3e  while( (--pRec)>
15830 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20 20 2f 2a  =pData0 );..  /*
15840 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c   Add the initial
15850 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20 61   header varint a
15860 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a  nd total the siz
15870 65 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28  e */.  testcase(
15880 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20   nHdr==126 );.  
15890 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
158a0 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64  127 );.  if( nHd
158b0 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a  r<=126 ){.    /*
158c0 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
158d0 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20   */.    nHdr += 
158e0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
158f0 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20  /* Rare case of 
15900 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68  a really large h
15910 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61  eader */.    nVa
15920 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
15930 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
15940 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69     nHdr += nVari
15950 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72  nt;.    if( nVar
15960 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
15970 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64  tLen(nHdr) ) nHd
15980 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
15990 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20   = nHdr+nData;. 
159a0 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
159b0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
159c0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
159d0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
159e0 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
159f0 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72  ure the output r
15a00 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75  egister has a bu
15a10 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67  ffer large enoug
15a20 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a  h to store .  **
15a30 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
15a40 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   The output regi
15a50 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69  ster (pOp->p3) i
15a60 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f  s not allowed to
15a70 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20  .  ** be one of 
15a80 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
15a90 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65  ers (because the
15aa0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
15ab0 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
15ac0 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75  dbeMemGrow() cou
15ad0 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
15ae0 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
15af0 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
15b00 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
15b10 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
15b20 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  t)nByte, 0) ){. 
15b30 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
15b40 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64    }.  zNewRecord
15b50 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a   = (u8 *)pOut->z
15b60 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68  ;..  /* Write th
15b70 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20  e record */.  i 
15b80 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e  = putVarint32(zN
15b90 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b  ewRecord, nHdr);
15ba0 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61  .  j = nHdr;.  a
15bb0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
15bc0 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d  Last );.  pRec =
15bd0 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20   pData0;.  do{. 
15be0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
15bf0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15c00 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
15c10 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69  e_format);.    i
15c20 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
15c30 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
15c40 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
15c50 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
15c60 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 6a  al type */.    j
15c70 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
15c80 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65  erialPut(&zNewRe
15c90 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73  cord[j], pRec, s
15ca0 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20  erial_type); /* 
15cb0 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68  content */.  }wh
15cc0 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70  ile( (++pRec)<=p
15cd0 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Last );.  assert
15ce0 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61  ( i==nHdr );.  a
15cf0 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20  ssert( j==nByte 
15d00 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
15d10 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
15d20 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
15d30 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
15d40 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
15d50 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
15d60 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20  s = MEM_Blob;.  
15d70 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a  pOut->xDel = 0;.
15d80 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20    if( nZero ){. 
15d90 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f     pOut->u.nZero
15da0 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
15db0 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
15dc0 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75  _Zero;.  }.  pOu
15dd0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
15de0 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
15df0 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
15e00 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  er converted to 
15e10 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54  text */.  REGIST
15e20 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
15e30 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
15e40 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
15e50 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
15e60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75  ../* Opcode: Cou
15e70 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
15e80 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
15e90 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20  ]=count().**.** 
15ea0 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
15eb0 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
15ec0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
15ed0 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
15ee0 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
15ef0 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
15f00 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
15f10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
15f20 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
15f30 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
15f40 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
15f50 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
15f60 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
15f70 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
15f80 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
15f90 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72  r[pOp->p1]->pCur
15fa0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
15fb0 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
15fc0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
15fd0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
15fe0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
15ff0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
16000 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
16010 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
16020 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  y);.  pOut->u.i 
16030 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61  = nEntry;.  brea
16040 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
16050 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e  Opcode: Savepoin
16060 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  t P1 * * P4 *.**
16070 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73  .** Open, releas
16080 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68  e or rollback th
16090 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  e savepoint name
160a0 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50  d by parameter P
160b0 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20  4, depending.** 
160c0 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  on the value of 
160d0 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65  P1. To open a ne
160e0 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  w savepoint, P1=
160f0 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28  =0. To release (
16100 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78  commit) an.** ex
16110 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
16120 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72  , P1==1, or to r
16130 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74  ollback an exist
16140 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31  ing savepoint P1
16150 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ==2..*/.case OP_
16160 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  Savepoint: {.  i
16170 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16190 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70  * Value of P1 op
161a0 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20  erand */.  char 
161b0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
161c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
161d0 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20  me of savepoint 
161e0 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  */.  int nName;.
161f0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
16200 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  w;.  Savepoint *
16210 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61  pSavepoint;.  Sa
16220 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20  vepoint *pTmp;. 
16230 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
16240 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31  .  int ii;..  p1
16250 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e   = pOp->p1;.  zN
16260 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ame = pOp->p4.z;
16270 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ..  /* Assert th
16280 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65  at the p1 parame
16290 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c  ter is valid. Al
162a0 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65  so that if there
162b0 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a   is no open.  **
162c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
162d0 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20  en there cannot 
162e0 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74  be any savepoint
162f0 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  s. .  */.  asser
16300 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
16310 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f  t==0 || db->auto
16320 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
16330 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50  ssert( p1==SAVEP
16340 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d  OINT_BEGIN||p1==
16350 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
16360 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  E||p1==SAVEPOINT
16370 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61  _ROLLBACK );.  a
16380 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
16390 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54  point || db->isT
163a0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
163b0 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  int==0 );.  asse
163c0 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
163d0 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20  ntCount(db) );. 
163e0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
163f0 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20  eader );..  if( 
16400 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
16410 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64  GIN ){.    if( d
16420 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
16430 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
16440 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
16450 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
16460 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
16470 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
16480 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
16490 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
164a0 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
164b0 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
164c0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
164d0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
164e0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
164f0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
16500 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
16510 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
16520 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
16530 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
16540 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
16550 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
16560 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
16570 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64  0(zName);..#ifnd
16580 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
16590 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20  IRTUALTABLE.    
165a0 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69    /* This call i
165b0 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69  s Ok even if thi
165c0 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  s savepoint is a
165d0 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61  ctually a transa
165e0 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73  ction.      ** s
165f0 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68  avepoint (and th
16600 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e  erefore should n
16610 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70  ot prompt xSavep
16620 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b  oint()) callback
16630 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74  s..      ** If t
16640 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
16650 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62  tion savepoint b
16660 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20  eing opened, it 
16670 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20  is guaranteed.  
16680 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
16690 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72  db->aVTrans[] ar
166a0 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a  ray is empty.  *
166b0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
166c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
166d0 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73  0 || db->nVTrans
166e0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20  ==0 );.      rc 
166f0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
16700 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
16710 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20  OINT_BEGIN,.    
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
16740 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e  nStatement+db->n
16750 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
16760 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16770 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
16780 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
16790 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20  endif..      /* 
167a0 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
167b0 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
167c0 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
167d0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
167e0 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
167f0 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
16800 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
16810 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
16820 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
16830 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
16840 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
16850 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
16860 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
16870 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
16880 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
16890 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
168a0 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
168b0 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
168c0 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
168d0 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
168e0 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
168f0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
16900 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
16910 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
16920 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
16930 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
16940 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
16950 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
16960 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
16970 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a  .        }.    .
16980 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
16990 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
169a0 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
169b0 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
169c0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
169d0 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
169e0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
169f0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
16a00 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
16a10 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
16a20 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
16a30 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
16a40 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
16a50 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  redImmCons = db-
16a60 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
16a70 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
16a80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
16a90 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
16aa0 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
16ab0 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
16ac0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
16ad0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
16ae0 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
16af0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
16b00 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
16b10 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
16b20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
16b30 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
16b40 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
16b50 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
16b60 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
16b70 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
16b80 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
16b90 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
16ba0 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
16bb0 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
16bc0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
16bd0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
16be0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
16bf0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
16c00 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  db, "no such sav
16c10 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
16c20 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
16c30 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
16c40 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
16c50 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20  nVdbeWrite>0 && 
16c60 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
16c70 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f  LEASE ){.      /
16c80 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  * It is not poss
16c90 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20  ible to release 
16ca0 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70  (commit) a savep
16cb0 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72  oint if there ar
16cc0 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69  e .      ** acti
16cd0 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65  ve write stateme
16ce0 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nts..      */.  
16cf0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16d00 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
16d10 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22  , db, .        "
16d20 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73  cannot release s
16d30 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
16d40 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
16d50 67 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b 0a  gress".      );.
16d60 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
16d70 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
16d80 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74  e{..      /* Det
16d90 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
16da0 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20  r not this is a 
16db0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
16dc0 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20  point. If so,.  
16dd0 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20      ** and this 
16de0 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  is a RELEASE com
16df0 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63  mand, then the c
16e00 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
16e10 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  on .      ** is 
16e20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20  committed. .    
16e30 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69    */.      int i
16e40 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70  sTransaction = p
16e50 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
16e60 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61  ==0 && db->isTra
16e70 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
16e80 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54  t;.      if( isT
16e90 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31  ransaction && p1
16ea0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
16eb0 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ASE ){.        i
16ec0 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
16ed0 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
16ee0 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
16ef0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
16f00 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
16f10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
16f20 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
16f30 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
16f40 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
16f50 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
16f60 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70  {.          p->p
16f70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
16f80 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16f90 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
16fa0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
16fb0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
16fc0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
16fd0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
16fe0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
16ff0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
17000 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nt = 0;.        
17010 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20  rc = p->rc;.    
17020 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
17030 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   iSavepoint = db
17040 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69  ->nSavepoint - i
17050 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20  Savepoint - 1;. 
17060 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
17070 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
17080 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  K ){.          f
17090 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
170a0 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
170b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
170c0 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
170d0 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
170e0 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  Bt, SQLITE_ABORT
170f0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
17100 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17110 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
17120 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
17130 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
17140 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
17150 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
17160 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
17170 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
17180 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17190 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
171a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
171b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
171c0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
171d0 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
171e0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
171f0 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26  K && (db->flags&
17200 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
17210 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20  nges)!=0 ){.    
17220 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
17230 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
17240 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20  ments(db);.     
17250 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
17260 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
17270 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
17280 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
17290 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20   = (db->flags | 
172a0 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
172b0 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d  nges);.        }
172c0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
172d0 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
172e0 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
172f0 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
17300 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
17310 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
17320 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
17330 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
17340 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
17350 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
17360 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
17370 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
17380 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
17390 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
173a0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
173b0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
173c0 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
173d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
173e0 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
173f0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
17400 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
17410 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
17420 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
17430 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
17440 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
17450 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20  g operated on . 
17460 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20       ** too. If 
17470 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b  it is a ROLLBACK
17480 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68   TO, then set th
17490 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  e number of defe
174a0 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63  rred .      ** c
174b0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
174c0 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20  ions present in 
174d0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
174e0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
174f0 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74  .      ** when t
17500 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73  he savepoint was
17510 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20   created.  */.  
17520 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
17530 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
17540 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
17550 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
17560 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
17570 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
17580 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
17590 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
175a0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
175b0 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
175c0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
175d0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
175e0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
175f0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
17600 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
17610 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  e{.        db->n
17620 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70  DeferredCons = p
17630 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
17640 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
17650 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
17660 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  mmCons = pSavepo
17670 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  int->nDeferredIm
17680 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a  mCons;.      }..
17690 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
176a0 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
176b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
176c0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
176d0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
176e0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
176f0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
17700 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17710 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
17720 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65      }.  }..  bre
17730 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17740 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
17750 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
17760 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
17770 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
17780 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
17790 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
177a0 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
177b0 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
177c0 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
177d0 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
177e0 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
177f0 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
17800 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
17810 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
17820 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
17830 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
17840 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
17850 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
17860 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
17870 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
17880 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
17890 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
178a0 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
178b0 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
178c0 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
178d0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
178e0 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e   iRollback;.  in
178f0 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64  t turnOnAC;..  d
17900 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17910 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52   = pOp->p1;.  iR
17920 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70  ollback = pOp->p
17930 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20  2;.  turnOnAC = 
17940 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17950 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f  t && !db->autoCo
17960 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20  mmit;.  assert( 
17970 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17980 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
17990 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
179a0 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
179b0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
179c0 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
179d0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
179e0 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b  nVdbeActive>0 );
179f0 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
17a00 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
17a10 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ive */.  assert(
17a20 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
17a30 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74 75  ..#if 0.  if( tu
17a40 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62  rnOnAC && iRollb
17a50 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
17a60 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20 20 20  Active>1 ){.    
17a70 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
17a80 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
17a90 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64  s a ROLLBACK and
17aa0 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20   other VMs are. 
17ab0 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e     ** still runn
17ac0 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73  ing, and a trans
17ad0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
17ae0 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  , return an erro
17af0 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20  r indicating.   
17b00 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68   ** that the oth
17b10 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
17b20 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
17b30 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
17b40 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
17b50 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
17b60 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  t rollback trans
17b70 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
17b80 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17b90 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17ba0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
17bb0 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 0a  E_BUSY;.  }else.
17bc0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75 72  #endif.  if( tur
17bd0 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62  nOnAC && !iRollb
17be0 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
17bf0 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f  Write>0 ){.    /
17c00 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
17c10 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
17c20 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
17c30 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
17c40 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72  ing.    ** retur
17c50 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
17c60 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
17c70 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
17c80 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
17c90 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
17ca0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
17cb0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
17cc0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
17cd0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
17ce0 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17cf0 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17d00 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
17d10 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
17d20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
17d30 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
17d40 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
17d50 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
17d60 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
17d70 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
17d80 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
17d90 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
17da0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
17db0 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
17dc0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17dd0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
17de0 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
17df0 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
17e00 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
17e10 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17e20 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
17e30 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
17e40 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
17e50 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
17e60 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
17e70 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
17e80 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
17e90 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
17ea0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
17eb0 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
17ec0 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
17ed0 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  it);.        p->
17ee0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
17ef0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67  _BUSY;.        g
17f00 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17f10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17f20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
17f30 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
17f40 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
17f50 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
17f60 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
17f70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17f80 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
17f90 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
17fa0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17fb0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
17fc0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17fd0 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
17fe0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
17ff0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
18000 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  b,.        (!des
18010 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
18020 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
18030 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
18040 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
18050 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f  ":(.        (iRo
18060 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20  llback)?"cannot 
18070 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72  rollback - no tr
18080 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
18090 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ive":.          
180a0 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
180b0 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61   commit - no tra
180c0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
180d0 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ve"));.         
180e0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
180f0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72  _ERROR;.  }.  br
18100 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18110 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50  e: Transaction P
18120 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
18130 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
18140 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62  saction on datab
18150 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e  ase P1 if a tran
18160 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61  saction is not a
18170 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65  lready.** active
18180 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  ..** If P2 is no
18190 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
181a0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
181b0 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20   is started, or 
181c0 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72  if a .** read-tr
181d0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72  ansaction is alr
181e0 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20  eady active, it 
181f0 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61  is upgraded to a
18200 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18210 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  on..** If P2 is 
18220 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
18230 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
18240 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   started..**.** 
18250 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
18260 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
18270 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
18280 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
18290 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
182a0 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
182b0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
182c0 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
182d0 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
182e0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
182f0 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
18300 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
18310 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
18320 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
18330 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
18340 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
18350 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
18360 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
18370 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
18380 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
18390 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
183a0 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
183b0 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
183c0 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
183d0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
183e0 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
183f0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
18400 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
18410 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
18420 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
18430 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
18440 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
18450 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
18460 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
18470 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
18480 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
18490 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
184a0 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
184b0 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
184c0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
184d0 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61  n allows the cha
184e0 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69  nges made by thi
184f0 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20  s.** VDBE to be 
18500 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65  rolled back afte
18510 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f  r an error witho
18520 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c  ut having to rol
18530 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e  l back the.** en
18540 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
18550 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73  . If no error is
18560 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68   encountered, th
18570 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
18580 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20  saction.** will 
18590 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f  automatically co
185a0 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44  mmit when the VD
185b0 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20  BE halts..**.** 
185c0 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68  If P5!=0 then th
185d0 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63  is opcode also c
185e0 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61  hecks the schema
185f0 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20   cookie against 
18600 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63  P3.** and the sc
18610 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
18620 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20  counter against 
18630 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  P4..** The cooki
18640 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
18650 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
18660 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18670 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
18680 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
18690 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
186a0 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
186b0 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
186c0 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
186d0 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
186e0 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
186f0 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74  he schema.  If t
18700 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f  he schema.** coo
18710 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72  kie in P3 differ
18720 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d  s from the schem
18730 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20  a cookie in the 
18740 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
18750 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68  or.** if the sch
18760 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
18770 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66  ounter in P4 dif
18780 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75  fers from the cu
18790 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74  rrent.** generat
187a0 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65  ion counter, the
187b0 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45  n an SQLITE_SCHE
187c0 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73  MA error is rais
187d0 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e  ed and execution
187e0 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20  .** halts.  The 
187f0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77  sqlite3_step() w
18800 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  rapper function 
18810 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65  might then repre
18820 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74  pare the.** stat
18830 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20  ement and rerun 
18840 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  it from the begi
18850 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nning..*/.case O
18860 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
18870 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
18880 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
18890 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72  t iGen;..  asser
188a0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
188b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
188c0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70  readOnly==0 || p
188d0 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61  Op->p2==0 );.  a
188e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
188f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
18900 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
18910 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
18920 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
18930 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  p1) );.  if( pOp
18940 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61  ->p2 && (db->fla
18950 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72  gs & SQLITE_Quer
18960 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20  yOnly)!=0 ){.   
18970 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41   rc = SQLITE_REA
18980 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20  DONLY;.    goto 
18990 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
189a0 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20  or;.  }.  pBt = 
189b0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
189c0 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
189d0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
189e0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
189f0 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
18a00 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
18a10 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
18a20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
18a30 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
18a40 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18a50 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18a60 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
18a70 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18a80 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
18a90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18aa0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
18ab0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
18ac0 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
18ad0 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
18ae0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
18af0 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
18b00 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
18b10 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
18b20 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
18b30 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
18b40 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
18b50 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
18b60 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
18b70 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
18b80 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
18b90 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
18ba0 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
18bb0 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
18bc0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
18bd0 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
18be0 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
18bf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
18c00 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
18c10 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
18c20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
18c30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
18c40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18c50 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18c60 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
18c70 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
18c80 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
18c90 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
18ca0 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
18cb0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
18cc0 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
18cd0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
18ce0 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
18cf0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
18d00 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
18d10 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
18d20 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
18d30 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
18d40 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
18d50 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
18d60 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
18d70 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
18d80 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
18d90 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
18da0 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  fImmCons = db->n
18db0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
18dc0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47  .    }..    /* G
18dd0 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61  ather the schema
18de0 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
18df0 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 2a 2f 0a  for checking */.
18e00 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
18e10 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52  GetMeta(pBt, BTR
18e20 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
18e30 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  N, (u32 *)&iMeta
18e40 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62  );.    iGen = db
18e50 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
18e60 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74  Schema->iGenerat
18e70 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ion;.  }else{.  
18e80 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d    iGen = iMeta =
18e90 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74   0;.  }.  assert
18ea0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
18eb0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
18ec0 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70  INT32 );.  if( p
18ed0 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61  Op->p5 && (iMeta
18ee0 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65  !=pOp->p3 || iGe
18ef0 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b  n!=pOp->p4.i) ){
18f00 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
18f10 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
18f20 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
18f30 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
18f40 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
18f50 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
18f60 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
18f70 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
18f80 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
18f90 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
18fa0 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
18fb0 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
18fc0 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
18fd0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
18fe0 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
18ff0 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
19000 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
19010 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
19020 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
19030 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
19040 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
19050 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
19060 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
19070 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
19080 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
19090 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
190a0 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
190b0 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
190c0 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
190d0 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
190e0 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
190f0 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
19100 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
19110 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
19120 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
19130 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
19140 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
19150 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
19160 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
19170 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
19180 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
19190 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
191a0 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
191b0 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
191c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
191d0 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
191e0 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
191f0 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
19200 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
19210 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
19220 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
19230 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
19240 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
19250 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19260 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
19270 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
19280 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
19290 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c  setOneSchema(db,
192a0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
192b0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
192c0 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 1;.    rc = SQ
192d0 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
192e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
192f0 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
19300 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
19310 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
19320 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
19330 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
19340 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
19350 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
19360 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
19370 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
19380 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
19390 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
193a0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
193b0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
193c0 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
193d0 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
193e0 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
193f0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
19400 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
19410 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
19420 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
19430 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
19440 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
19450 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
19460 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
19470 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
19480 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
19490 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
194a0 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
194b0 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
194c0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
194d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
194e0 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
194f0 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
19500 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
19510 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
19520 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62  iMeta;.  int iDb
19530 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b  ;.  int iCookie;
19540 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
19550 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44  IsReader );.  iD
19560 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  b = pOp->p1;.  i
19570 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  Cookie = pOp->p3
19580 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
19590 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p3<SQLITE_N_BTR
195a0 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
195b0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
195c0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
195d0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
195e0 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20  iDb].pBt!=0 );. 
195f0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
19600 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19610 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c  , iDb) );..  sql
19620 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
19630 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
19640 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
19650 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
19660 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b  ut->u.i = iMeta;
19670 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19680 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69  Opcode: SetCooki
19690 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
196a0 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
196b0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
196c0 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74  er P3 (interpret
196d0 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
196e0 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65  ).** into cookie
196f0 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61   number P2 of da
19700 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d  tabase P1.  P2==
19710 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
19720 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32  version.  .** P2
19730 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
19740 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d  ase format. P2==
19750 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
19760 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
19770 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73   .** size, and s
19780 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
19790 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
197a0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
197b0 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64  ==1 is the .** d
197c0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
197d0 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f  d to store tempo
197e0 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
197f0 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** A transaction
19800 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
19810 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e   before executin
19820 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
19830 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f  /.case OP_SetCoo
19840 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kie: {       /* 
19850 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62  in3 */.  Db *pDb
19860 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
19870 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p2<SQLITE_N_BTR
19880 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
19890 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
198a0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
198b0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
198c0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
198d0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
198e0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
198f0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
19900 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
19910 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
19920 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
19930 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
19940 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
19950 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70  xHeld(db, pOp->p
19960 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20  1, 0) );.  pIn3 
19970 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
19980 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
19990 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
199a0 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74  3);.  /* See not
199b0 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
199c0 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
199d0 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
199e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
199f0 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
19a00 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74  t, pOp->p2, (int
19a10 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69  )pIn3->u.i);.  i
19a20 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
19a30 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
19a40 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
19a50 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
19a60 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
19a70 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
19a80 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
19a90 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
19aa0 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
19ab0 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b   (int)pIn3->u.i;
19ac0 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
19ad0 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
19ae0 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
19af0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
19b00 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
19b10 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
19b20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
19b30 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
19b40 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
19b50 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75  file_format = (u
19b60 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d  8)pIn3->u.i;.  }
19b70 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
19b80 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
19b90 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
19ba0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
19bb0 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
19bc0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
19bd0 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
19be0 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
19bf0 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
19c00 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
19c10 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
19c20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
19c30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19c40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
19c50 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
19c60 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
19c70 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
19c80 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
19c90 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
19ca0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
19cb0 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
19cc0 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
19cd0 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
19ce0 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
19cf0 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
19d00 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
19d10 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
19d20 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
19d30 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
19d40 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
19d50 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
19d60 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
19d70 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
19d80 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
19d90 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
19da0 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
19db0 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
19dc0 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
19dd0 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
19de0 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
19df0 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
19e00 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
19e10 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
19e20 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
19e30 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
19e40 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
19e50 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73  If P5!=0 then us
19e60 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
19e70 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20   register P2 as 
19e80 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e  the root page, n
19e90 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ot.** the value 
19ea0 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
19eb0 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62  .** There will b
19ec0 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e  e a read lock on
19ed0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68   the database wh
19ee0 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20  enever there is 
19ef0 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f  an.** open curso
19f00 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62  r.  If the datab
19f10 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64  ase was unlocked
19f20 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69   prior to this i
19f30 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68  nstruction.** th
19f40 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69  en a read lock i
19f50 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61  s acquired as pa
19f60 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  rt of this instr
19f70 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a  uction.  A read.
19f80 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f  ** lock allows o
19f90 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74  ther processes t
19fa0 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
19fb0 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74  ase but prohibit
19fc0 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70  s.** any other p
19fd0 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69  rocess from modi
19fe0 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  fying the databa
19ff0 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f  se.  The read lo
1a000 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65  ck is.** release
1a010 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f  d when all curso
1a020 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20  rs are closed.  
1a030 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
1a040 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20  ion attempts.** 
1a050 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f  to get a read lo
1a060 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68  ck but fails, th
1a070 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61  e script termina
1a080 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53  tes with an.** S
1a090 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
1a0a0 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   code..**.** 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 2e 0a 2a 2a 0a 2a 2a  the table..**.**
1a200 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57   See also: OpenW
1a210 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a  rite, ReopenIdx.
1a220 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
1a230 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33  openIdx P1 P2 P3
1a240 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1a250 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1a260 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  P3.**.** The Reo
1a270 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f  penIdx opcode wo
1a280 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
1a290 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74   ReadOpen except
1a2a0 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a   that it first.*
1a2b0 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
1a2c0 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e  if the cursor on
1a2d0 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f   P1 is already o
1a2e0 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20  pen with a root 
1a2f0 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  page.** number o
1a300 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20 69  f P2 and if it i
1a310 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65  s this opcode be
1a320 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  comes a no-op.  
1a330 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a  In other words,.
1a340 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
1a350 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1a360 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20  , do not reopen 
1a370 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  it..**.** The Re
1a380 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d  openIdx opcode m
1a390 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
1a3a0 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77  with P5==0 and w
1a3b0 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20  ith P4 being.** 
1a3c0 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a  a P4_KEYINFO obj
1a3d0 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ect.  Furthermor
1a3e0 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  e, the P3 value 
1a3f0 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
1a400 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68   as.** every oth
1a410 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20  er ReopenIdx or 
1a420 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65  OpenRead for the
1a430 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d   same cursor num
1a440 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74  ber..**.** See t
1a450 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f  he OpenRead opco
1a460 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  de documentation
1a470 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
1a480 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1a490 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
1a4a0 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
1a4b0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1a4c0 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1a4d0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
1a4e0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
1a4f0 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
1a500 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
1a510 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
1a520 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
1a530 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
1a540 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1a550 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
1a560 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
1a570 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1a580 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1a590 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1a5a0 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1a5b0 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1a5c0 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1a5d0 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1a5e0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1a5f0 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
1a600 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
1a610 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
1a620 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1a630 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1a640 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1a650 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
1a660 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
1a670 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1a680 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1a690 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
1a6a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1a6b0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
1a6c0 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  , or to the.** l
1a6d0 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20  argest index of 
1a6e0 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  any column of th
1a6f0 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
1a700 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a  actually used..*
1a710 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1a720 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74  ction works just
1a730 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65   like OpenRead e
1a740 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1a750 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a  ens the cursor.*
1a760 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20  * in read/write 
1a770 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76  mode.  For a giv
1a780 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  en table, there 
1a790 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f  can be one or mo
1a7a0 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20  re read-only.** 
1a7b0 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e  cursors or a sin
1a7c0 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63  gle read/write c
1a7d0 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f  ursor but not bo
1a7e0 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  th..**.** See al
1a7f0 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a  so OpenRead..*/.
1a800 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64  case OP_ReopenId
1a810 78 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  x: {.  VdbeCurso
1a820 72 20 2a 70 43 75 72 3b 0a 0a 20 20 61 73 73 65  r *pCur;..  asse
1a830 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1a840 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a850 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1a860 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  NFO );.  pCur = 
1a870 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1a880 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26 26  ];.  if( pCur &&
1a890 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d   pCur->pgnoRoot=
1a8a0 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  =pOp->p2 ){.    
1a8b0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44  assert( pCur->iD
1a8c0 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20  b==pOp->p3 );   
1a8d0 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64     /* Guaranteed
1a8e0 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e   by the code gen
1a8f0 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 62 72  erator */.    br
1a900 65 61 6b 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  eak;.  }.  /* If
1a910 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1a920 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1a930 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1a940 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1a950 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1a960 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1a970 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1a980 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1a990 7d 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  }.case OP_OpenRe
1a9a0 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
1a9b0 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  Write: {.  int n
1a9c0 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
1a9d0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
1a9e0 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
1a9f0 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
1aa00 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
1aa10 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1aa20 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
1aa30 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28  sert( (pOp->p5&(
1aa40 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f  OPFLAG_P2ISREG|O
1aa50 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d  PFLAG_BULKCSR))=
1aa60 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73  =pOp->p5 );.  as
1aa70 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1aa80 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1aa90 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  || pOp->p5==0 );
1aaa0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1aab0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1aac0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1aad0 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
1aae0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1aaf0 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20  _ReopenIdx.     
1ab00 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f       || p->readO
1ab10 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1ab20 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
1ab30 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1ab40 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BORT;.    break;
1ab50 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
1ab60 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
1ab70 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
1ab80 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
1ab90 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
1aba0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1abb0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1abc0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1abd0 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
1abe0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1abf0 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
1ac00 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
1ac10 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
1ac20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1ac30 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
1ac40 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b  .    wrFlag = 1;
1ac50 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
1ac60 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
1ac70 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
1ac80 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  );.    if( pDb->
1ac90 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1aca0 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69  rmat < p->minWri
1acb0 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a  teFileFormat ){.
1acc0 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74        p->minWrit
1acd0 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44  eFileFormat = pD
1ace0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1acf0 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20  _format;.    }. 
1ad00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c   }else{.    wrFl
1ad10 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ag = 0;.  }.  if
1ad20 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1ad30 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20  AG_P2ISREG ){.  
1ad40 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29    assert( p2>0 )
1ad50 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
1ad60 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
1ad70 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49  ursor) );.    pI
1ad80 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  n2 = &aMem[p2];.
1ad90 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1ada0 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a  sValid(pIn2) );.
1adb0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1adc0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
1add0 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  nt)!=0 );.    sq
1ade0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1adf0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
1ae00 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32    p2 = (int)pIn2
1ae10 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68  ->u.i;.    /* Th
1ae20 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79  e p2 value alway
1ae30 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70  s comes from a p
1ae40 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61  rior OP_CreateTa
1ae50 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20  ble opcode and. 
1ae60 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64     ** that opcod
1ae70 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65  e will always se
1ae80 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74  t the p2 value t
1ae90 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65  o 2 or more or e
1aea0 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a  lse fail..    **
1aeb0 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61   If there were a
1aec0 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72   failure, the pr
1aed0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
1aee0 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74   would have halt
1aef0 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65  ed.    ** before
1af00 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69   reaching this i
1af10 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20  nstruction. */. 
1af20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c     if( NEVER(p2<
1af30 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20  2) ) {.      rc 
1af40 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
1af50 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
1af60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1af70 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
1af80 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1af90 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1afa0 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1afb0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1afc0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1afd0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1afe0 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1aff0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1b000 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1b010 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1b020 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e  Field+pKeyInfo->
1b030 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  nXField;.  }else
1b040 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1b050 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
1b060 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1b070 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
1b080 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1b090 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
1b0a0 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63  ld>=0 );.  testc
1b0b0 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29  ase( nField==0 )
1b0c0 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68  ;  /* Table with
1b0d0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1b0e0 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67   KEY and nothing
1b0f0 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20   else */.  pCur 
1b100 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1b110 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
1b120 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20  eld, iDb, 1);.  
1b130 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
1b140 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
1b150 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
1b160 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65    pCur->isOrdere
1b170 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70  d = 1;.  pCur->p
1b180 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 20 20  gnoRoot = p2;.  
1b190 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b1a0 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
1b1b0 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
1b1c0 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29  , pCur->pCursor)
1b1d0 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e  ;.  pCur->pKeyIn
1b1e0 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20  fo = pKeyInfo;. 
1b1f0 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1b200 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42  BULKCSR==BTREE_B
1b210 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c  ULKLOAD );.  sql
1b220 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
1b230 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72 73  ints(pCur->pCurs
1b240 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  or, (pOp->p5 & O
1b250 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b  PFLAG_BULKCSR));
1b260 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20  ..  /* Since it 
1b270 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f  performs no memo
1b280 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72  ry allocation or
1b290 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61   IO, the only va
1b2a0 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a 20 73 71  lue that.  ** sq
1b2b0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1b2c0 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 69 73  () may return is
1b2d0 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20   SQLITE_OK. */. 
1b2e0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1b2f0 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20  ITE_OK );..  /* 
1b300 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
1b310 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61  or.isTable varia
1b320 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65  ble. Previous ve
1b330 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53  rsions of.  ** S
1b340 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68  QLite used to ch
1b350 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d  eck if the root-
1b360 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20  page flags were 
1b370 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69  sane at this poi
1b380 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f  nt.  ** and repo
1b390 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  rt database corr
1b3a0 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77  uption if they w
1b3b0 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69  ere not, but thi
1b3c0 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a  s check has.  **
1b3d0 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74   since moved int
1b3e0 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  o the btree laye
1b3f0 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d  r.  */  .  pCur-
1b400 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
1b410 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
1b420 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  FO;.  break;.}..
1b430 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
1b440 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a  phemeral P1 P2 *
1b450 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1b460 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1b470 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1b480 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
1b490 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
1b4a0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
1b4b0 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
1b4c0 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
1b4d0 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
1b4e0 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
1b4f0 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
1b500 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
1b510 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
1b520 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
1b530 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
1b540 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
1b550 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1b560 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
1b570 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
1b580 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
1b590 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
1b5a0 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
1b5b0 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
1b5c0 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
1b5d0 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
1b5e0 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
1b5f0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
1b600 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
1b610 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
1b620 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
1b630 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
1b640 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
1b650 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
1b660 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
1b670 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
1b680 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
1b690 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
1b6a0 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
1b6b0 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
1b6c0 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
1b6d0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1b6e0 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
1b6f0 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
1b700 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
1b710 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
1b720 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
1b730 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
1b740 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1b750 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  n=P2.**.** This 
1b760 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1b770 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1b780 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1b790 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1b7a0 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1b7b0 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1b7c0 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1b7d0 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1b7e0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1b7f0 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1b800 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1b810 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1b820 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1b830 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1b840 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1b850 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1b860 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b870 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  Cx;.  KeyInfo *p
1b880 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74  KeyInfo;..  stat
1b890 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73  ic const int vfs
1b8a0 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
1b8b0 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
1b8c0 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
1b8d0 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
1b8e0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1b8f0 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
1b900 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1b910 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
1b920 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1b930 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
1b940 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b950 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1b960 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1b970 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1b980 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1b990 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1b9a0 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1b9b0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1b9c0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1b9d0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1b9e0 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1b9f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ba00 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1ba10 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1ba20 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1ba30 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1ba40 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1ba50 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1ba60 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1ba70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1ba80 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1ba90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1baa0 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1bab0 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1bac0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1bad0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1bae0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1baf0 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1bb00 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1bb10 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1bb20 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1bb30 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1bb40 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1bb50 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1bb60 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1bb70 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1bb80 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1bb90 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1bba0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1bbb0 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1bbc0 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1bbd0 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1bbe0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1bbf0 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  ( (pKeyInfo = pO
1bc00 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1bc10 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1bc20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1bc30 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1bc40 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1bc50 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1bc60 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1bc70 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1bc80 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1bc90 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1bca0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1bcb0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1bcc0 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1bcd0 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1bce0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1bcf0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1bd00 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1bd10 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1bd20 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1bd30 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1bd40 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1bd50 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1bd60 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1bd70 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1bd80 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78  1, pKeyInfo, pCx
1bd90 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1bda0 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
1bdb0 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1bdc0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1bdd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1bde0 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d  rsor(pCx->pBt, M
1bdf0 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30  ASTER_ROOT, 1, 0
1be00 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1be10 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1be20 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
1be30 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65   }.  pCx->isOrde
1be40 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1be50 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1be60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1be70 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1be80 70 65 6e 20 50 31 20 50 32 20 2a 20 50 34 20 2a  pen P1 P2 * P4 *
1be90 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1bea0 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50  de works like OP
1beb0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65  _OpenEphemeral e
1bec0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1bed0 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65  ens.** a transie
1bee0 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73  nt index that is
1bef0 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65   specifically de
1bf00 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c  signed to sort l
1bf10 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75  arge.** tables u
1bf20 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c  sing an external
1bf30 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f   merge-sort algo
1bf40 72 69 74 68 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rithm..*/.case O
1bf50 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a  P_SorterOpen: {.
1bf60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1bf70 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1bf80 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1bf90 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1bfa0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1bfb0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1bfc0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1bfd0 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  -1, 1);.  if( pC
1bfe0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1bff0 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49  em;.  pCx->pKeyI
1c000 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1c010 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
1c020 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1c030 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73  >db==db );.  ass
1c040 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1c050 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1c060 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
1c070 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74  e3VdbeSorterInit
1c080 28 64 62 2c 20 70 43 78 29 3b 0a 20 20 62 72 65  (db, pCx);.  bre
1c090 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1c0a0 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20  : OpenPseudo P1 
1c0b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
1c0c0 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e  opsis: P3 column
1c0d0 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  s in r[P2].**.**
1c0e0 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
1c0f0 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74  or that points t
1c100 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74  o a fake table t
1c110 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  hat contains a s
1c120 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20  ingle.** row of 
1c130 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65  data.  The conte
1c140 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72  nt of that one r
1c150 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  ow is the conten
1c160 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72  t of memory.** r
1c170 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20  egister P2.  In 
1c180 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72  other words, cur
1c190 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61  sor P1 becomes a
1c1a0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
1c1b0 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e  .** MEM_Blob con
1c1c0 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69  tent contained i
1c1d0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
1c1e0 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61  *.** A pseudo-ta
1c1f0 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74  ble created by t
1c200 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
1c210 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e  ed to hold a sin
1c220 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75  gle.** row outpu
1c230 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65  t from the sorte
1c240 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f  r so that the ro
1c250 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f  w can be decompo
1c260 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69  sed into.** indi
1c270 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75  vidual columns u
1c280 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75  sing the OP_Colu
1c290 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20  mn opcode.  The 
1c2a0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1c2b0 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  .** is the only 
1c2c0 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68  cursor opcode th
1c2d0 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20  at works with a 
1c2e0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
1c2f0 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75  .** P3 is the nu
1c300 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1c310 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  n the records th
1c320 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  at will be store
1c330 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75  d by.** the pseu
1c340 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
1c350 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a  e OP_OpenPseudo:
1c360 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1c370 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
1c380 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1c390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1c3a0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1c3b0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1c3c0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1c3d0 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28  3, -1, 0);.  if(
1c3e0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1c3f0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1c400 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1c410 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1c420 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
1c430 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
1c440 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c450 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b  5==0 );.  break;
1c460 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
1c470 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
1c480 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
1c490 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
1c4a0 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
1c4b0 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
1c4c0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
1c4d0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1c4e0 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
1c4f0 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
1c500 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c510 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1c520 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1c530 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
1c540 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
1c550 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
1c560 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1c570 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
1c580 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
1c590 6b 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  kGE P1 P2 P3 P4 
1c5a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1c5b0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1c5c0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1c5d0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1c5e0 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1c5f0 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1c600 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1c610 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1c620 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b  ster P3 as the k
1c630 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50  ey.  If cursor P
1c640 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1c650 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1c660 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1c670 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1c680 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1c690 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1c6a0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1c6b0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1c6c0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1c6d0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1c6e0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1c6f0 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1c700 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1c710 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1c720 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1c730 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1c740 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1c750 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1c760 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1c770 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1c780 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1c790 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1c7a0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1c7b0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1c7c0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1c7d0 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
1c7e0 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
1c7f0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1c800 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1c810 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1c820 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1c830 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1c840 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1c850 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1c860 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1c870 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
1c880 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1c890 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34  ekGT P1 P2 P3 P4
1c8a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1c8b0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1c8c0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1c8d0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1c8e0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1c8f0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1c900 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1c910 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1c920 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1c930 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1c940 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1c950 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1c960 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1c970 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1c980 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1c990 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1c9a0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1c9b0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1c9c0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1c9d0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1c9e0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1c9f0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1ca00 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1ca10 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
1ca20 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1ca30 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
1ca40 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
1ca50 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1ca60 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1ca70 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1ca80 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1ca90 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1caa0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1cab0 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
1cac0 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1cad0 20 62 65 67 69 6e 69 6e 67 20 74 6f 77 61 72 64   begining toward
1cae0 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1caf0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1cb00 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1cb10 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1cb20 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1cb30 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1cb40 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1cb50 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
1cb60 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1cb70 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32  de: SeekLT P1 P2
1cb80 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e   P3 P4 * .** Syn
1cb90 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1cba0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1cbb0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1cbc0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1cbd0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1cbe0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1cbf0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1cc00 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1cc10 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1cc20 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1cc30 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1cc40 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1cc50 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1cc60 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1cc70 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1cc80 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1cc90 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1cca0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1ccb0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1ccc0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1ccd0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1cce0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1ccf0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
1cd00 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1cd10 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1cd20 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
1cd30 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1cd40 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1cd50 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1cd60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1cd70 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1cd80 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1cd90 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1cda0 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1cdb0 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1cdc0 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1cdd0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1cde0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1cdf0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1ce00 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1ce10 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1ce20 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1ce30 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1ce40 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1ce50 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50  ode: SeekLE P1 P
1ce60 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1ce70 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1ce80 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1ce90 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1cea0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1ceb0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1cec0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1ced0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1cee0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1cef0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1cf00 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1cf10 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1cf20 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1cf30 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1cf40 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1cf50 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1cf60 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1cf70 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1cf80 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1cf90 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1cfa0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1cfb0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1cfc0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1cfd0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1cfe0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1cff0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1d000 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1d010 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1d020 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1d030 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1d040 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1d050 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1d060 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1d070 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1d080 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1d090 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1d0a0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1d0b0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1d0c0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1d0d0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1d0e0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1d0f0 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1d100 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
1d110 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1d120 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1d130 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
1d140 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a  .case OP_SeekLT:
1d150 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1d160 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1d170 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20  _SeekLE:        
1d180 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1d190 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a  .case OP_SeekGE:
1d1a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1d1b0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1d1c0 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20  _SeekGT: {      
1d1d0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1d1e0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
1d1f0 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73  t oc;.  VdbeCurs
1d200 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b  or *pC;.  Unpack
1d210 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e  edRecord r;.  in
1d220 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20  t nField;.  i64 
1d230 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68  iKey;      /* Th
1d240 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
1d250 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20  o seek to */..  
1d260 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1d270 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1d280 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1d290 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
1d2a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1d2b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1d2c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1d2d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1d2e0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
1d2f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1d300 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65  _SeekLE == OP_Se
1d310 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65  ekLT+1 );.  asse
1d320 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d  rt( OP_SeekGE ==
1d330 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a   OP_SeekLT+2 );.
1d340 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d350 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGT == OP_SeekLT
1d360 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +3 );.  assert( 
1d370 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
1d380 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1d390 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f  Cursor!=0 );.  o
1d3a0 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  c = pOp->opcode;
1d3b0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1d3c0 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
1d3d0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
1d3e0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
1d3f0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  de;.#endif.  if(
1d400 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1d410 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
1d420 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
1d430 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
1d440 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
1d450 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a  , string,.    **
1d460 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
1d470 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
1d480 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
1d490 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
1d4a0 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
1d4b0 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a   so covert it. *
1d4c0 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  /.    pIn3 = &aM
1d4d0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1d4e0 20 41 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   ApplyNumericAff
1d4f0 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20  inity(pIn3);.   
1d500 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1d510 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1d520 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1d530 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20  IsValid = 0;..  
1d540 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1d550 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1d560 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1d570 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1d580 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
1d590 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1d5a0 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1d5b0 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1d5c0 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
1d5d0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1d5e0 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1d5f0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1d600 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1d610 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1d620 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1d630 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1d640 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1d650 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1d660 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
1d670 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1d680 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1d690 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1d6a0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1d6b0 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61  p2 - 1;  VdbeBra
1d6c0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
1d6d0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1d6e0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1d6f0 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
1d700 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72  tion iKey is lar
1d710 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ger than the act
1d720 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1d730 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1d740 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72  ubstitute >= for
1d750 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e   > and < for <=.
1d760 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61   e.g. if the sea
1d770 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a  rch term.      *
1d780 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65  * is 4.9 and the
1d790 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69   integer approxi
1d7a0 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20  mation 5:.      
1d7b0 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  **.      **     
1d7c0 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20     (x >  4.9)   
1d7d0 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29   ->     (x >= 5)
1d7e0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1d7f0 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d   (x <= 4.9)    -
1d800 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20  >     (x <  5). 
1d810 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
1d820 28 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c  ( pIn3->r<(doubl
1d830 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1d840 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d850 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
1d860 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1d870 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
1d880 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
1d890 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1d8a0 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
1d8b0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1d8c0 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
1d8d0 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1d8e0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1d8f0 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1d900 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
1d910 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1d920 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1d930 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
1d940 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1d950 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1d960 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1d970 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
1d980 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
1d990 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
1d9a0 49 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29 69  In3->r>(double)i
1d9b0 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1d9c0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
1d9d0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20  ==(OP_SeekLT+1) 
1d9e0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1d9f0 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f  t( OP_SeekGT==(O
1da00 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20  P_SeekGE+1) );. 
1da10 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1da20 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
1da30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20  01)==(OP_SeekGE 
1da40 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1da50 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1da60 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1da70 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  LT & 0x0001) ) o
1da80 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  c++;.      }.   
1da90 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   } .    rc = sql
1daa0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1dab0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1dac0 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1dad0 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1dae0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1daf0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1db00 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1db10 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
1db20 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
1db30 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1db40 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70  lid = 1;.      p
1db50 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69  C->lastRowid = i
1db60 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  Key;.    }.  }el
1db70 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d  se{.    nField =
1db80 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1db90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1dba0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1dbb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69  .    assert( nFi
1dbc0 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70  eld>0 );.    r.p
1dbd0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1dbe0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1dbf0 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
1dc00 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  ld;..    /* The 
1dc10 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64  next line of cod
1dc20 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f  e computes as fo
1dc30 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74  llows, only fast
1dc40 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28  er:.    **   if(
1dc50 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc==OP_SeekGT |
1dc60 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
1dc70 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  ){.    **     r.
1dc80 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
1dc90 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
1dca0 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1dcb0 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20  fault_rc = +1;. 
1dcc0 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f     **   }.    */
1dcd0 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
1dce0 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20  c = ((1 & (oc - 
1dcf0 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31  OP_SeekLT)) ? -1
1dd00 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65   : +1);.    asse
1dd10 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1dd20 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1dd30 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
1dd40 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1dd50 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LE || r.default_
1dd60 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1dd70 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1dd80 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGE || r.default
1dd90 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61  _rc==+1 );.    a
1dda0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1ddb0 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLT || r.defaul
1ddc0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20  t_rc==+1 );..   
1ddd0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
1dde0 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
1ddf0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1de00 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1de10 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1de20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1de30 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1de40 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1de50 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72      ExpandBlob(r
1de60 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d  .aMem);.    rc =
1de70 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1de80 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1de90 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
1dea0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
1deb0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1dec0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1ded0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1dee0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1def0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1df00 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65  ;.  }.  pC->defe
1df10 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1df20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1df30 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1df40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1df50 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  EST.  sqlite3_se
1df60 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
1df70 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f  ndif.  if( oc>=O
1df80 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73  P_SeekGE ){  ass
1df90 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1dfa0 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GE || oc==OP_See
1dfb0 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kGT );.    if( r
1dfc0 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
1dfd0 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  && oc==OP_SeekGT
1dfe0 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
1dff0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
1e000 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
1e010 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1e020 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1e030 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1e040 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1e050 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d  error;.      pC-
1e060 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1e070 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1e080 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1e090 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1e0a0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1e0b0 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLT || oc==OP_
1e0c0 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66  SeekLE );.    if
1e0d0 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1e0e0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1e0f0 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kLT) ){.      re
1e100 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1e110 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
1e120 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73  evious(pC->pCurs
1e130 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1e140 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1e150 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1e160 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1e170 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1e180 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65  alid = 0;.    }e
1e190 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65  lse{.      /* re
1e1a0 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1e1b0 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1e1c0 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1e1d0 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1e1e0 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
1e1f0 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
1e200 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d    */.      res =
1e210 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
1e220 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1e230 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1e240 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
1e250 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1e260 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
1e270 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
1e280 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1e290 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1e2a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1e2b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1e2c0 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
1e2d0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P2].**.** P1 
1e2e0 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1e2f0 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1e300 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1e310 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1e320 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1e330 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1e340 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1e350 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1e360 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1e370 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1e380 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1e390 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1e3a0 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1e3b0 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1e3c0 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1e3d0 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1e3e0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1e3f0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1e400 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
1e410 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1e420 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1e430 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1e440 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1e450 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1e460 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1e470 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e480 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1e490 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1e4a0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1e4b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1e4c0 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e  sTable );.  pC->
1e4d0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1e4e0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1e4f0 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  >p2];.  pC->move
1e500 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
1e510 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1e520 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69  In2);.  pC->rowi
1e530 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1e540 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1e550 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  to = 1;.  break;
1e560 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65  .}.  ../* Opcode
1e570 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  : Found P1 P2 P3
1e580 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1e590 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1e5a0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1e5b0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1e5c0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1e5d0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1e5e0 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1e5f0 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1e600 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1e610 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1e620 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1e630 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1e640 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
1e650 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1e660 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1e670 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1e680 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1e690 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
1e6a0 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1e6b0 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1e6c0 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
1e6d0 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
1e6e0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1e6f0 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1e700 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
1e710 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
1e720 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
1e730 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
1e740 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
1e750 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
1e760 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
1e770 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
1e780 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
1e790 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
1e7a0 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
1e7b0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
1e7c0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
1e7d0 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
1e7e0 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
1e7f0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
1e800 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1e810 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e820 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e830 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1e840 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1e850 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1e860 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1e870 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1e880 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1e890 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1e8a0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1e8b0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1e8c0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1e8d0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1e8e0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1e8f0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1e900 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1e910 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
1e920 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
1e930 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1e940 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1e950 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
1e960 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
1e970 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
1e980 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
1e990 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
1e9a0 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
1e9b0 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
1e9c0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1e9d0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
1e9e0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1e9f0 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
1ea00 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1ea10 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
1ea20 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
1ea30 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
1ea40 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
1ea50 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
1ea60 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
1ea70 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
1ea80 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
1ea90 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
1eaa0 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
1eab0 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
1eac0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
1ead0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
1eae0 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ists, NoConflict
1eaf0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
1eb00 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20  oConflict P1 P2 
1eb10 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1eb20 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1eb30 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1eb40 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1eb50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1eb60 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1eb70 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1eb80 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1eb90 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1eba0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1ebb0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1ebc0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1ebd0 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
1ebe0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1ebf0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1ec00 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1ec10 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1ec20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P4.** contains a
1ec30 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a  ny NULL value, j
1ec40 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
1ec50 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74  to P2.  If all t
1ec60 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72  erms of the.** r
1ec70 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55  ecord are not-NU
1ec80 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20  LL then a check 
1ec90 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72  is done to deter
1eca0 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20  mine if any row 
1ecb0 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64  in the.** P1 ind
1ecc0 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d  ex btree has a m
1ecd0 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66  atching key pref
1ece0 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ix.  If there ar
1ecf0 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75  e no matches, ju
1ed00 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  mp.** immediatel
1ed10 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  y to P2.  If the
1ed20 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66  re is a match, f
1ed30 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
1ed40 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20  leave the P1.** 
1ed50 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
1ed60 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  to the matching 
1ed70 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  row..**.** This 
1ed80 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61  opcode is simila
1ed90 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  r to OP_NotFound
1eda0 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74   with the except
1edb0 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  ions that the.**
1edc0 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79   branch is alway
1edd0 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70  s taken if any p
1ede0 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63  art of the searc
1edf0 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e  h key input is N
1ee00 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ULL..**.** This 
1ee10 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
1ee20 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
1ee30 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
1ee40 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
1ee50 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
1ee60 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
1ee70 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1ee80 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
1ee90 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
1eea0 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
1eeb0 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
1eec0 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1eed0 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  und, Found, NotE
1eee0 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50  xists.*/.case OP
1eef0 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20  _NoConflict:    
1ef00 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ef10 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
1ef20 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
1ef30 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1ef40 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
1ef50 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ef60 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
1ef70 69 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  ists;.  int ii;.
1ef80 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ef90 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63  ;.  int res;.  c
1efa0 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e  har *pFree;.  Un
1efb0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49  packedRecord *pI
1efc0 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65  dxKey;.  Unpacke
1efd0 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61  dRecord r;.  cha
1efe0 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44  r aTempRec[ROUND
1eff0 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65  8(sizeof(Unpacke
1f000 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65  dRecord)) + size
1f010 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a  of(Mem)*4 + 7];.
1f020 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1f030 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
1f040 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
1f050 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
1f060 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
1f070 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
1f080 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f090 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f0a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1f0b0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1f0c0 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
1f0d0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1f0e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1f0f0 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
1f100 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
1f110 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ekOp = 0;.#endif
1f120 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1f130 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1f140 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1f150 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1f160 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
1f170 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20 20  ;.  pFree = 0;  
1f180 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
1f190 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75 70  Only used to sup
1f1a0 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65 72  press a compiler
1f1b0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69   warning. */.  i
1f1c0 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29  f( pOp->p4.i>0 )
1f1d0 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
1f1e0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1f1f0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1f200 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
1f210 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
1f220 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  3;.    for(ii=0;
1f230 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
1f240 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
1f250 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1f260 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20  .aMem[ii]) );.  
1f270 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26      ExpandBlob(&
1f280 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66  r.aMem[ii]);.#if
1f290 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1f2a0 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20  .      if( ii ) 
1f2b0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
1f2c0 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d  Op->p3+ii, &r.aM
1f2d0 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a  em[ii]);.#endif.
1f2e0 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65      }.    pIdxKe
1f2f0 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b  y = &r;.  }else{
1f300 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
1f310 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
1f320 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20  npackedRecord(. 
1f330 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49         pC->pKeyI
1f340 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73  nfo, aTempRec, s
1f350 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c  izeof(aTempRec),
1f360 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 20 0a   &pFree.    ); .
1f370 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
1f380 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1f390 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
1f3a0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1f3b0 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73 65  Blob );.    asse
1f3c0 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
1f3d0 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20   & MEM_Zero)==0 
1f3e0 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73  );  /* zeroblobs
1f3f0 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65   already expande
1f400 64 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  d */.    sqlite3
1f410 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
1f420 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
1f430 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
1f440 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20   pIdxKey);.  }. 
1f450 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c   pIdxKey->defaul
1f460 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66 28 20  t_rc = 0;.  if( 
1f470 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1f480 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
1f490 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
1f4a0 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
1f4b0 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
1f4c0 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
1f4d0 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c     ** input fiel
1f4e0 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e  ds are NULL, sin
1f4f0 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20  ce any key with 
1f500 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a  a NULL will not.
1f510 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20      ** conflict 
1f520 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  */.    for(ii=0;
1f530 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
1f540 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  ++){.      if( r
1f550 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20  .aMem[ii].flags 
1f560 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1f570 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1f580 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72 61 6e  p2 - 1; VdbeBran
1f590 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
1f5a0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1f5b0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
1f5c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f5d0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1f5e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
1f5f0 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
1f600 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  s);.  if( pOp->p
1f610 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  4.i==0 ){.    sq
1f620 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
1f630 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69 66  pFree);.  }.  if
1f640 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1f650 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
1f660 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  }.  pC->seekResu
1f670 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65  lt = res;.  alre
1f680 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73  adyExists = (res
1f690 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ==0);.  pC->null
1f6a0 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45  Row = 1-alreadyE
1f6b0 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66  xists;.  pC->def
1f6c0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1f6d0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1f6e0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1f6f0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1f700 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
1f710 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
1f720 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73  aken(alreadyExis
1f730 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
1f740 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1f750 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1f760 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1f770 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1f780 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d  (alreadyExists==
1f790 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 21 61  0,2);.    if( !a
1f7a0 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1f7b0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1f7c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1f7d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1f7e0 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1f7f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1f800 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
1f810 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
1f820 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
1f830 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
1f840 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
1f850 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
1f860 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65  .  P3 is an inte
1f870 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50  ger rowid.  If P
1f880 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  1 does not conta
1f890 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
1f8a0 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65  .** rowid P3 the
1f8b0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
1f8c0 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  ly to P2.  If P1
1f8d0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
1f8e0 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72  record.** with r
1f8f0 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61  owid P3 then lea
1f900 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f  ve the cursor po
1f910 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72  inting at that r
1f920 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a  ecord and fall.*
1f930 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  * through to the
1f940 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1f950 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  n..**.** The OP_
1f960 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
1f970 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
1f980 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
1f990 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
1f9a0 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
1f9b0 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
1f9c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1f9d0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1f9e0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
1f9f0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
1fa00 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
1fa10 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
1fa20 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
1fa30 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
1fa40 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
1fa50 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
1fa60 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
1fa70 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
1fa80 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1fa90 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
1faa0 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ict.*/.case OP_N
1fab0 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20  otExists: {     
1fac0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1fad0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1fae0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1faf0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1fb00 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
1fb10 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1fb20 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1fb30 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1fb40 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1fb50 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1fb60 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1fb70 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1fb80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1fb90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1fba0 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
1fbb0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
1fbc0 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e  >seekOp = 0;.#en
1fbd0 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43  dif.  assert( pC
1fbe0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
1fbf0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1fc00 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1fc10 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
1fc20 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
1fc30 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
1fc40 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d  es = 0;.  iKey =
1fc50 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63   pIn3->u.i;.  rc
1fc60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1fc70 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1fc80 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
1fc90 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61   &res);.  pC->la
1fca0 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
1fcb0 75 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  u.i;.  pC->rowid
1fcc0 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30  IsValid = res==0
1fcd0 20 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c   ?1:0;.  pC->nul
1fce0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  lRow = 0;.  pC->
1fcf0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1fd00 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
1fd10 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1fd20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  = 0;.  VdbeBranc
1fd30 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
1fd40 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
1fd50 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1fd60 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65  p2 - 1;.    asse
1fd70 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1fd80 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20  alid==0 );.  }. 
1fd90 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1fda0 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a  = res;.  break;.
1fdb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1fdc0 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
1fdd0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1fde0 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d  r[P2]=cursor[P1]
1fdf0 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e  .ctr++.**.** Fin
1fe00 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
1fe10 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
1fe20 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
1fe30 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
1fe40 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1fe50 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1fe60 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
1fe70 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
1fe80 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
1fe90 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
1fea0 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
1feb0 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
1fec0 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
1fed0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1fee0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
1fef0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ff00 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ff10 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1ff20 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
1ff30 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75  >p1]!=0 );.  pOu
1ff40 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
1ff50 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
1ff60 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
1ff70 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1ff80 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
1ff90 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1ffa0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
1ffb0 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1ffc0 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1ffd0 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1ffe0 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1fff0 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
20000 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
20010 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
20020 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
20030 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
20040 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
20050 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
20060 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
20070 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
20080 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
20090 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
200a0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
200b0 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
200c0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
200d0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
200e0 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
200f0 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
20100 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
20110 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
20120 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
20130 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
20140 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
20150 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
20160 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
20170 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
20180 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
20190 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c  * an SQLITE_FULL
201a0 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
201b0 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69  ted. The P3 regi
201c0 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20  ster is updated 
201d0 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65  with the '.** ge
201e0 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
201f0 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d  umber. This P3 m
20200 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
20210 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
20220 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
20230 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
20240 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
20250 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
20260 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
20270 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b  ease */.  i64 v;
20280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20290 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
202a0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
202b0 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
202c0 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
202d0 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
202e0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
202f0 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
20300 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
20310 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
20320 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
20330 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
20340 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
20350 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
20360 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
20370 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
20380 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
20390 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
203a0 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
203b0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
203c0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
203d0 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
203e0 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
203f0 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
20400 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
20410 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20420 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20430 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20440 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
20450 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20460 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d  .  if( NEVER(pC-
20470 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a  >pCursor==0) ){.
20480 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20      /* The zero 
20490 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61  initialization a
204a0 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74  bove is all that
204b0 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20   is needed */.  
204c0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
204d0 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
204e0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
204f0 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
20500 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
20510 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
20520 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
20530 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
20540 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
20550 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
20560 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
20570 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
20580 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
20590 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
205a0 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
205b0 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
205c0 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
205d0 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
205e0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
205f0 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
20600 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
20610 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
20620 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
20630 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
20640 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
20650 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
20660 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
20670 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
20680 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
20690 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
206a0 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
206b0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
206c0 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
206d0 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
206e0 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
206f0 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
20700 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
20710 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
20720 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
20730 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
20740 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
20750 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
20760 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
20770 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
20780 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
20790 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
207a0 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
207b0 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
207c0 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
207d0 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
207e0 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
207f0 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
20800 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
20810 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
20820 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
20830 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
20840 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
20850 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
20860 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
20870 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
20880 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
20890 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
208a0 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
208b0 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
208c0 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
208d0 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
208e0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
208f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20900 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
20910 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
20920 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
20930 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
20940 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20950 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
20960 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
20970 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
20980 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
20990 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
209a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
209b0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
209c0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
209d0 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  alid(pC->pCursor
209e0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ) );.        rc 
209f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
20a00 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
20a10 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
20a20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
20a30 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
20a40 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
20a50 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
20a60 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  */.        if( v
20a70 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
20a80 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
20a90 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
20aa0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
20ab0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
20ac0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
20ad0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
20ae0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
20af0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
20b00 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
20b10 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70  MENT.    if( pOp
20b20 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ->p3 ){.      /*
20b30 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
20b40 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
20b50 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
20b60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20b70 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >0 );.      if( 
20b80 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
20b90 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
20ba0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
20bb0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
20bc0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
20bd0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  nt);.        /* 
20be0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
20bf0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
20c00 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
20c10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20c20 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
20c30 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
20c40 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
20c50 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
20c60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
20c70 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
20c80 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
20c90 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
20ca0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20cb0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
20cc0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
20cd0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
20ce0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
20cf0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
20d00 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
20d10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
20d20 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
20d30 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
20d40 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
20d50 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
20d60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
20d70 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
20d80 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
20d90 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
20da0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
20db0 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
20dc0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
20dd0 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
20de0 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
20df0 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
20e00 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
20e10 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
20e20 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
20e30 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20  2275-61338 */.  
20e40 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20e50 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20e60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
20e70 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
20e80 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
20e90 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
20ea0 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
20eb0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
20ec0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
20ed0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
20ee0 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
20ef0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
20f00 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
20f10 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
20f20 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
20f30 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
20f40 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
20f50 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
20f60 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
20f70 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
20f80 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
20f90 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
20fa0 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
20fb0 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
20fc0 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
20fd0 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
20fe0 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
20ff0 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
21000 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
21010 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
21020 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
21030 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
21040 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
21050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21060 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
21070 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
21080 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e  . */.      /* on
21090 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d   the first attem
210a0 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e  pt, simply do on
210b0 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76  e more than prev
210c0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20  ious */.      v 
210d0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  = lastRowid;.   
210e0 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
210f0 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
21100 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
21110 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76  ative */.      v
21120 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
21130 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
21140 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  cnt = 0;.      w
21150 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73  hile(   ((rc = s
21160 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
21170 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
21180 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
21190 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211c0 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
211d0 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
211e0 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
211f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
21200 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20  (++cnt<100)){.  
21210 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69        /* collisi
21220 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72  on - try another
21230 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f   random rowid */
21240 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
21250 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
21260 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
21270 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b      if( cnt<5 ){
21280 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72  .          /* tr
21290 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d  y "small" random
212a0 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20   rowids for the 
212b0 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73  initial attempts
212c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20   */.          v 
212d0 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
212e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
212f0 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
21300 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
21310 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
21320 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
21330 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b      }.        v+
21340 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
21350 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d  -zero */.      }
21360 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
21370 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
21380 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
21390 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
213a0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
213b0 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
213c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
213d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
213e0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
213f0 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
21400 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
21410 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
21420 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
21430 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
21440 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21450 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21460 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21470 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
21480 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
21490 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
214a0 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
214b0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
214c0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
214d0 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
214e0 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
214f0 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
21500 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
21510 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
21520 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
21530 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
21540 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
21550 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
21560 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
21570 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
21580 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
21590 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
215a0 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
215b0 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
215c0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
215d0 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
215e0 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
215f0 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
21600 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
21610 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
21620 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
21630 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
21640 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
21650 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
21660 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
21670 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
21680 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
21690 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
216a0 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
216b0 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
216c0 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
216d0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
216e0 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
216f0 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
21700 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
21710 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
21720 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
21730 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
21740 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
21750 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
21760 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
21770 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
21780 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
21790 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
217a0 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
217b0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
217c0 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
217d0 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
217e0 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
217f0 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
21800 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
21810 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
21820 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
21830 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
21840 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
21850 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
21860 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
21870 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
21880 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
21890 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
218a0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
218b0 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
218c0 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
218d0 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
218e0 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
218f0 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
21900 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
21910 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
21920 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
21930 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
21940 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
21950 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
21960 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
21970 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
21980 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
21990 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
219a0 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
219b0 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
219c0 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
219d0 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
219e0 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
219f0 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
21a00 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
21a10 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
21a20 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
21a30 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
21a40 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
21a50 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
21a60 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
21a70 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
21a80 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
21a90 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
21aa0 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
21ab0 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
21ac0 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
21ad0 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
21ae0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
21af0 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
21b00 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
21b10 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
21b20 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
21b30 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
21b40 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
21b50 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
21b60 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
21b70 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
21b80 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
21b90 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
21ba0 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
21bb0 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
21bc0 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
21bd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
21be0 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
21bf0 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
21c00 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
21c10 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
21c20 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
21c30 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
21c40 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
21c50 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
21c60 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  s:  intkey=P3 da
21c70 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
21c80 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
21c90 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
21ca0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
21cb0 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
21cc0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
21cd0 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
21ce0 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
21cf0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
21d00 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
21d10 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
21d20 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
21d30 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
21d40 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
21d50 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
21d60 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
21d70 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
21d80 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
21d90 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
21da0 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
21db0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
21dc0 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f   iKey;         /
21dd0 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f  * The integer RO
21de0 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74  WID or key for t
21df0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
21e00 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64  inserted */.  Vd
21e10 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
21e20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
21e30 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
21e40 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
21e50 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
21e60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21e70 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74   of zero-bytes t
21e80 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e  o append */.  in
21e90 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
21ea0 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
21eb0 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
21ec0 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
21ed0 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
21ee0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
21ef0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
21f00 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
21f10 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e  te hook */.  con
21f20 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f  st char *zTbl; /
21f30 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75  * Table name - u
21f40 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74  sed by the opdat
21f50 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20  e hook */.  int 
21f60 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
21f70 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
21f80 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
21f90 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
21fa0 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44  _INSERT */..  pD
21fb0 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
21fc0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
21fd0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21fe0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21ff0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
22000 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
22010 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
22020 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
22030 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
22040 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
22050 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
22060 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
22070 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
22080 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22090 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54  able );.  REGIST
220a0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
220b0 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28  , pData);..  if(
220c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
220d0 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
220e0 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Key = &aMem[pOp-
220f0 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
22100 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
22110 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
22120 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
22130 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52  d(pKey) );.    R
22140 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
22150 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20  p->p3, pKey);.  
22160 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75    iKey = pKey->u
22170 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  .i;.  }else{.   
22180 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
22190 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49  code==OP_InsertI
221a0 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  nt );.    iKey =
221b0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20   pOp->p3;.  }.. 
221c0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
221d0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
221e0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
221f0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
22200 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
22210 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
22220 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65   lastRowid = iKe
22230 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
22240 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
22250 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
22260 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
22270 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
22280 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
22290 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
222a0 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
222b0 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
222c0 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
222d0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
222e0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
222f0 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
22300 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
22310 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
22320 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61     nZero = pData
22330 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
22340 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20  se{.    nZero = 
22350 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  0;.  }.  rc = sq
22360 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
22370 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
22380 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
22390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223a0 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
223b0 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
223c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223d0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
223e0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21   OPFLAG_APPEND)!
223f0 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  =0, seekResult. 
22400 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
22410 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
22420 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22430 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
22440 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22450 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
22460 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
22470 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
22480 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
22490 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
224a0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
224b0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
224c0 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
224d0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
224e0 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
224f0 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
22500 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
22510 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
22520 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
22530 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
22540 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
22550 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
22560 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
22570 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
22580 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
22590 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
225a0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
225b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
225c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
225d0 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
225e0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
225f0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
22600 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
22610 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
22620 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
22630 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
22640 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
22650 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
22660 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
22670 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
22680 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
22690 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
226a0 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
226b0 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
226c0 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
226d0 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
226e0 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
226f0 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
22700 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
22710 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74  m within an Next
22720 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
22730 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
22740 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
22750 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
22760 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
22770 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
22780 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
22790 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
227a0 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
227b0 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
227c0 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
227d0 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
227e0 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
227f0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
22800 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
22810 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
22820 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
22830 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
22840 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
22850 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
22860 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
22870 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
22880 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
22890 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
228a0 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
228b0 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
228c0 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
228d0 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
228e0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
228f0 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
22900 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
22910 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
22920 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22930 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22940 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22950 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22960 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22970 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22980 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f  pCursor!=0 );  /
22990 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72  * Only valid for
229a0 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f   real tables, no
229b0 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f   pseudotables */
229c0 0a 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61  .  iKey = pC->la
229d0 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a  stRowid;      /*
229e0 20 4f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   Only used for t
229f0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
22a00 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  /..  /* The OP_D
22a10 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
22a20 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
22a30 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
22a40 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
22a50 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
22a60 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
22a70 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
22a80 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
22a90 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
22aa0 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
22ab0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
22ac0 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
22ad0 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
22ae0 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
22af0 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
22b00 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
22b10 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
22b20 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
22b30 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
22b40 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
22b50 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
22b60 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
22b70 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
22b80 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
22b90 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
22ba0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
22bb0 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
22bc0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
22bd0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
22be0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22bf0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
22c00 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
22c10 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
22c20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22c30 5f 65 72 72 6f 72 3b 0a 0a 20 20 72 63 20 3d 20  _error;..  rc = 
22c40 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
22c50 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  te(pC->pCursor);
22c60 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
22c70 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
22c80 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
22c90 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
22ca0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
22cb0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
22cc0 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
22cd0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
22ce0 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73  ->p4.z && pC->is
22cf0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d  Table ){.    db-
22d00 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
22d10 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
22d20 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a   SQLITE_DELETE,.
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b          db->aDb[
22d50 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  pC->iDb].zName, 
22d60 70 4f 70 2d 3e 70 34 2e 7a 2c 20 69 4b 65 79 29  pOp->p4.z, iKey)
22d70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
22d80 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
22d90 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20    if( pOp->p2 & 
22da0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
22db0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
22dc0 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63   break;.}./* Opc
22dd0 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20  ode: ResetCount 
22de0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
22df0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  The value of the
22e00 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
22e10 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
22e20 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
22e30 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
22e40 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
22e50 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
22e60 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
22e70 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20  ges())..** Then 
22e80 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c  the VMs internal
22e90 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
22ea0 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20  resets to 0..** 
22eb0 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
22ec0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
22ed0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
22ee0 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c  etCount: {.  sql
22ef0 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
22f00 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
22f10 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  e);.  p->nChange
22f20 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
22f30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
22f40 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32  terCompare P1 P2
22f50 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
22f60 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21  is:  if key(P1)!
22f70 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20  =trim(r[P3],P4) 
22f80 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  goto P2.**.** P1
22f90 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
22fa0 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75  sor. This instru
22fb0 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61  ction compares a
22fc0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a   prefix of the.*
22fd0 2a 20 74 68 65 20 72 65 63 6f 72 64 20 62 6c 6f  * the record blo
22fe0 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  b in register P3
22ff0 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69   against a prefi
23000 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  x of the entry t
23010 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74  hat .** the sort
23020 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e  er cursor curren
23030 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20  tly points to.  
23040 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 50  Only the first P
23050 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72  4 fields.** of r
23060 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72  [P3] and the sor
23070 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20 63  ter record are c
23080 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  ompared..**.** I
23090 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74  f either P3 or t
230a0 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69  he sorter contai
230b0 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65  ns a NULL in one
230c0 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66   of their signif
230d0 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20  icant.** fields 
230e0 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68  (not counting th
230f0 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74  e P4 fields at t
23100 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65  he end which are
23110 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a   ignored) then.*
23120 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
23130 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
23140 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46  e equal..**.** F
23150 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e  all through to n
23160 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
23170 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  if the two recor
23180 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ds compare equal
23190 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65   to.** each othe
231a0 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  r.  Jump to P2 i
231b0 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65  f they are diffe
231c0 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rent..*/.case OP
231d0 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20  _SorterCompare: 
231e0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
231f0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
23200 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20   int nKeyCol;.. 
23210 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23220 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23230 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
23240 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
23250 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
23260 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  32 );.  pIn3 = &
23270 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
23280 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e   nKeyCol = pOp->
23290 70 34 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c  p4.i;.  rc = sql
232a0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f  ite3VdbeSorterCo
232b0 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20  mpare(pC, pIn3, 
232c0 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a  nKeyCol, &res);.
232d0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
232e0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
232f0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
23300 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
23310 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  }.  break;.};../
23320 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
23330 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
23340 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
23350 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
23360 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
23370 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e  er P2 the curren
23380 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f  t sorter data fo
23390 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  r sorter cursor 
233a0 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P1..*/.case OP_S
233b0 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56  orterData: {.  V
233c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
233d0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
233e0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20  Op->p2];.  pC = 
233f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
23400 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
23410 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
23420 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
23430 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20  orterRowkey(pC, 
23440 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28  pOut);.  assert(
23450 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
23460 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  | (pOut->flags &
23470 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20   MEM_Blob) );.  
23480 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23490 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20  ode: RowData P1 
234a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
234b0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
234c0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
234d0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
234e0 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64  e complete row d
234f0 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ata for cursor P
23500 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
23510 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
23520 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
23530 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f  ** It is just co
23540 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32  pied onto the P2
23550 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
23560 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
23570 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
23580 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
23590 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
235a0 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
235b0 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
235c0 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
235d0 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
235e0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
235f0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a  udo-table..*/./*
23600 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20   Opcode: RowKey 
23610 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
23620 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b  ynopsis: r[P2]=k
23630 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ey.**.** Write i
23640 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
23650 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
23660 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20   key for cursor 
23670 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
23680 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
23690 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
236a0 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63  .** The key is c
236b0 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
236c0 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
236d0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
236e0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
236f0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
23700 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
23710 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
23720 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
23730 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
23740 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
23750 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
23760 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
23770 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63  ase OP_RowKey:.c
23780 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20  ase OP_RowData: 
23790 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
237a0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
237b0 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a  pCrsr;.  u32 n;.
237c0 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f    i64 n64;..  pO
237d0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
237e0 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p2];.  memAboutT
237f0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
23800 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61  ;..  /* Note tha
23810 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77  t RowKey and Row
23820 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20  Data are really 
23830 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
23840 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a   instruction */.
23850 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23860 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23870 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23880 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23890 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
238a0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
238b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
238c0 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f  C->isTable || pO
238d0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f  p->opcode!=OP_Ro
238e0 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
238f0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
23900 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 || pOp->opcode
23910 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a  ==OP_RowData );.
23920 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23930 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23940 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
23950 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
23960 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
23970 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23980 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23990 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
239a0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73  sor;.  assert( s
239b0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
239c0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
239d0 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f  );..  /* The OP_
239e0 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f  RowKey and OP_Ro
239f0 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c  wData opcodes al
23a00 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e  ways follow OP_N
23a10 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a  otExists or.  **
23a20 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65   OP_Rewind/Op_Ne
23a30 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72  xt with no inter
23a40 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69  vening instructi
23a50 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 69  ons that might i
23a60 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74  nvalidate.  ** t
23a70 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63  he cursor.  Henc
23a80 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
23a90 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
23aa0 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69  rMoveto() call i
23ab0 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20  s always.  ** a 
23ac0 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65  no-op and can ne
23ad0 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77  ver fail.  But w
23ae0 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c  e leave it in pl
23af0 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79 2e  ace as a safety.
23b00 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
23b10 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
23b20 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  to==0 );.  rc = 
23b30 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
23b40 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
23b50 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
23b60 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
23b70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23b80 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  r;..  if( pC->is
23b90 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
23ba0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
23bb0 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f  able );.    VVA_
23bc0 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
23bd0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
23be0 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
23bf0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
23c00 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
23c10 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
23c20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
23c30 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
23c40 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
23c50 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
23c60 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
23c70 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
23c80 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
23c90 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
23ca0 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
23cb0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
23cc0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
23cd0 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
23ce0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
23cf0 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
23d00 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
23d10 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
23d20 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
23d30 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
23d40 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
23d50 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
23d60 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  }.  if( sqlite3V
23d70 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
23d80 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f   n, 0) ){.    go
23d90 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
23da0 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20   pOut->n = n;.  
23db0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
23dc0 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  Out, MEM_Blob);.
23dd0 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
23de0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  e==0 ){.    rc =
23df0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
23e00 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
23e10 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  ut->z);.  }else{
23e20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23e30 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72  3BtreeData(pCrsr
23e40 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
23e50 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
23e60 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
23e70 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
23e80 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
23e90 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
23ea0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
23eb0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
23ec0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
23ed0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
23ee0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23ef0 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
23f00 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
23f10 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
23f20 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
23f30 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
23f40 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
23f50 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
23f60 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
23f70 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
23f80 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
23f90 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
23fa0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
23fb0 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
23fc0 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
23fd0 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
23fe0 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
23ff0 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
24000 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
24010 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
24020 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
24030 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
24040 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
24050 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
24080 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  se */.  VdbeCurs
24090 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b  or *pC;.  i64 v;
240a0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
240b0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
240c0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
240d0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
240e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
240f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24100 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24110 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24120 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24130 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
24140 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
24150 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  g==0 || pC->null
24160 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  Row );.  if( pC-
24170 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
24180 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
24190 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
241a0 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
241b0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
241c0 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
241d0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
241e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
241f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
24200 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
24210 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20  pVtabCursor ){. 
24220 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70     pVtab = pC->p
24230 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
24240 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d  b;.    pModule =
24250 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
24260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f  .    assert( pMo
24270 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a  dule->xRowid );.
24280 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
24290 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74  ->xRowid(pC->pVt
242a0 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  abCursor, &v);. 
242b0 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
242c0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
242d0 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  tab);.#endif /* 
242e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
242f0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65  UALTABLE */.  }e
24300 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
24310 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
24320 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
24330 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
24340 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
24350 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
24360 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
24370 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64     if( pC->rowid
24380 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20  IsValid ){.     
24390 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77   v = pC->lastRow
243a0 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  id;.    }else{. 
243b0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
243c0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
243d0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
243e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
243f0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
24400 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63  /* Always so bec
24410 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
24420 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a  veto() above */.
24430 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74      }.  }.  pOut
24440 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
24450 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24460 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
24470 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
24480 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
24490 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
244a0 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
244b0 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
244c0 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
244d0 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
244e0 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
244f0 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
24500 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
24510 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
24520 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
24530 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24540 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24550 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
24560 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24570 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24580 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
24590 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
245a0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
245b0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
245c0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
245d0 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
245e0 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
245f0 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
24600 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
24610 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
24620 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24630 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
24640 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
24650 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
24660 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72   or Column or Pr
24670 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  ev instruction f
24680 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
24690 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
246a0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
246b0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
246c0 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
246d0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
246e0 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
246f0 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
24700 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
24710 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
24720 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
24730 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
24740 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
24750 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
24760 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
24770 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
24780 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
24790 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
247a0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
247b0 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
247c0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
247d0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
247e0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
247f0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
24800 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
24810 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
24820 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Next..*/.case OP
24830 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
24840 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
24850 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
24860 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
24870 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
24880 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24890 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
248a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
248b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
248c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
248d0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
248e0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
248f0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
24900 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
24910 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24920 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
24930 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
24940 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
24950 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
24960 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f  to = 0;.  pC->ro
24970 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
24980 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
24990 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
249a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
249b0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
249c0 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e  p = OP_Last;.#en
249d0 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
249e0 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  2>0 ){.    VdbeB
249f0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
24a00 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
24a10 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
24a20 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
24a30 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
24a40 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  : Sort P1 P2 * *
24a50 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
24a60 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c  code does exactl
24a70 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  y the same thing
24a80 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78   as OP_Rewind ex
24a90 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20  cept that.** it 
24aa0 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e  increments an un
24ab0 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61  documented globa
24ac0 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20  l variable used 
24ad0 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a  for testing..**.
24ae0 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63  ** Sorting is ac
24af0 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72  complished by wr
24b00 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e  iting records in
24b10 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64  to a sorting ind
24b20 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69  ex,.** then rewi
24b30 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78  nding that index
24b40 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20   and playing it 
24b50 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e  back from beginn
24b60 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20  ing to.** end.  
24b70 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f  We use the OP_So
24b80 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61  rt opcode instea
24b90 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74  d of OP_Rewind t
24ba0 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69  o do the.** rewi
24bb0 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68  nding so that th
24bc0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
24bd0 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d  e will be increm
24be0 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67  ented and.** reg
24bf0 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61  ression tests ca
24c00 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  n determine whet
24c10 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f  her or not the o
24c20 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63  ptimizer is.** c
24c30 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a  orrectly optimiz
24c40 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a  ing out sorts..*
24c50 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
24c60 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Sort:    /* jump
24c70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74   */.case OP_Sort
24c80 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
24c90 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
24ca0 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
24cb0 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
24cc0 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
24cd0 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
24ce0 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  f.  p->aCounter[
24cf0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
24d00 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20  S_SORT]++;.  /* 
24d10 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
24d20 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
24d30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
24d40 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
24d50 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
24d60 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
24d70 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
24d80 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
24d90 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
24da0 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
24db0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
24dc0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
24dd0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
24de0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
24df0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
24e00 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
24e10 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
24e20 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
24e30 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
24e40 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
24e50 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
24e60 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
24e70 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
24e80 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
24e90 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
24ea0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
24eb0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
24ec0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
24ed0 6f 6d 20 74 68 65 20 62 65 67 69 6e 69 6e 67 20  om the begining 
24ee0 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
24ef0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
24f00 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
24f10 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
24f20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
24f30 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ev..*/.case OP_R
24f40 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  ewind: {        
24f50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
24f60 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
24f70 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
24f80 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
24f90 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24fa0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24fb0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24fc0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24fd0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24fe0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
24ff0 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
25000 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
25010 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20  SorterSort) );. 
25020 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66   res = 1;.#ifdef
25030 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
25040 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
25050 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20  Rewind;.#endif. 
25060 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
25070 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
25080 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
25090 65 77 69 6e 64 28 64 62 2c 20 70 43 2c 20 26 72  ewind(db, pC, &r
250a0 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
250b0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
250c0 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  ursor;.    asser
250d0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
250e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
250f0 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
25100 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  es);.    pC->def
25110 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
25120 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
25130 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
25140 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  LE;.    pC->rowi
25150 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
25160 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
25170 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
25180 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
25190 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
251a0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
251b0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
251c0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
251d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
251e0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
251f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
25200 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ext P1 P2 P3 P4 
25210 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  P5.**.** Advance
25220 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
25230 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
25240 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74  the next key/dat
25250 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
25260 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
25270 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
25280 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65  o more key/value
25290 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
252a0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
252b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
252c0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
252d0 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76  f the cursor adv
252e0 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73  ance was success
252f0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
25300 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
25310 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f  **.** The Next o
25320 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
25330 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
25340 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
25350 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64   or.** OP_Rewind
25360 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
25370 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
25380 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f  sor.  Next is no
25390 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
253a0 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53  follow SeekLT, S
253b0 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73  eekLE, or OP_Las
253c0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  t..**.** The P1 
253d0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
253e0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
253f0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
25400 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61  ble.  P1 must ha
25410 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65  ve.** been opene
25420 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
25430 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72  opcode or the pr
25440 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61  ogram will segfa
25450 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ult..**.** The P
25460 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
25470 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
25480 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
25490 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
254a0 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
254b0 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
254c0 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
254d0 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
254e0 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
254f0 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
25500 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
25510 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
25520 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
25530 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
25540 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
25550 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
25560 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
25570 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
25580 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
25590 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a  BtreeNext()..**.
255a0 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
255b0 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
255c0 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
255d0 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
255e0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
255f0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
25600 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
25610 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
25620 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65  e also: Prev, Ne
25630 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f  xtIfOpen.*/./* O
25640 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65  pcode: NextIfOpe
25650 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
25660 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
25670 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
25680 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74  ke Next except t
25690 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31  hat if cursor P1
256a0 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20   is not.** open 
256b0 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d  it behaves a no-
256c0 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  op..*/./* Opcode
256d0 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20  : Prev P1 P2 P3 
256e0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b  P4 P5.**.** Back
256f0 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f   up cursor P1 so
25700 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
25710 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
25720 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
25730 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
25740 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
25750 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73  e is no previous
25760 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
25770 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
25780 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
25790 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
257a0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
257b0 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61  cursor backup wa
257c0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
257d0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
257e0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a  y to P2..**.**.*
257f0 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
25800 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  e is only valid 
25810 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65  following an See
25820 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a  kLT, SeekLE, or.
25830 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64  ** OP_Last opcod
25840 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
25850 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
25860 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Prev is not allo
25870 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
25880 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
25890 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a   or OP_Rewind..*
258a0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
258b0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
258c0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
258d0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
258e0 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f    If P1 is.** no
258f0 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20  t open then the 
25900 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
25910 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fined..**.** The
25920 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
25930 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
25940 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
25950 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
25960 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
25970 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
25980 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
25990 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
259a0 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
259b0 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
259c0 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
259d0 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
259e0 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
259f0 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
25a00 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
25a10 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
25a20 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
25a30 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
25a40 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
25a50 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
25a60 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
25a70 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
25a80 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
25a90 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
25aa0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
25ab0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
25ac0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
25ad0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f   incremented..*/
25ae0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
25af0 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  IfOpen P1 P2 P3 
25b00 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
25b10 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
25b20 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63  st like Prev exc
25b30 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
25b40 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
25b50 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
25b60 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
25b70 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
25b80 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
25b90 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
25ba0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43    int res;..  pC
25bb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25bc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25bd0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
25be0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
25bf0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
25c00 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20  terNext(db, pC, 
25c10 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  &res);.  goto ne
25c20 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
25c30 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20  _PrevIfOpen:    
25c40 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
25c50 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20  OP_NextIfOpen:  
25c60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
25c70 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  f( p->apCsr[pOp-
25c80 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b  >p1]==0 ) break;
25c90 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
25ca0 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  gh */.case OP_Pr
25cb0 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
25cc0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
25cd0 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f  Next:          /
25ce0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
25cf0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25d00 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25d10 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
25d20 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53  ( pOp->p5<ArrayS
25d30 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29  ize(p->aCounter)
25d40 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25d50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25d60 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  res = pOp->p3;. 
25d70 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
25d80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25d90 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
25da0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25db0 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20  C->pCursor );.  
25dc0 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c  assert( res==0 |
25dd0 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d  | (res==1 && pC-
25de0 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a  >isTable==0) );.
25df0 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d    testcase( res=
25e00 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
25e10 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
25e20 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Next || pOp->p4.
25e30 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
25e40 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
25e50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
25e60 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
25e70 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
25e80 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
25e90 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65  evious );.  asse
25ea0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
25eb0 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c  =OP_NextIfOpen |
25ec0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
25ed0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
25ee0 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
25ef0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
25f00 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20  P_PrevIfOpen || 
25f10 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
25f20 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
25f30 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54  evious);..  /* T
25f40 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
25f50 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65  s only used afte
25f60 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  r SeekGT, SeekGE
25f70 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20  , and Rewind..  
25f80 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
25f90 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
25fa0 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65  after SeekLT, Se
25fb0 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20  ekLE, and Last. 
25fc0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
25fd0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
25fe0 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  t || pOp->opcode
25ff0 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a  !=OP_NextIfOpen.
26000 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
26010 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ekOp==OP_SeekGT 
26020 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26030 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20  P_SeekGE.       
26040 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26050 50 5f 52 65 77 69 6e 64 20 29 3b 0a 20 20 61 73  P_Rewind );.  as
26060 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
26070 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
26080 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
26090 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  evIfOpen.       
260a0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
260b0 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
260c0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
260d0 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
260e0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
260f0 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  );..  rc = pOp->
26100 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
26110 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
26120 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
26130 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26140 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
26150 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
26160 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s==0,2);.  if( r
26170 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d  es==0 ){.    pC-
26180 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
26190 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
261a0 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   1;.    p->aCoun
261b0 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
261c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
261d0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
261e0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
261f0 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20  endif.  }else{. 
26200 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
26210 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f   1;.  }.  pC->ro
26220 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
26230 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
26240 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
26250 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
26260 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50  ert P1 P2 P3 * P
26270 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
26280 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52  ey=r[P2].**.** R
26290 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
262a0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
262b0 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
262c0 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
262d0 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
262e0 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
262f0 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
26300 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
26310 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
26320 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
26330 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74  * P3 is a flag t
26340 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68  hat provides a h
26350 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
26360 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69  e layer that thi
26370 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c  s.** insert is l
26380 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
26390 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ppend..**.** If 
263a0 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
263b0 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65  G_NCHANGE bit se
263c0 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  t, then the chan
263d0 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a  ge counter is.**
263e0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
263f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
26400 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
26410 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20  _NCHANGE bit is 
26420 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  clear,.** then t
26430 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
26440 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  r is unchanged..
26450 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
26460 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
26470 45 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65 74  EKRESULT bit set
26480 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
26490 72 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a  r must have.** j
264a0 75 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b 20  ust done a seek 
264b0 74 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65 72  to the spot wher
264c0 65 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79 20  e the new entry 
264d0 69 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  is to be inserte
264e0 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67 20  d..** This flag 
264f0 61 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e 20  avoids doing an 
26500 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a  extra seek..**.*
26510 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
26520 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  on only works fo
26530 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20  r indices.  The 
26540 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
26550 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61  uction.** for ta
26560 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72  bles is OP_Inser
26570 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
26580 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20  rterInsert:     
26590 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65    /* in2 */.case
265a0 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b   OP_IdxInsert: {
265b0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
265c0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
265d0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
265e0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65  pCrsr;.  int nKe
265f0 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  y;.  const char 
26600 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74  *zKey;..  assert
26610 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
26620 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
26630 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
26640 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
26650 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
26660 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
26670 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
26680 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
26690 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70  erInsert) );.  p
266a0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
266b0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
266c0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
266d0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73  M_Blob );.  pCrs
266e0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
266f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
26700 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
26710 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
26720 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
26730 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
26740 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
26750 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
26760 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  lob(pIn2);.  if(
26770 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
26780 7b 0a 20 20 20 20 69 66 28 20 69 73 53 6f 72 74  {.    if( isSort
26790 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20  er(pC) ){.      
267a0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
267b0 53 6f 72 74 65 72 57 72 69 74 65 28 64 62 2c 20  SorterWrite(db, 
267c0 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d  pC, pIn2);.    }
267d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79  else{.      nKey
267e0 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
267f0 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a    zKey = pIn2->z
26800 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
26810 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
26820 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65  pCrsr, zKey, nKe
26830 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70  y, "", 0, 0, pOp
26840 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20  ->p3, .         
26850 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
26860 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
26870 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
26880 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20  ult : 0).       
26890 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65     );.      asse
268a0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
268b0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
268c0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
268d0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
268e0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
268f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26900 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
26910 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
26920 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40  opsis: key=r[P2@
26930 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  P3].**.** The co
26940 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69  ntent of P3 regi
26950 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61  sters starting a
26960 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f  t register P2 fo
26970 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65  rm.** an unpacke
26980 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69  d index key. Thi
26990 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73  s opcode removes
269a0 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d   that entry from
269b0 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f   the .** index o
269c0 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
269d0 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P1..*/.case OP_I
269e0 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  dxDelete: {.  Vd
269f0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
26a00 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
26a10 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
26a20 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
26a30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26a40 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
26a50 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
26a60 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
26a70 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
26a80 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65  sor)+1 );.  asse
26a90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26aa0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26ab0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
26ac0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26ad0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26ae0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
26af0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
26b00 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
26b10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26b20 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b  >p5==0 );.  r.pK
26b30 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
26b40 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c  yInfo;.  r.nFiel
26b50 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33  d = (u16)pOp->p3
26b60 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63  ;.  r.default_rc
26b70 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d   = 0;.  r.aMem =
26b80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
26b90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26ba0 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
26bb0 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
26bc0 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
26bd0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
26be0 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
26bf0 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69  ndif.  rc = sqli
26c00 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
26c10 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72  packed(pCrsr, &r
26c20 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
26c30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
26c40 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
26c50 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
26c60 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
26c70 72 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  r);.  }.  assert
26c80 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
26c90 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d  veto==0 );.  pC-
26ca0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26cb0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72  ACHE_STALE;.  br
26cc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26cd0 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50  e: IdxRowid P1 P
26ce0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
26cf0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
26d00 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
26d10 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
26d20 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
26d30 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
26d40 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
26d50 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
26d60 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
26d70 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
26d80 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
26d90 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
26da0 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
26db0 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
26dc0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
26dd0 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
26de0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
26df0 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f   Rowid, MakeReco
26e00 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rd..*/.case OP_I
26e10 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
26e20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
26e30 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
26e40 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
26e50 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26e60 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a  C;.  i64 rowid;.
26e70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26e80 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
26e90 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
26ea0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26eb0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
26ec0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
26ed0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
26ee0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
26ef0 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  sr!=0 );.  pOut-
26f00 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
26f10 6c 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  l;.  rc = sqlite
26f20 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
26f30 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56  o(pC);.  if( NEV
26f40 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62  ER(rc) ) goto ab
26f50 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
26f60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26f70 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
26f80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26f90 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
26fa0 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c  .  if( !pC->null
26fb0 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64  Row ){.    rowid
26fc0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
26fd0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
26fe0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
26ff0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
27000 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
27010 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72  xRowid(db, pCrsr
27020 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69  , &rowid);.    i
27030 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
27040 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
27050 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
27060 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  r;.    }.    pOu
27070 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
27080 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
27090 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20  = MEM_Int;.  }. 
270a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
270b0 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
270c0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
270d0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
270e0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
270f0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
27100 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
27110 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
27120 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
27130 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
27140 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  e PRIMARY KEY.  
27150 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
27160 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
27170 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
27180 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
27190 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
271a0 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
271b0 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
271c0 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74   .** fields at t
271d0 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  he end..**.** If
271e0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
271f0 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
27200 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
27210 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
27220 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
27230 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
27240 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
27250 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
27260 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
27270 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20   IdxGT P1 P2 P3 
27280 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
27290 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
272a0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
272b0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
272c0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
272d0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
272e0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
272f0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
27300 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
27310 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
27320 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
27330 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
27340 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27350 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
27360 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
27370 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
27380 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
27390 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
273a0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
273b0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
273c0 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
273d0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
273e0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
273f0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
27400 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
27410 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
27420 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50  IdxLT P1 P2 P3 P
27430 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
27440 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
27450 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
27460 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
27470 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
27480 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
27490 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
274a0 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
274b0 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
274c0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
274d0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
274e0 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
274f0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
27500 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
27510 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
27520 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
27530 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
27540 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
27550 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
27560 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
27570 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
27580 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
27590 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
275a0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
275b0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
275c0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
275d0 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50  IdxLE P1 P2 P3 P
275e0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
275f0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
27600 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
27610 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
27620 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
27630 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
27640 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
27650 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
27660 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
27670 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
27680 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
27690 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
276a0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
276b0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
276c0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
276d0 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
276e0 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
276f0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
27700 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
27710 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
27720 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
27730 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
27740 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74  ump.** to P2. Ot
27750 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
27760 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
27770 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
27780 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20  .case OP_IdxLE: 
27790 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
277a0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
277b0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
277c0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
277d0 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLT:          /
277e0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
277f0 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20  P_IdxGE:  {     
27800 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
27810 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
27820 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
27830 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
27840 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27850 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27860 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27870 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27880 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27890 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
278a0 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
278b0 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
278c0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a  C->pCursor!=0);.
278d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
278e0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
278f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27900 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
27910 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  p5==1 );.  asser
27920 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
27930 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e  P4_INT32 );.  r.
27940 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
27950 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
27960 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
27970 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d  p4.i;.  if( pOp-
27980 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54  >opcode<OP_IdxLT
27990 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
279a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
279b0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
279c0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
279d0 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
279e0 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  rc = -1;.  }else
279f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
27a00 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
27a10 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
27a20 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
27a30 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
27a40 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d   = 0;.  }.  r.aM
27a50 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
27a60 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
27a70 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
27a80 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
27a90 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
27aa0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
27ab0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
27ac0 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d  }.#endif.  res =
27ad0 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
27ae0 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
27af0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
27b00 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
27b10 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
27b20 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20  Compare(pC, &r, 
27b30 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
27b40 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28   (OP_IdxLE&1)==(
27b50 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28  OP_IdxLT&1) && (
27b60 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50  OP_IdxGE&1)==(OP
27b70 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69  _IdxGT&1) );.  i
27b80 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26  f( (pOp->opcode&
27b90 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29  1)==(OP_IdxLT&1)
27ba0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27bb0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27bc0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
27bd0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
27be0 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73  ;.    res = -res
27bf0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
27c00 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
27c10 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
27c20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27c30 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxGT );.    res
27c40 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  ++;.  }.  VdbeBr
27c50 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c  anchTaken(res>0,
27c60 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  2);.  if( res>0 
27c70 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
27c80 3e 70 32 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20  >p2 - 1 ;.  }.  
27c90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
27ca0 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
27cb0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
27cc0 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
27cd0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
27ce0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
27cf0 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
27d00 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
27d10 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
27d20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
27d30 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
27d40 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
27d50 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
27d60 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
27d70 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
27d80 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
27d90 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
27da0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
27db0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
27dc0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
27dd0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
27de0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
27df0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
27e00 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
27e10 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
27e20 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
27e30 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
27e40 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
27e50 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
27e60 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
27e70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
27e80 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
27e90 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
27ea0 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
27eb0 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
27ec0 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
27ed0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
27ee0 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
27ef0 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
27f00 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
27f10 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
27f20 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
27f30 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
27f40 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
27f50 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
27f60 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
27f70 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
27f80 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
27f90 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
27fa0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
27fb0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
27fc0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
27fd0 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
27fe0 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
27ff0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
28000 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
28010 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
28020 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
28030 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
28040 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
28050 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
28060 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
28070 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
28080 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
28090 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
280a0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69  eadOnly==0 );.#i
280b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
280c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
280d0 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72   iCnt = 0;.  for
280e0 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65  (pVdbe=db->pVdbe
280f0 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d  ; pVdbe; pVdbe =
28100 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a   pVdbe->pNext){.
28110 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d      if( pVdbe->m
28120 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
28130 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 62  _RUN && pVdbe->b
28140 49 73 52 65 61 64 65 72 20 0a 20 20 20 20 20 26  IsReader .     &
28150 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
28160 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
28170 2d 3e 70 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a  ->pc>=0 .    ){.
28180 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20        iCnt++;.  
28190 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20    }.  }.#else.  
281a0 69 43 6e 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65  iCnt = db->nVdbe
281b0 52 65 61 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70  Read;.#endif.  p
281c0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
281d0 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e  _Null;.  if( iCn
281e0 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  t>1 ){.    rc = 
281f0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
28200 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
28210 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
28220 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
28230 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
28240 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b  sert( iCnt==1 );
28250 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
28260 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
28270 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
28280 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f    iMoved = 0;  /
28290 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
282a0 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  nly to silence a
282b0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
282c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
282d0 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e  eeDropTable(db->
282e0 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f  aDb[iDb].pBt, pO
282f0 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b  p->p1, &iMoved);
28300 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
28310 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
28320 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76  pOut->u.i = iMov
28330 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ed;.#ifndef SQLI
28340 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
28350 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  UM.    if( rc==S
28360 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76  QLITE_OK && iMov
28370 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ed!=0 ){.      s
28380 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
28390 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f  ved(db, iDb, iMo
283a0 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
283b0 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44       /* All OP_D
283c0 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
283d0 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73  s occur on the s
283e0 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20  ame btree */.   
283f0 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74     assert( reset
28400 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30  SchemaOnFault==0
28410 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f   || resetSchemaO
28420 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b  nFault==iDb+1 );
28430 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65  .      resetSche
28440 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b  maOnFault = iDb+
28450 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
28460 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
28470 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
28480 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
28490 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
284a0 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
284b0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
284c0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
284d0 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
284e0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
284f0 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
28500 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
28510 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
28520 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
28530 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
28540 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
28550 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
28560 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
28570 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
28580 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
28590 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
285a0 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
285b0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
285c0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
285d0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
285e0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
285f0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
28600 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
28610 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
28620 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
28630 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
28640 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
28650 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
28660 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
28670 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
28680 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
28690 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
286a0 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
286b0 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
286c0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
286d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
286e0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
286f0 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
28700 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
28710 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
28720 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
28730 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
28740 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
28750 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
28760 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
28770 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
28780 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
28790 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
287a0 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
287b0 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
287c0 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67  ange;. .  nChang
287d0 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
287e0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
287f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
28800 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
28810 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29  Mask, pOp->p2) )
28820 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
28830 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
28840 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
28850 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
28860 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
28870 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
28880 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
28890 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
288a0 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
288b0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
288c0 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
288d0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
288e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
288f0 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
28900 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
28910 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
28920 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e    aMem[pOp->p3].
28930 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  u.i += nChange;.
28940 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
28950 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28960 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
28970 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
28980 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
28990 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
289a0 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
289b0 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
289c0 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
289d0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
289e0 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
289f0 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
28a00 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
28a10 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
28a20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
28a30 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
28a40 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
28a50 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
28a60 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
28a70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28a80 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
28a90 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
28aa0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
28ab0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28ac0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
28ad0 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29 7b  ( pC->pSorter ){
28ae0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
28af0 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20  SorterReset(db, 
28b00 70 43 2d 3e 70 53 6f 72 74 65 72 29 3b 0a 20 20  pC->pSorter);.  
28b10 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
28b20 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
28b30 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
28b40 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
28b50 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
28b60 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  ->pCursor);.  }.
28b70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28b80 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
28b90 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
28ba0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
28bb0 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
28bc0 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
28bd0 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
28be0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
28bf0 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
28c00 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
28c10 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
28c20 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
28c30 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
28c40 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
28c50 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
28c60 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
28c70 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
28c80 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
28c90 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
28ca0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
28cb0 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
28cc0 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
28cd0 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
28ce0 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
28cf0 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
28d00 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
28d10 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
28d20 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
28d30 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
28d40 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
28d50 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
28d60 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
28d70 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
28d80 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
28d90 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
28da0 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63  b=P1.**.** Alloc
28db0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
28dc0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
28dd0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
28de0 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
28df0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
28e00 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
28e10 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
28e20 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
28e30 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
28e40 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
28e50 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
28e60 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
28e70 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
28e80 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
28e90 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
28ea0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
28eb0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
28ec0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
28ed0 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
28ee0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
28ef0 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50  lease */.case OP
28f00 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
28f10 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
28f20 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
28f30 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
28f40 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
28f50 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a  b;..  pgno = 0;.
28f60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28f70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28f80 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
28f90 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
28fa0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
28fb0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
28fc0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
28fd0 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
28fe0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
28ff0 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
29000 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  pBt!=0 );.  if( 
29010 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
29020 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20  CreateTable ){. 
29030 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54     /* flags = BT
29040 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20  REE_INTKEY; */. 
29050 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
29060 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
29070 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
29080 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d  REE_BLOBKEY;.  }
29090 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
290a0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
290b0 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pDb->pBt, &pgno,
290c0 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d   flags);.  pOut-
290d0 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62  >u.i = pgno;.  b
290e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
290f0 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20  de: ParseSchema 
29100 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
29110 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
29120 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
29130 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  m the SQLITE_MAS
29140 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74  TER table of dat
29150 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74  abase P1.** that
29160 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45   match the WHERE
29170 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a   clause P4. .**.
29180 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
29190 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
291a0 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
291b0 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
291c0 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
291d0 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
291e0 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
291f0 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
29200 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
29210 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
29220 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  : {.  int iDb;. 
29230 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
29240 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53  ster;.  char *zS
29250 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69  ql;.  InitData i
29260 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41  nitData;..  /* A
29270 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ny prepared stat
29280 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b  ement that invok
29290 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  es this opcode w
292a0 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73  ill hold mutexes
292b0 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62  .  ** on every b
292c0 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61  tree.  This is a
292d0 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f   prerequisite fo
292e0 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a  r invoking .  **
292f0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
29300 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66  back()..  */.#if
29310 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
29320 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44  .  for(iDb=0; iD
29330 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
29340 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  ){.    assert( i
29350 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33  Db==1 || sqlite3
29360 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
29370 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
29380 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ) );.  }.#endif.
29390 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
293a0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
293b0 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
293c0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
293d0 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
293e0 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
293f0 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55  oaded) );.  /* U
29400 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64  sed to be a cond
29410 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20  itional */ {.   
29420 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d   zMaster = SCHEM
29430 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20  A_TABLE(iDb);.  
29440 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
29450 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
29460 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .iDb = pOp->p1;.
29470 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
29480 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
29490 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  Msg;.    zSql = 
294a0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
294b0 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
294c0 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
294d0 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e  , sql FROM '%q'.
294e0 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45  %s WHERE %s ORDE
294f0 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20  R BY rowid",.   
29500 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
29510 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  .zName, zMaster,
29520 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
29530 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
29540 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
29550 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c  E_NOMEM;.    }el
29560 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
29570 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
29580 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
29590 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
295a0 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
295b0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
295c0 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
295d0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
295e0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
295f0 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
29600 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
29610 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
29620 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
29630 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
29640 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
29650 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
29660 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
29670 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
29680 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
29690 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
296a0 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
296b0 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
296c0 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63  on(db);.  if( rc
296d0 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
296e0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
296f0 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  m;.  }.  break; 
29700 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
29710 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
29720 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
29730 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
29740 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
29750 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
29760 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
29770 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
29780 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
29790 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
297a0 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
297b0 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
297c0 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
297d0 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
297e0 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
297f0 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
29800 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
29810 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
29820 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
29830 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
29840 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
29850 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
29860 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
29870 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
29880 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b  p->p1);.  break;
29890 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
298a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
298b0 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
298c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
298d0 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
298e0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
298f0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
29900 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
29910 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
29920 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
29930 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
29940 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
29950 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
29960 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
29970 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
29980 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
29990 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
299a0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
299b0 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
299c0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
299d0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
299e0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
299f0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
29a00 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
29a10 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
29a20 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
29a30 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
29a40 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
29a50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29a60 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
29a70 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
29a80 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
29a90 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
29aa0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
29ab0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
29ac0 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
29ad0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
29ae0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
29af0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
29b00 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
29b10 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
29b20 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
29b30 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72  opcode).** in or
29b40 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
29b50 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
29b60 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
29b70 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
29b80 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
29b90 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
29ba0 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
29bb0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
29bc0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
29bd0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
29be0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
29bf0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29c00 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
29c10 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
29c20 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
29c30 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
29c40 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
29c50 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
29c60 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
29c70 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
29c80 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
29c90 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
29ca0 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
29cb0 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
29cc0 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
29cd0 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
29ce0 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
29cf0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
29d00 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
29d10 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
29d20 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
29d30 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
29d40 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
29d50 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
29d60 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
29d70 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
29d80 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
29d90 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
29da0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
29db0 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
29dc0 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
29dd0 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20  tyCk P1 P2 P3 * 
29de0 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
29df0 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
29e00 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
29e10 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
29e20 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
29e30 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
29e40 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
29e50 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
29e60 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
29e70 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
29e80 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
29e90 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
29ea0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
29eb0 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
29ec0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
29ed0 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
29ee0 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
29ef0 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
29f00 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
29f10 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
29f20 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
29f30 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
29f40 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
29f50 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
29f60 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
29f70 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
29f80 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
29f90 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
29fa0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
29fb0 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
29fc0 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
29fd0 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a  se are integer.*
29fe0 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28  * stored in reg(
29ff0 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
2a000 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20  reg(P1+2), .... 
2a010 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61   There are P2 ta
2a020 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a  bles.** total..*
2a030 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
2a040 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
2a050 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
2a060 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2a070 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
2a080 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2a090 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2a0a0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
2a0b0 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
2a0c0 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
2a0d0 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
2a0e0 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
2a0f0 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
2a100 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
2a110 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
2a120 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
2a130 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
2a140 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
2a150 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
2a160 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
2a170 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
2a180 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
2a190 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f  nt j;          /
2a1a0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
2a1b0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
2a1c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2a1d0 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
2a1e0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
2a1f0 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
2a200 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
2a210 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
2a220 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
2a230 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
2a240 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2a250 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ning */..  asser
2a260 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
2a270 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70  );.  nRoot = pOp
2a280 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
2a290 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f  nRoot>0 );.  aRo
2a2a0 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ot = sqlite3DbMa
2a2b0 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
2a2c0 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31  of(int)*(nRoot+1
2a2d0 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74  ) );.  if( aRoot
2a2e0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2a2f0 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
2a300 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
2a310 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
2a320 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45  Cursor) );.  pnE
2a330 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rr = &aMem[pOp->
2a340 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
2a350 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
2a360 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
2a370 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
2a380 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
2a390 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
2a3a0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
2a3b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
2a3c0 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a  (j=0; j<nRoot; j
2a3d0 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a  ++){.    aRoot[j
2a3e0 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33  ] = (int)sqlite3
2a3f0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49  VdbeIntValue(&pI
2a400 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52  n1[j]);.  }.  aR
2a410 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73  oot[j] = 0;.  as
2a420 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
2a430 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2a440 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2a450 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2a460 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71  >p5) );.  z = sq
2a470 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
2a480 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
2a490 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
2a4a0 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
2a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
2a4d0 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
2a4e0 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
2a4f0 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74  DbFree(db, aRoot
2a500 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
2a510 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
2a520 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2a530 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
2a540 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
2a550 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
2a560 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
2a570 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
2a580 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
2a590 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2a5a0 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
2a5b0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
2a5c0 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
2a5d0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2a5e0 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
2a5f0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2a600 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
2a610 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
2a620 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2a630 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
2a640 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
2a650 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
2a660 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
2a670 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
2a680 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a  owset(P1)=r[P2].
2a690 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
2a6a0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
2a6b0 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
2a6c0 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61  P2 into a boolea
2a6d0 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20  n index.** held 
2a6e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
2a6f0 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
2a700 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
2a710 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
2a720 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
2a730 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
2a740 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
2a750 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2a760 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
2a770 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2a780 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32  .  assert( (pIn2
2a790 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2a7a0 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  t)!=0 );.  if( (
2a7b0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2a7c0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
2a7d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2a7e0 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
2a7f0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
2a800 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2a810 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
2a820 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71  no_mem;.  }.  sq
2a830 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
2a840 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2a850 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20  t, pIn2->u.i);. 
2a860 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2a870 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64  code: RowSetRead
2a880 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2a890 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
2a8a0 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a  ]=rowset(P1).**.
2a8b0 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
2a8c0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
2a8d0 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
2a8e0 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
2a8f0 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
2a900 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
2a910 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
2a920 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
2a930 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
2a940 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
2a950 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
2a960 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
2a970 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
2a980 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
2a990 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
2a9a0 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49    i64 val;..  pI
2a9b0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2a9c0 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
2a9d0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2a9e0 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
2a9f0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
2aa00 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2aa10 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
2aa20 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
2aa30 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
2aa40 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
2aa50 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2aa60 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20  pIn1);.    pc = 
2aa70 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2aa80 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2aa90 28 31 2c 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  (1,2);.  }else{.
2aaa0 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
2aab0 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
2aac0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
2aad0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2aae0 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
2aaf0 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 20  ->p3], val);.   
2ab00 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2ab10 28 30 2c 32 29 3b 0a 20 20 7d 0a 20 20 67 6f 74  (0,2);.  }.  got
2ab20 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2ab30 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2ab40 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
2ab50 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
2ab60 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
2ab70 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
2ab80 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2ab90 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
2aba0 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
2abb0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
2abc0 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
2abd0 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
2abe0 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
2abf0 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
2ac00 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
2ac10 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
2ac20 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
2ac30 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
2ac40 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
2ac50 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
2ac60 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
2ac70 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
2ac80 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
2ac90 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
2aca0 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
2acb0 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
2acc0 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
2acd0 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
2ace0 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
2acf0 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
2ad00 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
2ad10 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
2ad20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
2ad30 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2ad40 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
2ad50 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
2ad60 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
2ad70 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
2ad80 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
2ad90 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
2ada0 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
2adb0 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
2adc0 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
2add0 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
2ade0 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
2adf0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
2ae00 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
2ae10 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
2ae20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
2ae30 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2ae40 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
2ae50 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
2ae60 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
2ae70 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
2ae80 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
2ae90 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
2aea0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2aeb0 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
2aec0 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
2aed0 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
2aee0 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
2aef0 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
2af00 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
2af10 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
2af20 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
2af30 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
2af40 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
2af50 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
2af60 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
2af70 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
2af80 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
2af90 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
2afa0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2afb0 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
2afc0 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
2afd0 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
2afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aff0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2b000 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
2b010 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
2b020 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2b030 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2b040 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
2b050 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
2b060 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
2b070 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
2b080 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
2b090 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
2b0a0 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
2b0b0 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
2b0c0 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
2b0d0 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
2b0e0 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
2b0f0 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
2b100 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
2b110 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
2b120 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2b130 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2b140 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2b150 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2b160 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2b170 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2b180 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2b190 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
2b1a0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2b1b0 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
2b1c0 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
2b1d0 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
2b1e0 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
2b1f0 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
2b200 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
2b210 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49  RowSet, iSet, pI
2b220 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64  n3->u.i);.    Vd
2b230 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78  beBranchTaken(ex
2b240 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
2b250 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20 20  if( exists ){.  
2b260 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2b270 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61   - 1;.      brea
2b280 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  k;.    }.  }.  i
2b290 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20  f( iSet>=0 ){.  
2b2a0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
2b2b0 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
2b2c0 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69  owSet, pIn3->u.i
2b2d0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
2b2e0 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
2b2f0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
2b300 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67  ./* Opcode: Prog
2b310 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20  ram P1 P2 P3 P4 
2b320 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
2b330 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2b340 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50  gram passed as P
2b350 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52  4 (type P4_SUBPR
2b360 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50  OGRAM). .**.** P
2b370 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  1 contains the a
2b380 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65  ddress of the me
2b390 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63  mory cell that c
2b3a0 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73  ontains the firs
2b3b0 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  t memory .** cel
2b3c0 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  l in an array of
2b3d0 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20   values used as 
2b3e0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
2b3f0 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32   sub-program. P2
2b400 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68   .** contains th
2b410 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  e address to jum
2b420 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d  p to if the sub-
2b430 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61  program throws a
2b440 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63  n IGNORE .** exc
2b450 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65  eption using the
2b460 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
2b470 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63  n. Register P3 c
2b480 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2b490 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d  ess .** of a mem
2b4a0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73  ory cell in this
2b4b0 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d   (the parent) VM
2b4c0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2b4d0 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a   allocate the .*
2b4e0 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  * memory require
2b4f0 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62  d by the sub-vdb
2b500 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a  e at runtime..**
2b510 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2b520 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f  ter to the VM co
2b530 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
2b540 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a  gger program..**
2b550 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
2b560 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75  -zero, then recu
2b570 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e  rsive program in
2b580 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62  vocation is enab
2b590 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
2b5a0 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
2b5b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
2b5c0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
2b5d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2b5e0 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
2b5f0 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
2b600 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
2b610 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
2b620 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
2b630 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
2b640 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
2b650 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
2b660 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
2b670 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
2b680 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
2b690 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
2b6a0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
2b6b0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
2b6c0 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
2b6d0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
2b6e0 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
2b6f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
2b700 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
2b710 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
2b720 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2b730 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
2b740 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
2b750 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
2b760 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
2b770 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
2b780 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
2b790 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2b7b0 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
2b7c0 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
2b7d0 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
2b7e0 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
2b7f0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2b800 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50  3];.  assert( pP
2b810 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
2b820 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
2b830 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
2b840 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
2b850 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2b860 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
2b870 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
2b880 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
2b890 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
2b8a0 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
2b8b0 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
2b8c0 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
2b8d0 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
2b8e0 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
2b8f0 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
2b900 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
2b910 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
2b920 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
2b930 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
2b940 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
2b950 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
2b960 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
2b970 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
2b980 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
2b990 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
2b9a0 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
2b9b0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
2b9c0 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
2b9d0 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
2b9e0 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
2b9f0 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
2ba00 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
2ba10 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
2ba20 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
2ba30 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
2ba40 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
2ba50 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
2ba60 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
2ba70 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
2ba80 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
2ba90 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
2baa0 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
2bab0 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
2bac0 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
2bad0 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
2bae0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
2baf0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
2bb00 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
2bb10 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
2bb20 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
2bb30 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
2bb40 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
2bb50 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
2bb60 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
2bb70 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
2bb80 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
2bb90 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
2bba0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
2bbb0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2bbc0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2bbd0 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  b, "too many lev
2bbe0 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
2bbf0 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
2bc00 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
2bc10 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
2bc20 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2bc30 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2bc40 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
2bc50 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
2bc60 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
2bc70 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
2bc80 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
2bc90 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
2bca0 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
2bcb0 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
2bcc0 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
2bcd0 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
2bce0 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
2bcf0 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
2bd00 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
2bd10 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
2bd20 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
2bd30 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
2bd40 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
2bd50 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
2bd60 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
2bd70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
2bd80 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
2bd90 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
2bda0 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
2bdb0 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
2bdc0 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
2bdd0 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
2bde0 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
2bdf0 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
2be00 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
2be10 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
2be20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
2be30 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
2be40 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
2be50 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
2be60 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
2be70 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
2be80 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
2be90 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2bea0 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
2beb0 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
2bec0 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
2bed0 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
2bee0 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
2bef0 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
2bf00 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
2bf10 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20  dbeCursor *).   
2bf20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2bf30 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73  ogram->nOnce * s
2bf40 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70  izeof(u8);.    p
2bf50 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
2bf60 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
2bf70 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
2bf80 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
2bf90 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2bfa0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
2bfb0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
2bfc0 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
2bfd0 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
2bfe0 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
2bff0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
2c000 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
2c010 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
2c020 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
2c030 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
2c040 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
2c050 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
2c060 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
2c070 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
2c080 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
2c090 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
2c0a0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
2c0b0 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
2c0c0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
2c0d0 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
2c0e0 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
2c0f0 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
2c100 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
2c110 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
2c120 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
2c130 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
2c140 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61  pFrame->aOnceFla
2c150 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  g = p->aOnceFlag
2c160 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2c170 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e  nceFlag = p->nOn
2c180 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e  ceFlag;..    pEn
2c190 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
2c1a0 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
2c1b0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
2c1c0 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
2c1d0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
2c1e0 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
2c1f0 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
2c200 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
2c210 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
2c220 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
2c230 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
2c240 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
2c250 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
2c260 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2c270 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
2c280 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
2c290 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73  ldMem );.    ass
2c2a0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2c2b0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
2c2c0 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
2c2d0 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65  sert( pc==pFrame
2c2e0 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
2c2f0 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
2c300 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
2c310 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
2c320 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
2c330 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46   lastRowid;.  pF
2c340 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
2c350 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d  p->nChange;.  p-
2c360 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
2c370 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
2c380 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20  me;.  p->aMem = 
2c390 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d  aMem = &VdbeFram
2c3a0 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d  eMem(pFrame)[-1]
2c3b0 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
2c3c0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
2c3d0 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
2c3e0 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
2c3f0 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
2c400 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
2c410 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
2c420 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d  m+1];.  p->aOp =
2c430 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d   aOp = pProgram-
2c440 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d  >aOp;.  p->nOp =
2c450 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a   pProgram->nOp;.
2c460 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d    p->aOnceFlag =
2c470 20 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72   (u8 *)&p->apCsr
2c480 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20  [p->nCursor];.  
2c490 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70  p->nOnceFlag = p
2c4a0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a  Program->nOnce;.
2c4b0 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d    pc = -1;.  mem
2c4c0 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  set(p->aOnceFlag
2c4d0 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  , 0, p->nOnceFla
2c4e0 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  g);..  break;.}.
2c4f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61  ./* Opcode: Para
2c500 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
2c510 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2c520 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65  is only ever pre
2c530 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67  sent in sub-prog
2c540 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20  rams called via 
2c550 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72  the .** OP_Progr
2c560 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  am instruction. 
2c570 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72  Copy a value cur
2c580 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e  rently stored in
2c590 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65   a memory .** ce
2c5a0 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  ll of the callin
2c5b0 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65  g (parent) frame
2c5c0 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74   to cell P2 in t
2c5d0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
2c5e0 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70  s .** address sp
2c5f0 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65  ace. This is use
2c600 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
2c610 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20  grams to access 
2c620 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e  the new.* .** an
2c630 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a  d old.* values..
2c640 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73  **.** The addres
2c650 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e  s of the cell in
2c660 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
2c670 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
2c680 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65  by adding.** the
2c690 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
2c6a0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2c6b0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
2c6c0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2c6d0 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  .** calling OP_P
2c6e0 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
2c6f0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  on..*/.case OP_P
2c700 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  aram: {         
2c710 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
2c720 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72  ease */.  VdbeFr
2c730 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
2c740 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d  em *pIn;.  pFram
2c750 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
2c760 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e   pIn = &pFrame->
2c770 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70  aMem[pOp->p1 + p
2c780 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d  Frame->aOp[pFram
2c790 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20  e->pc].p1];   . 
2c7a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2c7b0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
2c7c0 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29   pIn, MEM_Ephem)
2c7d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65  ;.  break;.}..#e
2c7e0 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
2c7f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2c800 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  GER */..#ifndef 
2c810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2c820 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64  IGN_KEY./* Opcod
2c830 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20  e: FkCounter P1 
2c840 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2c850 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b  psis: fkctr[P1]+
2c860 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  =P2.**.** Increm
2c870 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
2c880 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
2c890 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
2c8a0 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
2c8b0 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
2c8c0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
2c8d0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2c8e0 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
2c8f0 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
2c900 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
2c910 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
2c920 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
2c930 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
2c940 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
2c950 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2c960 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
2c970 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2c980 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
2c990 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
2c9a0 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
2c9b0 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  & SQLITE_DeferFK
2c9c0 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  s ){.    db->nDe
2c9d0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d  ferredImmCons +=
2c9e0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2c9f0 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b  e if( pOp->p1 ){
2ca00 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2ca10 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
2ca20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
2ca30 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2ca40 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2ca50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ca60 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
2ca70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2ca80 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63  Synopsis: if fkc
2ca90 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50  tr[P1]==0 goto P
2caa0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
2cab0 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66  ode tests if a f
2cac0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2cad0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
2cae0 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e   currently zero.
2caf0 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20  .** If so, jump 
2cb00 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
2cb10 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2cb20 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2cb30 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72  e next .** instr
2cb40 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
2cb50 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2cb60 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69   then the jump i
2cb70 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64  s taken if the d
2cb80 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
2cb90 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73  nt-counter.** is
2cba0 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74   zero (the one t
2cbb0 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72  hat counts defer
2cbc0 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  red constraint v
2cbd0 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50  iolations). If P
2cbe0 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68  1 is.** zero, th
2cbf0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2cc00 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  if the statement
2cc10 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2cc20 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28  ter is zero.** (
2cc30 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2cc40 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2cc50 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f   violations)..*/
2cc60 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72  .case OP_FkIfZer
2cc70 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  o: {         /* 
2cc80 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f  jump */.  if( pO
2cc90 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62  p->p1 ){.    Vdb
2cca0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d  eBranchTaken(db-
2ccb0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2ccc0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2ccd0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
2cce0 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  ;.    if( db->nD
2ccf0 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2cd00 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2cd10 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2cd20 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
2cd30 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
2cd40 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
2cd50 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
2cd60 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2cd70 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
2cd80 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
2cd90 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
2cda0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2cdb0 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2cdc0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
2cdd0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23  k;.}.#endif /* #
2cde0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cdf0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a  IT_FOREIGN_KEY *
2ce00 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2ce10 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2ce20 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MENT./* Opcode: 
2ce30 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a  MemMax P1 P2 * *
2ce40 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ce50 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c  r[P1]=max(r[P1],
2ce60 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20  r[P2]).**.** P1 
2ce70 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
2ce80 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
2ce90 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20  of this VM (the 
2cea0 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a  root frame is.**
2ceb0 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
2cec0 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
2ced0 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75  e if this instru
2cee0 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
2cef0 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69  xecuted.** withi
2cf00 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29  n a sub-program)
2cf10 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  . Set the value 
2cf20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74  of register P1 t
2cf30 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  o the maximum of
2cf40 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74   .** its current
2cf50 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76   value and the v
2cf60 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
2cf70 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
2cf80 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
2cf90 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
2cfa0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
2cfb0 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
2cfc0 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
2cfd0 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
2cfe0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
2cff0 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  2 */.  VdbeFrame
2d000 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20   *pFrame;.  if( 
2d010 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
2d020 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
2d030 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
2d040 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
2d050 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2d060 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72  .    pIn1 = &pFr
2d070 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2d080 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
2d090 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2d0a0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73  p->p1];.  }.  as
2d0b0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2d0c0 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
2d0d0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2d0e0 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
2d0f0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2d100 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
2d110 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2d120 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
2d130 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
2d140 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
2d150 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
2d160 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2d170 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2d180 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2d190 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2d1a0 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
2d1b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2d1c0 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74 6f 20 50  f r[P1]>0 goto P
2d1d0 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  2.**.** If the v
2d1e0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2d1f0 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
2d200 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
2d210 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2d220 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2d230 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2d240 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2d250 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2d260 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2d270 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2d280 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2d290 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2d2a0 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
2d2b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2d2c0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2d2d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2d2e0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2d2f0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2d300 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2d310 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c  en( pIn1->u.i>0,
2d320 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
2d330 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70  >u.i>0 ){.     p
2d340 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2d350 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d360 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65  ./* Opcode: IfNe
2d370 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  g P1 P2 * * *.**
2d380 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
2d390 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  P1]<0 goto P2.**
2d3a0 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
2d3b0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2d3c0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72  is less than zer
2d3d0 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  o, jump to P2. .
2d3e0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2d3f0 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2d400 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2d410 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2d420 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2d430 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2d440 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2d450 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2d460 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2d470 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20  se OP_IfNeg: {  
2d480 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2d490 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2d4a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2d4b0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2d4c0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2d4d0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2d4e0 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32  n(pIn1->u.i<0, 2
2d4f0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2d500 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20  .i<0 ){.     pc 
2d510 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2d520 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2d530 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f  * Opcode: IfZero
2d540 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2d550 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2d560 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d  +=P3, if r[P1]==
2d570 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2d580 54 68 65 20 72 65 67 69 73 74 65 72 20 50 31 20  The register P1 
2d590 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2d5a0 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69  integer.  Add li
2d5b0 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a  teral P3 to the.
2d5c0 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
2d5d0 73 74 65 72 20 50 31 2e 20 20 49 66 20 74 68 65  ster P1.  If the
2d5e0 20 72 65 73 75 6c 74 20 69 73 20 65 78 61 63 74   result is exact
2d5f0 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ly 0, jump to P2
2d600 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
2d610 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
2d620 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2d630 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
2d640 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
2d650 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2d660 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
2d670 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
2d680 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
2d690 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a  .case OP_IfZero:
2d6a0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2d6b0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2d6c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2d6d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2d6e0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2d6f0 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20   );.  pIn1->u.i 
2d700 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64  += pOp->p3;.  Vd
2d710 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
2d720 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
2d730 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
2d740 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  =0 ){.     pc = 
2d750 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2d760 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d770 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
2d780 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
2d790 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2d7a0 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
2d7b0 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
2d7c0 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
2d7d0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
2d7e0 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
2d7f0 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
2d800 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
2d810 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2d820 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
2d830 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
2d840 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
2d850 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
2d860 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
2d870 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
2d880 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
2d890 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
2d8a0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
2d8b0 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
2d8c0 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
2d8d0 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
2d8e0 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
2d8f0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
2d900 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74  m *pRec;.  sqlit
2d910 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
2d920 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2d930 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20  **apVal;..  n = 
2d940 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
2d950 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65  t( n>=0 );.  pRe
2d960 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  c = &aMem[pOp->p
2d970 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  2];.  apVal = p-
2d980 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
2d990 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
2d9a0 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
2d9b0 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b  n; i++, pRec++){
2d9c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
2d9d0 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
2d9e0 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
2d9f0 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  pRec;.    memAbo
2da00 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52  utToChange(p, pR
2da10 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70  ec);.  }.  ctx.p
2da20 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
2da30 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20  Func;.  assert( 
2da40 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2da50 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
2da60 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2da70 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20  ctx.pMem = pMem 
2da80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2da90 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20  ;.  pMem->n++;. 
2daa0 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
2dab0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
2dac0 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e  .z = 0;.  ctx.s.
2dad0 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63  zMalloc = 0;.  c
2dae0 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20  tx.s.xDel = 0;. 
2daf0 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a   ctx.s.db = db;.
2db00 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20    ctx.isError = 
2db10 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  0;.  ctx.pColl =
2db20 20 30 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c   0;.  ctx.skipFl
2db30 61 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74  ag = 0;.  if( ct
2db40 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61  x.pFunc->funcFla
2db50 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
2db60 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20  _NEEDCOLL ){.   
2db70 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e   assert( pOp>p->
2db80 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
2db90 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70  t( pOp[-1].p4typ
2dba0 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
2dbb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2dbc0 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
2dbd0 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63  CollSeq );.    c
2dbe0 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d  tx.pColl = pOp[-
2dbf0 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d  1].p4.pColl;.  }
2dc00 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78  .  (ctx.pFunc->x
2dc10 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61  Step)(&ctx, n, a
2dc20 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  pVal); /* IMP: R
2dc30 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
2dc40 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
2dc50 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
2dc60 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2dc70 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2dc80 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2dc90 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20  ext(&ctx.s));.  
2dca0 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
2dcb0 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74  or;.  }.  if( ct
2dcc0 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20  x.skipFlag ){.  
2dcd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2dce0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
2dcf0 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20  lSeq );.    i = 
2dd00 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20  pOp[-1].p1;.    
2dd10 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
2dd20 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
2dd30 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d  aMem[i], 1);.  }
2dd40 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ..  sqlite3VdbeM
2dd50 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
2dd60 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  );..  break;.}..
2dd70 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
2dd80 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
2dd90 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
2dda0 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a  cum=r[P1] N=P2.*
2ddb0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
2ddc0 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
2ddd0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
2dde0 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
2ddf0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
2de00 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
2de10 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
2de20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
2de30 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
2de40 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
2de50 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
2de60 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
2de70 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
2de80 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
2de90 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
2dea0 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
2deb0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
2dec0 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
2ded0 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
2dee0 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
2def0 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
2df00 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
2df10 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
2df20 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
2df30 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
2df40 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
2df50 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
2df60 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
2df70 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
2df80 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
2df90 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
2dfa0 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
2dfb0 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
2dfc0 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
2dfd0 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
2dfe0 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
2dff0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2e000 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
2e010 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2e020 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
2e030 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45   & ~(MEM_Null|ME
2e040 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Agg))==0 );.  
2e050 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2e060 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d  MemFinalize(pMem
2e070 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29  , pOp->p4.pFunc)
2e080 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
2e090 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2e0a0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2e0b0 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
2e0c0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
2e0d0 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  m));.  }.  sqlit
2e0e0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2e0f0 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64  ding(pMem, encod
2e100 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
2e110 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d  AX_BLOBSIZE(pMem
2e120 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2e130 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d  VdbeMemTooBig(pM
2e140 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  em) ){.    goto 
2e150 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
2e160 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
2e170 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2e180 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63  ./* Opcode: Chec
2e190 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20  kpoint P1 P2 P3 
2e1a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70  * *.**.** Checkp
2e1b0 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31  oint database P1
2e1c0 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f  . This is a no-o
2e1d0 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63  p if P1 is not c
2e1e0 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57  urrently in.** W
2e1f0 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74  AL mode. Paramet
2e200 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20  er P2 is one of 
2e210 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2e220 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a  T_PASSIVE, FULL.
2e230 2a 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20  ** or RESTART.  
2e240 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
2e250 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
2e260 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
2e270 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
2e280 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
2e290 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
2e2a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2e2b0 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
2e2c0 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
2e2d0 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
2e2e0 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
2e2f0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
2e300 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
2e310 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
2e320 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
2e330 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
2e340 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
2e350 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
2e360 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
2e370 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
2e380 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
2e390 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
2e3a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
2e3b0 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
2e3c0 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
2e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2e3e0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
2e3f0 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
2e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e410 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
2e420 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e440 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
2e450 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
2e460 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2e470 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
2e480 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
2e490 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
2e4a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e4b0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2e4c0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
2e4d0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
2e4e0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2e4f0 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
2e500 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2e510 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
2e520 54 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d  TART.  );.  rc =
2e530 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2e540 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
2e550 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
2e560 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
2e570 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
2e580 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  USY ){.    rc = 
2e590 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
2e5a0 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
2e5b0 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
2e5c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e5d0 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
2e5e0 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
2e5f0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2e600 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
2e610 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
2e620 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
2e630 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2e640 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
2e650 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
2e660 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
2e670 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  *.**.** Change t
2e680 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
2e690 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
2e6a0 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
2e6b0 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
2e6c0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2e6d0 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
2e6e0 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
2e6f0 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
2e700 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
2e710 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
2e720 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
2e730 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
2e740 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
2e750 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
2e760 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
2e770 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
2e780 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
2e790 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
2e7a0 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
2e7b0 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
2e7c0 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
2e7d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
2e7e0 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
2e7f0 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
2e800 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
2e810 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
2e820 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2e830 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
2e840 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2e850 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
2e860 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
2e870 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
2e880 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
2e890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e8a0 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
2e8b0 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
2e8c0 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
2e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8e0 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
2e8f0 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
2e900 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
2e910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2e920 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
2e930 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
2e940 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
2e950 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
2e960 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
2e970 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
2e980 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
2e990 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
2e9a0 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
2e9b0 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
2e9c0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2e9d0 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
2e9e0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2e9f0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
2ea00 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
2ea10 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2ea20 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
2ea30 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2ea40 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2ea50 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
2ea60 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ea70 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
2ea80 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2ea90 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2eaa0 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
2eab0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2eac0 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
2ead0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2eae0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2eaf0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2eb00 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2eb10 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74  nly==0 );..  pBt
2eb20 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2eb30 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65  p1].pBt;.  pPage
2eb40 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
2eb50 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f  Pager(pBt);.  eO
2eb60 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ld = sqlite3Page
2eb70 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rGetJournalMode(
2eb80 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65  pPager);.  if( e
2eb90 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2eba0 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65  ALMODE_QUERY ) e
2ebb0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66  New = eOld;.  if
2ebc0 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f  ( !sqlite3PagerO
2ebd0 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c  kToChangeJournal
2ebe0 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65  Mode(pPager) ) e
2ebf0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66  New = eOld;..#if
2ec00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ec10 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65  _WAL.  zFilename
2ec20 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
2ec30 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20  ilename(pPager, 
2ec40 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74  1);..  /* Do not
2ec50 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74   allow a transit
2ec60 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d  ion to journal_m
2ec70 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61  ode=WAL for a da
2ec80 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74  tabase.  ** in t
2ec90 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65  emporary storage
2eca0 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64   or if the VFS d
2ecb0 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
2ecc0 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20  shared memory . 
2ecd0 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d   */.  if( eNew==
2ece0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ecf0 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c  E_WAL.   && (sql
2ed00 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69  ite3Strlen30(zFi
2ed10 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20  lename)==0      
2ed20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c       /* Temp fil
2ed30 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21  e */.       || !
2ed40 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53  sqlite3PagerWalS
2ed50 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29  upported(pPager)
2ed60 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64  )   /* No shared
2ed70 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20  -memory support 
2ed80 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77  */.  ){.    eNew
2ed90 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20   = eOld;.  }..  
2eda0 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29  if( (eNew!=eOld)
2edb0 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41  .   && (eOld==PA
2edc0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2edd0 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47  WAL || eNew==PAG
2ede0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2edf0 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28  AL).  ){.    if(
2ee00 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
2ee10 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
2ee20 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20  d>1 ){.      rc 
2ee30 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2ee40 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
2ee50 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2ee60 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
2ee70 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67     "cannot chang
2ee80 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72  e %s wal mode fr
2ee90 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
2eea0 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  saction",.      
2eeb0 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52      (eNew==PAGER
2eec0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2eed0 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74   ? "into" : "out
2eee0 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20   of").      );. 
2eef0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2ef00 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69  }else{. .      i
2ef10 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2ef20 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
2ef30 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
2ef40 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65  leaving WAL mode
2ef50 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20  , close the log 
2ef60 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73  file. If success
2ef70 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20  ful, the call.  
2ef80 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65        ** to Page
2ef90 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63  rCloseWal() chec
2efa0 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65  kpoints and dele
2efb0 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68  tes the write-ah
2efc0 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20  ead-log .       
2efd0 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
2efe0 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
2eff0 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
2f000 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f010 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  le .        ** a
2f020 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75  fter a successfu
2f030 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20  l return. .     
2f040 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63     */.        rc
2f050 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43   = sqlite3PagerC
2f060 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b  loseWal(pPager);
2f070 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
2f080 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2f090 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
2f0a0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2f0b0 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
2f0c0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2f0d0 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64    }else if( eOld
2f0e0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f0f0 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20  ODE_MEMORY ){.  
2f100 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20        /* Cannot 
2f110 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63  transition direc
2f120 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20  tly from MEMORY 
2f130 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64  to WAL.  Use mod
2f140 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a  e OFF.        **
2f150 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   as an intermedi
2f160 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  ate */.        s
2f170 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2f180 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2f190 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
2f1a0 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20  ODE_OFF);.      
2f1b0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70  }.  .      /* Op
2f1c0 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  en a transaction
2f1d0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2f1e0 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73   file. Regardles
2f1f0 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  s of the journal
2f200 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20  .      ** mode, 
2f210 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
2f220 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72   always uses a r
2f230 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
2f240 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
2f250 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
2f260 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
2f270 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  t)==0 );.      i
2f280 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2f290 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
2f2a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
2f2b0 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e  Version(pBt, (eN
2f2c0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f2d0 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20  LMODE_WAL ? 2 : 
2f2e0 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
2f2f0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
2f300 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
2f310 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66  MIT_WAL */..  if
2f320 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77  ( rc ){.    eNew
2f330 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65   = eOld;.  }.  e
2f340 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67  New = sqlite3Pag
2f350 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2f360 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2f370 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
2f380 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
2f390 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
2f3a0 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
2f3b0 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
2f3c0 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
2f3d0 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
2f3e0 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
2f3f0 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
2f400 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
2f410 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
2f420 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
2f430 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2f440 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
2f450 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
2f460 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
2f470 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
2f480 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
2f490 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
2f4a0 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
2f4b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
2f4c0 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
2f4d0 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a  Vacuum * * * * *
2f4e0 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68  .**.** Vacuum th
2f4f0 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
2f500 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2f510 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72  will cause other
2f520 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68   virtual.** mach
2f530 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74  ines to be creat
2f540 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20  ed and run.  It 
2f550 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65  may not be calle
2f560 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a  d from within.**
2f570 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
2f580 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75  */.case OP_Vacuu
2f590 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  m: {.  assert( p
2f5a0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2f5b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52  .  rc = sqlite3R
2f5c0 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72  unVacuum(&p->zEr
2f5d0 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65  rMsg, db);.  bre
2f5e0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2f5f0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2f600 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2f610 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
2f620 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
2f630 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
2f640 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
2f650 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
2f660 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
2f670 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
2f680 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
2f690 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
2f6a0 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
2f6b0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
2f6c0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2f6d0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2f6e0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2f6f0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
2f700 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
2f710 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2f720 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
2f730 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2f740 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2f750 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2f760 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2f770 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2f780 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
2f790 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2f7a0 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
2f7b0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2f7c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2f7d0 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
2f7e0 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  pBt);.  VdbeBran
2f7f0 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49  chTaken(rc==SQLI
2f800 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66  TE_DONE,2);.  if
2f810 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
2f820 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  E ){.    pc = pO
2f830 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72  p->p2 - 1;.    r
2f840 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2f850 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f860 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
2f870 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a   Expire P1 * * *
2f880 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
2f890 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
2f8a0 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e  ments to expire.
2f8b0 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65    When an expire
2f8c0 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69  d statement.** i
2f8d0 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67  s executed using
2f8e0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
2f8f0 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61  it will either a
2f900 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
2f910 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66  reprepare itself
2f920 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67   (if it was orig
2f930 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75  inally created u
2f940 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  sing sqlite3_pre
2f950 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72  pare_v2()).** or
2f960 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69   it will fail wi
2f970 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  th SQLITE_SCHEMA
2f980 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
2f990 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
2f9a0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
2f9b0 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
2f9c0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
2f9d0 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
2f9e0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
2f9f0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
2fa00 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61  s expired..*/.ca
2fa10 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
2fa20 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
2fa30 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
2fa40 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2fa50 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
2fa60 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
2fa70 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
2fa80 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2fa90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2faa0 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
2fab0 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
2fac0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
2fad0 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20  ynopsis: iDb=P1 
2fae0 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33  root=P2 write=P3
2faf0 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
2fb00 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
2fb10 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
2fb20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
2fb30 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
2fb40 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
2fb50 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
2fb60 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  abled. .**.** P1
2fb70 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
2fb80 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
2fb90 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
2fba0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
2fbb0 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c  * on which the l
2fbc0 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e  ock is acquired.
2fbd0 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20    A readlock is 
2fbe0 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d  obtained if P3==
2fbf0 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20  0 or.** a write 
2fc00 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  lock if P3==1..*
2fc10 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73  *.** P2 contains
2fc20 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
2fc30 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c  f the table to l
2fc40 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f  ock..**.** P4 co
2fc50 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
2fc60 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   to the name of 
2fc70 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2fc80 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20  locked. This is 
2fc90 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20  only.** used to 
2fca0 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f  generate an erro
2fcb0 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65  r message if the
2fcc0 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20   lock cannot be 
2fcd0 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  obtained..*/.cas
2fce0 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20  e OP_TableLock: 
2fcf0 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  {.  u8 isWriteLo
2fd00 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33  ck = (u8)pOp->p3
2fd10 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c  ;.  if( isWriteL
2fd20 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66  ock || 0==(db->f
2fd30 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64  lags&SQLITE_Read
2fd40 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a  Uncommitted) ){.
2fd50 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70      int p1 = pOp
2fd60 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72  ->p1; .    asser
2fd70 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64  t( p1>=0 && p1<d
2fd80 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73  b->nDb );.    as
2fd90 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2fda0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2fdb0 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  1) );.    assert
2fdc0 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2fdd0 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2fde0 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2fdf0 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2fe00 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2fe10 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2fe20 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2fe30 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2fe40 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2fe50 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2fe60 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2fe70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2fe80 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2fe90 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2fea0 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2feb0 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2fec0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2fed0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2fee0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2fef0 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2ff00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2ff10 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2ff20 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2ff30 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2ff40 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
2ff50 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
2ff60 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
2ff70 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
2ff80 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
2ff90 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
2ffa0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
2ffb0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
2ffc0 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
2ffd0 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
2ffe0 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
2fff0 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
30000 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
30010 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
30020 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
30030 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
30040 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
30050 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
30060 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
30070 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
30080 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
30090 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
300a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
300b0 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
300c0 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
300d0 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49  b ) sqlite3VtabI
300e0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
300f0 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
30100 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
30110 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
30120 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
30130 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30140 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30150 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
30160 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
30170 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
30180 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
30190 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
301a0 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
301b0 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
301c0 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
301d0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
301e0 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
301f0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
30200 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
30210 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
30220 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
30230 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30240 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30250 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30260 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30270 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
30280 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
30290 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
302a0 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
302b0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
302c0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
302d0 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
302e0 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
302f0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
30300 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
30310 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
30320 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
30330 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
30340 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
30350 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
30360 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
30370 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
30380 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30390 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
303a0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
303b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
303c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
303d0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
303e0 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
303f0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
30400 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
30410 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
30420 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
30430 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
30440 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
30450 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
30460 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
30470 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
30480 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
30490 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
304a0 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
304b0 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
304c0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
304d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
304e0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
304f0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
30500 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
30510 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
30520 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ule;..  assert( 
30530 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
30540 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56    pCur = 0;.  pV
30550 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20  tabCursor = 0;. 
30560 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
30570 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
30580 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69   pModule = (sqli
30590 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
305a0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
305b0 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70  ssert(pVtab && p
305c0 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20  Module);.  rc = 
305d0 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
305e0 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73  Vtab, &pVtabCurs
305f0 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  or);.  sqlite3Vt
30600 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
30610 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
30620 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b  SQLITE_OK==rc ){
30630 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
30640 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ze sqlite3_vtab_
30650 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73  cursor base clas
30660 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75  s */.    pVtabCu
30670 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56  rsor->pVtab = pV
30680 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69  tab;..    /* Ini
30690 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72  tialize vdbe cur
306a0 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  sor object */.  
306b0 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
306c0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
306d0 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20  p1, 0, -1, 0);. 
306e0 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20     if( pCur ){. 
306f0 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62       pCur->pVtab
30700 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75  Cursor = pVtabCu
30710 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rsor;.    }else{
30720 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
30730 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
30740 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
30750 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
30760 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
30770 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30780 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30790 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
307a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
307b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
307c0 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
307d0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
307e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61  * Synopsis: ipla
307f0 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50  n=r[P3] zplan='P
30800 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  4'.**.** P1 is a
30810 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
30820 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
30830 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
30840 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
30850 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
30860 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
30870 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
30880 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
30890 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
308a0 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
308b0 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
308c0 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
308d0 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
308e0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
308f0 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
30900 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
30910 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
30920 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
30930 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
30940 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
30950 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
30960 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
30970 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
30980 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
30990 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
309a0 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
309b0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
309c0 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
309d0 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
309e0 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
309f0 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
30a00 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
30a10 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
30a20 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
30a30 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
30a40 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
30a50 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
30a60 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
30a70 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
30a80 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
30a90 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
30aa0 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
30ab0 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
30ac0 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
30ad0 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
30ae0 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
30af0 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
30b00 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
30b10 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
30b20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
30b30 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
30b40 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
30b50 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
30b60 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
30b70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
30b80 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
30b90 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
30ba0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
30bb0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
30bc0 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
30bd0 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
30be0 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
30bf0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
30c00 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70  3];.  pArgc = &p
30c10 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72  Query[1];.  pCur
30c20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
30c30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
30c40 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72  memIsValid(pQuer
30c50 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  y) );.  REGISTER
30c60 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
30c70 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
30c80 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
30c90 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43  rsor );.  pVtabC
30ca0 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56  ursor = pCur->pV
30cb0 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74  tabCursor;.  pVt
30cc0 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  ab = pVtabCursor
30cd0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
30ce0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
30cf0 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
30d00 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
30d10 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
30d20 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
30d30 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
30d40 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
30d50 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
30d60 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
30d70 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
30d80 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
30d90 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
30da0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
30db0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
30dc0 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d  */.  {.    res =
30dd0 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20   0;.    apArg = 
30de0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f  p->apArg;.    fo
30df0 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b  r(i = 0; i<nArg;
30e00 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41   i++){.      apA
30e10 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
30e20 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  +1];.    }..    
30e30 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
30e40 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
30e50 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
30e60 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
30e70 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
30e80 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
30e90 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
30ea0 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
30eb0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
30ec0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
30ed0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30ee0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
30ef0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
30f00 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
30f10 20 20 7d 0a 20 20 20 20 56 64 62 65 42 72 61 6e    }.    VdbeBran
30f20 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
30f30 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
30f40 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
30f50 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
30f60 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
30f70 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
30f80 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
30f90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
30fa0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
30fb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30fc0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
30fd0 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
30fe0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
30ff0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
31000 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a  vcolumn(P2).**.*
31010 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75  * Store the valu
31020 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63  e of the P2-th c
31030 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  olumn of.** the 
31040 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75  row of the virtu
31050 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68  al-table that th
31060 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20  e .** P1 cursor 
31070 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69  is pointing to i
31080 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
31090 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c  .*/.case OP_VCol
310a0 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  umn: {.  sqlite3
310b0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
310c0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
310d0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
310e0 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73   Mem *pDest;.  s
310f0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73  qlite3_context s
31100 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65  Context;..  Vdbe
31110 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70  Cursor *pCur = p
31120 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
31130 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
31140 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
31150 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
31160 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
31170 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
31180 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
31190 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
311a0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
311b0 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
311c0 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
311d0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
311e0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
311f0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
31200 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
31210 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
31220 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
31230 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
31240 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
31250 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
31260 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
31270 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
31280 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
31290 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
312a0 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
312b0 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
312c0 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
312d0 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e  .  ** the curren
312e0 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43  t contents to sC
312f0 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63  ontext.s so in c
31300 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
31310 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20  ction .  ** can 
31320 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20  use the already 
31330 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
31340 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
31350 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e  cating a .  ** n
31360 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
31370 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
31380 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70  e(&sContext.s, p
31390 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  Dest);.  MemSetT
313a0 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78  ypeFlag(&sContex
313b0 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  t.s, MEM_Null);.
313c0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
313d0 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70  >xColumn(pCur->p
313e0 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f  VtabCursor, &sCo
313f0 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  ntext, pOp->p2);
31400 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
31410 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
31420 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e  tab);.  if( sCon
31430 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a  text.isError ){.
31440 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78      rc = sContex
31450 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a  t.isError;.  }..
31460 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
31470 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
31480 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72  tion to the P3 r
31490 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a  egister. We.  **
314a0 20 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c   do this regardl
314b0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
314c0 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f  r not an error o
314d0 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72  ccurred to ensur
314e0 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d  e any.  ** dynam
314f0 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ic allocation in
31500 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d   sContext.s (a M
31510 65 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72  em struct) is  r
31520 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20  eleased..  */.  
31530 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
31540 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74  eEncoding(&sCont
31550 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29  ext.s, encoding)
31560 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
31570 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73  emMove(pDest, &s
31580 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45  Context.s);.  RE
31590 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
315a0 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
315b0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
315c0 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69  IZE(pDest);..  i
315d0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
315e0 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
315f0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
31600 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
31610 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
31620 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
31630 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
31640 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
31650 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
31660 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
31670 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
31680 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
31690 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
316a0 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
316b0 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
316c0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
316d0 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
316e0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
316f0 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
31700 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
31710 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
31720 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
31730 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
31740 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
31750 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
31760 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
31770 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
31780 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
31790 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
317a0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
317b0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
317c0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
317d0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
317e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
317f0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
31800 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  or );.  if( pCur
31810 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
31820 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
31830 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
31840 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
31850 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
31860 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
31870 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
31880 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
31890 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
318a0 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
318b0 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
318c0 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
318d0 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
318e0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
318f0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
31900 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
31910 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
31920 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
31930 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
31940 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
31950 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
31960 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
31970 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
31980 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
31990 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
319a0 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
319b0 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
319c0 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
319d0 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
319e0 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
319f0 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61  .  */.  p->inVta
31a00 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72  bMethod = 1;.  r
31a10 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  c = pModule->xNe
31a20 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  xt(pCur->pVtabCu
31a30 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  rsor);.  p->inVt
31a40 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
31a50 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
31a60 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
31a70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
31a80 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
31a90 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
31aa0 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  f(pCur->pVtabCur
31ab0 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65  sor);.  }.  Vdbe
31ac0 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73  BranchTaken(!res
31ad0 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20  ,2);.  if( !res 
31ae0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
31af0 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
31b00 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63   to P2 */.    pc
31b10 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
31b20 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
31b30 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
31b40 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31b50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31b60 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
31b70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31b80 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
31b90 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
31ba0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
31bb0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
31bc0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
31bd0 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
31be0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
31bf0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
31c00 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
31c10 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
31c20 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
31c30 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
31c40 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
31c50 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
31c60 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
31c70 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
31c80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
31c90 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
31ca0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
31cb0 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
31cc0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
31cd0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
31ce0 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
31cf0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31d00 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
31d10 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
31d20 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
31d30 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
31d40 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
31d50 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
31d60 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
31d70 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
31d80 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
31d90 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
31da0 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
31db0 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
31dc0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
31dd0 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
31de0 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
31df0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
31e00 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
31e10 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
31e20 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
31e30 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
31e40 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
31e50 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
31e60 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56  K ){.    rc = pV
31e70 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
31e80 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
31e90 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69  me->z);.    sqli
31ea0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
31eb0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
31ec0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
31ed0 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
31ee0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
31ef0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
31f00 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
31f10 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
31f20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
31f30 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72  Synopsis: data=r
31f40 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34  [P3@P2].**.** P4
31f50 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
31f60 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
31f70 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
31f80 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
31f90 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
31fa0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
31fb0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70  orresponding xUp
31fc0 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20  date method. P2 
31fd0 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f  values.** are co
31fe0 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20  ntiguous memory 
31ff0 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61  cells starting a
32000 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20  t P3 to pass to 
32010 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20  the xUpdate .** 
32020 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20  invocation. The 
32030 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
32040 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72  r (P3+P2-1) corr
32050 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a  esponds to the .
32060 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20  ** p2th element 
32070 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61  of the argv arra
32080 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64  y passed to xUpd
32090 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78  ate..**.** The x
320a0 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69  Update method wi
320b0 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f  ll do a DELETE o
320c0 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62  r an INSERT or b
320d0 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76  oth..** The argv
320e0 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69  [0] element (whi
320f0 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ch corresponds t
32100 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33  o memory cell P3
32110 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69  ).** is the rowi
32120 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65  d of a row to de
32130 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30  lete.  If argv[0
32140 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e  ] is NULL then n
32150 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f  o .** deletion o
32160 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76  ccurs.  The argv
32170 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74  [1] element is t
32180 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
32190 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68  new .** row.  Th
321a0 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74  is can be NULL t
321b0 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75  o have the virtu
321c0 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20  al table select 
321d0 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69  the new .** rowi
321e0 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54  d for itself.  T
321f0 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c  he subsequent el
32200 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  ements in the ar
32210 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20  ray are .** the 
32220 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
32230 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  s in the new row
32240 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31  ..**.** If P2==1
32250 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20   then no insert 
32260 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61  is performed.  a
32270 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f  rgv[0] is the ro
32280 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20  wid of.** a row 
32290 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a  to delete..**.**
322a0 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 is a boolean
322b0 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20   flag. If it is 
322c0 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20  set to true and 
322d0 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c  the xUpdate call
322e0 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75  .** is successfu
322f0 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  l, then the valu
32300 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
32310 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
32320 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73  t_rowid() .** is
32330 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
32340 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66  e of the rowid f
32350 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20  or the row just 
32360 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  inserted..**.** 
32370 50 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20  P5 is the error 
32380 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c  actions (OE_Repl
32390 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45  ace, OE_Fail, OE
323a0 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f  _Ignore, etc) to
323b0 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65  .** apply in the
323c0 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74   case of a const
323d0 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e  raint failure on
323e0 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70   an insert or up
323f0 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
32400 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
32410 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
32420 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
32430 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
32440 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
32450 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
32460 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
32470 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
32480 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  X;..  assert( pO
32490 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20  p->p2==1        
324a0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46  || pOp->p5==OE_F
324b0 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35  ail   || pOp->p5
324c0 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20  ==OE_Rollback . 
324d0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
324e0 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f  ==OE_Abort || pO
324f0 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p5==OE_Ignore
32500 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
32510 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61  Replace.  );.  a
32520 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
32530 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62  ly==0 );.  pVtab
32540 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
32550 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
32560 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
32570 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
32580 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
32590 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
325a0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
325b0 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
325c0 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
325d0 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
325e0 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
325f0 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43  ct = db->vtabOnC
32600 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41  onflict;.    apA
32610 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
32620 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f     pX = &aMem[pO
32630 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
32640 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
32650 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
32660 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20   memIsValid(pX) 
32670 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
32680 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29  tToChange(p, pX)
32690 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
326a0 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
326b0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d  +;.    }.    db-
326c0 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
326d0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72  = pOp->p5;.    r
326e0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
326f0 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
32700 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
32710 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  ;.    db->vtabOn
32720 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f  Conflict = vtabO
32730 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73  nConflict;.    s
32740 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
32750 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
32760 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
32770 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e  LITE_OK && pOp->
32780 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  p1 ){.      asse
32790 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
327a0 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
327b0 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
327c0 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
327d0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
327e0 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
327f0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
32800 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
32810 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70  _CONSTRAINT && p
32820 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43  Op->p4.pVtab->bC
32830 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20  onstraint ){.   
32840 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d     if( pOp->p5==
32850 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
32860 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
32870 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  _OK;.      }else
32880 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72  {.        p->err
32890 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70  orAction = ((pOp
328a0 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65  ->p5==OE_Replace
328b0 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70  ) ? OE_Abort : p
328c0 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d  Op->p5);.      }
328d0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
328e0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
328f0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
32900 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
32910 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
32920 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
32930 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
32940 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
32950 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
32960 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
32970 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
32980 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
32990 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
329a0 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
329b0 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
329c0 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
329d0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
329e0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
329f0 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
32a00 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
32a10 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f  tPage(db->aDb[pO
32a20 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62  p->p1].pBt);.  b
32a30 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
32a40 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
32a50 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
32a60 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  MAS./* Opcode: M
32a70 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33  axPgcnt P1 P2 P3
32a80 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74   * *.**.** Try t
32a90 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75  o set the maximu
32aa0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72  m page count for
32ab0 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
32ac0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e  the value in P3.
32ad0 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74  .** Do not let t
32ae0 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
32af0 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77  count fall below
32b00 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67   the current pag
32b10 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64  e count and.** d
32b20 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65  o not change the
32b30 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
32b40 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d  unt value if P3=
32b50 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  =0..**.** Store 
32b60 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
32b70 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65   count after the
32b80 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73   change in regis
32b90 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
32ba0 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20  OP_MaxPgcnt: {  
32bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
32bc0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
32bd0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
32be0 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a  ewMax;.  Btree *
32bf0 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62  pBt;..  pBt = db
32c00 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
32c10 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30  Bt;.  newMax = 0
32c20 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
32c30 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20  ){.    newMax = 
32c40 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
32c50 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69  Page(pBt);.    i
32c60 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73  f( newMax < (uns
32c70 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20  igned)pOp->p3 ) 
32c80 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e  newMax = (unsign
32c90 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a  ed)pOp->p3;.  }.
32ca0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
32cb0 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61 67  lite3BtreeMaxPag
32cc0 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d  eCount(pBt, newM
32cd0 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ax);.  break;.}.
32ce0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f  #endif.../* Opco
32cf0 64 65 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a 20  de: Init * P2 * 
32d00 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
32d10 3a 20 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a  :  Start at P2.*
32d20 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f  *.** Programs co
32d30 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69  ntain a single i
32d40 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
32d50 6f 70 63 6f 64 65 20 61 73 20 74 68 65 20 76 65  opcode as the ve
32d60 72 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f  ry first.** opco
32d70 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61  de..**.** If tra
32d80 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20  cing is enabled 
32d90 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f  (by the sqlite3_
32da0 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61  trace()) interfa
32db0 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ce, then.** the 
32dc0 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e  UTF-8 string con
32dd0 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20  tained in P4 is 
32de0 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74  emitted on the t
32df0 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a  race callback..*
32e00 2a 20 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c  * Or if P4 is bl
32e10 61 6e 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72  ank, use the str
32e20 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20  ing returned by 
32e30 73 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a  sqlite3_sql()..*
32e40 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
32e50 74 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20  t zero, jump to 
32e60 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
32e70 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a  */.case OP_Init:
32e80 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a   {          /* j
32e90 75 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ump */.  char *z
32ea0 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a  Trace;.  char *z
32eb0 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  ;..  if( pOp->p2
32ec0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
32ed0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69  ->p2 - 1;.  }.#i
32ee0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32ef0 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64 62  T_TRACE.  if( db
32f00 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21  ->xTrace.   && !
32f10 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20  p->doingRerun.  
32f20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
32f30 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
32f40 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
32f50 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d  !=0.  ){.    z =
32f60 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61   sqlite3VdbeExpa
32f70 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29  ndSql(p, zTrace)
32f80 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65  ;.    db->xTrace
32f90 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20  (db->pTraceArg, 
32fa0 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  z);.    sqlite3D
32fb0 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20  bFree(db, z);.  
32fc0 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
32fd0 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a  USE_FCNTL_TRACE.
32fe0 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d    zTrace = (pOp-
32ff0 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
33000 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  z : p->zSql);.  
33010 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20  if( zTrace ){.  
33020 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72    int i;.    for
33030 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
33040 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
33050 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
33060 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20  treeMask, i)==0 
33070 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
33080 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63    sqlite3_file_c
33090 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61  ontrol(db, db->a
330a0 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c  Db[i].zName, SQL
330b0 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c  ITE_FCNTL_TRACE,
330c0 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a   zTrace);.    }.
330d0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
330e0 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54  LITE_USE_FCNTL_T
330f0 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53  RACE */.#ifdef S
33100 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
33110 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
33120 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21  QLITE_SqlTrace)!
33130 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65  =0.   && (zTrace
33140 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
33150 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
33160 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  Sql))!=0.  ){.  
33170 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72    sqlite3DebugPr
33180 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a  intf("SQL-trace:
33190 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b   %s\n", zTrace);
331a0 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
331b0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
331c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
331d0 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20  OMIT_TRACE */.  
331e0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
331f0 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
33200 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
33210 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
33220 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
33230 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
33240 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
33250 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
33260 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
33270 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
33280 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
33290 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
332a0 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
332b0 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
332c0 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
332d0 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
332e0 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
332f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
33300 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
33310 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
33320 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
33330 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
33340 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
33350 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
33360 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
33370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
33380 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
33390 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
333a0 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  in */.  assert( 
333b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
333c0 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Noop || pOp->opc
333d0 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
333e0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
333f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
33440 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68   The cases of th
33450 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
33460 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69  nt above this li
33470 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65  ne should all be
33480 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20   indented.** by 
33490 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74  6 spaces.  But t
334a0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73  he left-most 6 s
334b0 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20  paces have been 
334c0 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f  removed to impro
334d0 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62  ve the.** readab
334e0 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69  ility.  From thi
334f0 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c  s point on down,
33500 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65   the normal inde
33510 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72  ntation rules ar
33520 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a  e.** restored..*
33530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20  ************/.  
33580 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45    }..#ifdef VDBE
33590 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20  _PROFILE.    {. 
335a0 20 20 20 20 20 75 36 34 20 65 6e 64 54 69 6d 65       u64 endTime
335b0 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
335c0 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 65 6e  ();.      if( en
335d0 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20 70 4f  dTime>start ) pO
335e0 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64  p->cycles += end
335f0 54 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20  Time - start;.  
33600 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a      pOp->cnt++;.
33610 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
33620 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
33630 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
33640 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
33650 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
33660 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
33670 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
33680 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
33690 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
336a0 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
336b0 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
336c0 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
336d0 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
336e0 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
336f0 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
33700 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
33710 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
33720 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
33730 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
33740 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
33750 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20  sert( pc>=-1 && 
33760 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69  pc<p->nOp );..#i
33770 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
33780 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
33790 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
337a0 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
337b0 69 66 28 20 72 63 21 3d 30 20 29 20 70 72 69 6e  if( rc!=0 ) prin
337c0 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29  tf("rc=%d\n",rc)
337d0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
337e0 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c  >opflags & (OPFL
337f0 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
33800 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b  E|OPFLG_OUT2) ){
33810 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
33820 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20  rTrace(pOp->p2, 
33830 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
33840 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
33850 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
33860 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
33870 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
33880 54 72 61 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26  Trace(pOp->p3, &
33890 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
338a0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
338b0 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
338c0 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
338d0 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
338e0 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
338f0 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
33900 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
33910 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
33920 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
33930 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
33940 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
33950 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
33960 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
33970 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
33980 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
33990 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
339a0 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
339b0 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65  = rc;.  testcase
339c0 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
339d0 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
339e0 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72  .  sqlite3_log(r
339f0 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62  c, "statement ab
33a00 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d  orts at %d: [%s]
33a10 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
33a20 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d            pc, p-
33a30 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
33a40 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
33a50 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20  eHalt(p);.  if( 
33a60 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
33a70 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c  _NOMEM ) db->mal
33a80 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
33a90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
33aa0 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53  OR;.  if( resetS
33ab0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29  chemaOnFault>0 )
33ac0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
33ad0 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
33ae0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
33af0 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  lt-1);.  }..  /*
33b00 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
33b10 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
33b20 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
33b30 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
33b40 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
33b50 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
33b60 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
33b70 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
33b80 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
33b90 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
33ba0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 74  = lastRowid;.  t
33bb0 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74 65 70  estcase( nVmStep
33bc0 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e  >0 );.  p->aCoun
33bd0 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
33be0 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b  TATUS_VM_STEP] +
33bf0 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a  = (int)nVmStep;.
33c00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61    sqlite3VdbeLea
33c10 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  ve(p);.  return 
33c20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  rc;..  /* Jump t
33c30 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69  o here if a stri
33c40 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65  ng or blob large
33c50 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41  r than SQLITE_MA
33c60 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73  X_LENGTH.  ** is
33c70 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20   encountered..  
33c80 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71  */.too_big:.  sq
33c90 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
33ca0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
33cb0 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  "string or blob 
33cc0 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20  too big");.  rc 
33cd0 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b  = SQLITE_TOOBIG;
33ce0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
33cf0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
33d00 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
33d10 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
33d20 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20  .  */.no_mem:.  
33d30 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
33d40 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53   = 1;.  sqlite3S
33d50 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
33d60 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f  rMsg, db, "out o
33d70 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63  f memory");.  rc
33d80 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
33d90 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
33da0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
33db0 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
33dc0 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f  any other kind o
33dd0 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20  f fatal error.  
33de0 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c  The "rc" variabl
33df0 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f  e.  ** should ho
33e00 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d  ld the error num
33e10 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ber..  */.abort_
33e20 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
33e30 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d  assert( p->zErrM
33e40 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64  sg==0 );.  if( d
33e50 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
33e60 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
33e70 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  MEM;.  if( rc!=S
33e80 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
33e90 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  M ){.    sqlite3
33ea0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
33eb0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
33ec0 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
33ed0 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  c));.  }.  goto 
33ee0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
33ef0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
33f00 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
33f10 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
33f20 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
33f30 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
33f40 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
33f50 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
33f60 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
33f70 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
33f80 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
33f90 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63  TERRUPT;.  p->rc
33fa0 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
33fb0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
33fc0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
33fd0 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
33fe0 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
33ff0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.