/ Hex Artifact Content
Login

Artifact 7a9e701189fda8c348ec16820967a81ede23e836:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65  orter(x) ((x)->e
1810: 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1820: 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20  _SORTER)../*.** 
1830: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1840: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1850: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1860: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1870: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1880: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1890: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
18a0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
18b0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
18c0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
18d0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
18e0: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
18f0: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1900: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1910: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1920: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1930: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1940: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1950: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1960: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1970: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1980: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1990: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
19a0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
19b0: 75 38 20 65 43 75 72 54 79 70 65 20 20 20 20 20  u8 eCurType     
19c0: 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
19d0: 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19e0: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  */.){.  /* Find 
19f0: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1a00: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1a10: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1a20: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1a30: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1a40: 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20  this VdbeCursor 
1a50: 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73  structure. It is
1a60: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1a70: 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20  se a .  ** vdbe 
1a80: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d  memory cell to m
1a90: 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  anage the memory
1aa0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
1ab0: 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20  ired for a.  ** 
1ac0: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1ad0: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1ae0: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1af0: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b00: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b10: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b20: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1b30: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1b40: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1b50: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1b60: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1b70: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1b80: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1b90: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1ba0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1bb0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1bc0: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1bd0: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1be0: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1bf0: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c00: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c10: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c20: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1c30: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1c40: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1c50: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1c60: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1c70: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1c80: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1c90: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1ca0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1cb0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1cc0: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1cd0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1ce0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1cf0: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d00: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d10: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d20: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1d30: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1d40: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1d50: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1d60: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1d70: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1d80: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1d90: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1da0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1db0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20  VdbeCursor *pCx 
1dc0: 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a  = 0;.  nByte = .
1dd0: 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69 7a        ROUND8(siz
1de0: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29  eof(VdbeCursor))
1df0: 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32 29   + 2*sizeof(u32)
1e00: 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20 20  *nField + .     
1e10: 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54   (eCurType==CURT
1e20: 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69 74 65  YPE_BTREE?sqlite
1e30: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e40: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
1e50: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1e60: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1e70: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1e80: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1e90: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1ea0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1eb0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1ec0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1ed0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ee0: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
1ef0: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
1f00: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1f10: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1f20: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1f30: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
1f40: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
1f50: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
1f60: 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20    pCx->eCurType 
1f70: 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20  = eCurType;.    
1f80: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
1f90: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
1fa0: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43  = nField;.    pC
1fb0: 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43  x->aOffset = &pC
1fc0: 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  x->aType[nField]
1fd0: 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54 79  ;.    if( eCurTy
1fe0: 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1ff0: 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  E ){.      pCx->
2000: 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  uc.pCursor = (Bt
2010: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2020: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e     &pMem->z[ROUN
2030: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2040: 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28  rsor))+2*sizeof(
2050: 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20  u32)*nField];.  
2060: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2070: 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e  CursorZero(pCx->
2080: 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
2090: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
20a0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
20b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
20c0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
20d0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
20e0: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
20f0: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2100: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2110: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2120: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2130: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2140: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2150: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2160: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2170: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
2180: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
2190: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   it alone..**.**
21a0: 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72 49   If the bTryForI
21b0: 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c  nt flag is true,
21c0: 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f   then extra effo
21d0: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69  rt is made to gi
21e0: 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ve.** an integer
21f0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2200: 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c    Strings that l
2210: 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e  ook like floatin
2220: 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65  g point.** value
2230: 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76 65  s but which have
2240: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63   no fractional c
2250: 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c  omponent (exampl
2260: 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77  e: '48.00').** w
2270: 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49  ill have a MEM_I
2280: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2290: 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e  n when bTryForIn
22a0: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a  t is true..**.**
22b0: 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69   If bTryForInt i
22c0: 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66  s false, then if
22d0: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
22e0: 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63  g contains a dec
22f0: 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72  imal.** point or
2300: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74   exponential not
2310: 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c  ation, the resul
2320: 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65  t is only MEM_Re
2330: 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74  al, even.** if t
2340: 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63 74  here is an exact
2350: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2360: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71  ntation of the q
2370: 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74  uantity..*/.stat
2380: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
2390: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
23a0: 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79   *pRec, int bTry
23b0: 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c  ForInt){.  doubl
23c0: 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20  e rValue;.  i64 
23d0: 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63  iValue;.  u8 enc
23e0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
23f0: 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66  assert( (pRec->f
2400: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2410: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2420: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  ))==MEM_Str );. 
2430: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2440: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75  (pRec->z, &rValu
2450: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
2460: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2470: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
2480: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
2490: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
24a0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63  enc) ){.    pRec
24b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
24c0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
24d0: 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65  |= MEM_Int;.  }e
24e0: 6c 73 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  lse{.    pRec->u
24f0: 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  .r = rValue;.   
2500: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2510: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66  MEM_Real;.    if
2520: 28 20 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73  ( bTryForInt ) s
2530: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2540: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2550: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
2560: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2570: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2580: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2590: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
25a0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
25b0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
25c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
25d0: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
25e0: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
25f0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2600: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2610: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2620: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2630: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2640: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2650: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
2660: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2670: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2680: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2690: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
26a0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
26b0: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
26c0: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
26d0: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
26e0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
26f0: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2700: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2710: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2720: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2730: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2740: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
2750: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
2760: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
2770: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2780: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2790: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
27a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
27b0: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
27c0: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
27d0: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
27e0: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
27f0: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2800: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2810: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2820: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2830: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2840: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
2850: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
2860: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
2870: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
2880: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2890: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
28a0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
28b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
28c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
28d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
28e0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
28f0: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2900: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2920: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2930: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
2940: 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63          if( pRec
2950: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2960: 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  r ) applyNumeric
2970: 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29  Affinity(pRec,1)
2980: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
29a0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29b0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  y(pRec);.      }
29c0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
29d0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
29e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
29f0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2a00: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2a10: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
2a20: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2a30: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2a40: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2a50: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2a60: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2a70: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2a80: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2a90: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2aa0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2ab0: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2ac0: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2ad0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2ae0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2af0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2b00: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2b10: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
2b20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2b30: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2b40: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2b50: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2b60: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2b70: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2b80: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2b90: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2ba0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2bb0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2bc0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2bd0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2be0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2bf0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2c00: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2c10: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2c20: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2c30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2c40: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2c50: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2c60: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2c80: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2c90: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ca0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2cb0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2cc0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2cd0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2ce0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2d10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2d20: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2d40: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2d50: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2d60: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d70: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d80: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d90: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2da0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2db0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2dc0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2de0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2df0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2e00: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e10: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e20: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e30: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e40: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
2e60: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
2e70: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
2e80: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
2e90: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
2ea0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
2eb0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
2ec0: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
2ed0: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
2ee0: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
2ef0: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
2f00: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
2f10: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
2f20: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
2f30: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
2f40: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
2f50: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
2f60: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
2f70: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
2f80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2f90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2fa0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2fb0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2fc0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2fd0: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
2fe0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
2ff0: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3000: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3010: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3020: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3030: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3040: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3050: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3060: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
3070: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
3080: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
3090: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
30a0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
30b0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
30c0: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
30d0: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
30e0: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
30f0: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3100: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3110: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3120: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3130: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3140: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3150: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
3160: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
3170: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
3180: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
3190: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
31c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
31d0: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
31e0: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3200: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3210: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3220: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3230: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3240: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3250: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
3260: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
3270: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3280: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
3290: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
32a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
32b0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
32c0: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
32d0: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
32e0: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
32f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3300: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3310: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3320: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3330: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3340: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3350: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
3360: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
3370: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
3380: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
3390: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
33a0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
33b0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
33c0: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
33d0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
33e0: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
33f0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3400: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3410: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3420: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3430: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3440: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3450: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3460: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3470: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3480: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3490: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
34a0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
34b0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
34c0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
34d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
34e0: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
34f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3550: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3560: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3570: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3580: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3590: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
35a0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
35b0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
35c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
35d0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
35e0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
35f0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3600: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3610: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3620: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3640: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3650: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
3660: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3670: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3680: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3690: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
36a0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
36b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
36c0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
36d0: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
36e0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
36f0: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3700: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3710: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3720: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3730: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
3760: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3770: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3780: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3790: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
37a0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
37b0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
37c0: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
37d0: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
37e0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
37f0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3800: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3810: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3820: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3830: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3840: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3850: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3860: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3870: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3880: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3890: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
38a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
38b0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
38c0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
38d0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
38e0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
38f0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3900: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3910: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3920: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3930: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3940: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3950: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3960: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3970: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3980: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3990: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
39a0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
39b0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
39c0: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
39d0: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
39e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
39f0: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3a00: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3a10: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3a20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3a30: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3a40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3a50: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a70: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3a80: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3a90: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3aa0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3ab0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3ac0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3ad0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3ae0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3af0: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3b00: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3b10: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3b20: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3b30: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3b40: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3b50: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3b60: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3b70: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3b80: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3b90: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3ba0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3bb0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3bc0: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3bd0: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3be0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bf0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3c00: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3c10: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3c20: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3c30: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c40: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3c50: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3c60: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3c70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3c80: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3c90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ca0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3cb0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3cc0: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3cd0: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3ce0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3cf0: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3d00: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3d10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3d20: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3d40: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3d50: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3d60: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3d70: 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64   }.}.static void
3d80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3d90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3da0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3db0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3dc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3dd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3de0: 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ");.}.#endif..#i
3df0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
3e00: 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  G.#  define REGI
3e10: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20  STER_TRACE(R,M) 
3e20: 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  if(db->flags&SQL
3e30: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72 65  ITE_VdbeTrace)re
3e40: 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d 29  gisterTrace(R,M)
3e50: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
3e60: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
3e70: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
3e80: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
3e90: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
3ea0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
3eb0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
3ec0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
3ed0: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
3ee0: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
3ef0: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
3f00: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
3f10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
3f20: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3f30: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3f40: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3f50: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3f60: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3f70: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3f80: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3f90: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3fa0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3fb0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3fc0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3fd0: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3fe0: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ff0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
4000: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
4010: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
4020: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
4030: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
4040: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
4050: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
4060: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
4070: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
4080: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4090: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
40a0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
40b0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
40c0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
40d0: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
40e0: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
40f0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4100: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4110: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4120: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4130: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 67  * Return the reg
4140: 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70 32  ister of pOp->p2
4150: 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72 65   after first pre
4160: 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65 0a  paring it to be.
4170: 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  ** overwritten w
4180: 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ith an integer v
4190: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
41a0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
41b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
41c0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65 6d  aseWithClear(Mem
41d0: 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69 74   *pOut){.  sqlit
41e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
41f0: 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  (pOut);.  pOut->
4200: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
4210: 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a  .  return pOut;.
4220: 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f 75  }.static Mem *ou
4230: 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64 62  t2Prerelease(Vdb
4240: 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70 4f  e *p, VdbeOp *pO
4250: 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b  p){.  Mem *pOut;
4260: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
4270: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
4280: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
4290: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
42a0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
42b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
42c0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
42d0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
42e0: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
42f0: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 72 65  (pOut) ){.    re
4300: 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65  turn out2Prerele
4310: 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75  aseWithClear(pOu
4320: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
4330: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4340: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75  EM_Int;.    retu
4350: 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a  rn pOut;.  }.}..
4360: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
4370: 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45  s much of a VDBE
4380: 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63   program as we c
4390: 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  an..** This is t
43a0: 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74  he core of sqlit
43b0: 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a  e3_step().  .*/.
43c0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
43d0: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
4400: 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20  .){.  Op *aOp = 
4410: 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20  p->aOp;         
4420: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4430: 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20  Op */.  Op *pOp 
4440: 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  = aOp;          
4450: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70     /* Current op
4460: 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64  eration */.#if d
4470: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
4480: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
4490: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
44a0: 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20  Op *pOrigOp;    
44b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
44c0: 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68  lue of pOp at th
44d0: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f  e top of the loo
44e0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  p */.#endif.  in
44f0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4500: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4510: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
4520: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
4530: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
4540: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
4550: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
4560: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
4570: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4580: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f  r an error if po
4590: 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  sitive */.  u8 e
45a0: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
45b0: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
45c0: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
45d0: 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72  */.  int iCompar
45e0: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
45f0: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73  /* Result of las
4600: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  t OP_Compare ope
4610: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  ration */.  unsi
4620: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4630: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4640: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4650: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4660: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4670: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4680: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4690: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
46a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
46b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
46c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
46d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
46e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
46f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4700: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4710: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4720: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4730: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4740: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4750: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4760: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4770: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4780: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4790: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
47a0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
47b0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
47c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
47d0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
47e0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
47f0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4800: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4810: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4820: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4830: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4840: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4850: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4860: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4870: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4880: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4890: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
48a0: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
48b0: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
48c0: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
48d0: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
48e0: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
48f0: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4900: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4910: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4920: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4930: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
4940: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
4950: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
4960: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4970: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
4980: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
4990: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
49a0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
49b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
49c0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
49d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
49e0: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
49f0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4a00: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4a10: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4a20: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
4a30: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4a40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
4a50: 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61  Reader || p->rea
4a60: 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d  dOnly!=0 );.  p-
4a70: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4a80: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
4a90: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
4aa0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4ab0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4ac0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4ad0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4ae0: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4af0: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4b00: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4b10: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4b20: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4b30: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4b40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4b50: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4b60: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
4b70: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
4b80: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
4b90: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4ba0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4bb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4bc0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4bd0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4be0: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4bf0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
4c00: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
4c10: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65  ressOps);.  }.#e
4c20: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4c30: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4c40: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4c50: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4c60: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
4c70: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
4c80: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
4c90: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
4ca0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4cb0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
4cc0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
4cd0: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
4ce0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4cf0: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
4d00: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4d10: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
4d20: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4d30: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
4d40: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
4d50: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4d60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
4d70: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4d80: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
4d90: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
4da0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
4db0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4dc0: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
4dd0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4de0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4df0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
4e00: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
4e10: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
4e20: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
4e30: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
4e40: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
4e50: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
4e60: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
4e70: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
4e80: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
4e90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4ea0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4eb0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
4ec0: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
4ed0: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
4ee0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4ef0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4f00: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f  .#endif.  for(pO
4f10: 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 72  p=&aOp[p->pc]; r
4f20: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 4f  c==SQLITE_OK; pO
4f30: 70 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p++){.    assert
4f40: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
4f50: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
4f60: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4f70: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4f80: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4f90: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4fa0: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4fb0: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4fc0: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
4fd0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
4fe0: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
4ff0: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
5000: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
5010: 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70  ec[(int)(pOp-aOp
5020: 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  )]++;.#endif..  
5030: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
5040: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
5050: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
5060: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
5070: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
5080: 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
5090: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
50a0: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ace ){.      sql
50b0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
50c0: 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f  stdout, (int)(pO
50d0: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a  p - aOp), pOp);.
50e0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
50f0: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
5100: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
5110: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
5120: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
5130: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
5140: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
5150: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
5160: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
5170: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
5180: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5190: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
51a0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
51b0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
51c0: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
51d0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
51e0: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
51f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5200: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
5210: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
5220: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e  ndif..    /* San
5230: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
5240: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
5250: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5260: 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
5270: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
5280: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
5290: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
52a0: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70  e] );.    if( (p
52b0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
52c0: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
52d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
52e0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
52f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
5300: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5310: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5320: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5330: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
5340: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5350: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
5360: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
5370: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
5380: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
5390: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
53a0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
53b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
53c0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
53d0: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
53e0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
53f0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5400: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5410: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
5420: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5430: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5440: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5450: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73  p2]) );.      as
5460: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
5470: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
5480: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
5490: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  2]) );.      REG
54a0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
54b0: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
54c0: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
54d0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
54e0: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  s & OPFLG_IN3)!=
54f0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5500: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5510: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5520: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
5530: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5540: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5550: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5560: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5570: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5580: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5590: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
55a0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
55b0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
55c0: 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
55d0: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p3]);.    }. 
55e0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
55f0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
5600: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  2)!=0 ){.      a
5610: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5620: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5630: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
5640: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
5650: 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
5660: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
5670: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
5680: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
5690: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
56a0: 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20  G_OUT3)!=0 ){.  
56b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56c0: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p3>0 );.      a
56d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
56e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
56f0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
5700: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5710: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
5720: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
5730: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
5740: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
5750: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
5760: 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d  E).    pOrigOp =
5770: 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a   pOp;.#endif.  .
5780: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5790: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
57a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
57f0: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5800: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5810: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5820: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5830: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5840: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5850: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5860: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5870: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5880: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5890: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
58a0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
58b0: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
58c0: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
58d0: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
58e0: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
58f0: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5900: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5910: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5920: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5930: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5940: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5950: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5960: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5970: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5980: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5990: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
59a0: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
59b0: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
59c0: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
59d0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
59e0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
59f0: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5a00: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5a10: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5a20: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5a30: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5a40: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5a50: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5a60: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5a70: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5a80: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5a90: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5aa0: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5ab0: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5ac0: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5ad0: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5ae0: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5af0: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5b00: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5b10: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5b20: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5b30: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5b40: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5b50: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5b60: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5b70: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5b80: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5b90: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5ba0: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5bb0: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5bc0: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5bd0: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5be0: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5bf0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5c00: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5c10: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5c20: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5c30: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5c40: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5c50: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5c60: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5c70: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5c80: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5c90: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5ca0: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5cb0: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5cc0: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5cd0: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f  n2, in3, out2, o
5ce0: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5cf0: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5d00: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5d10: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5d20: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5d30: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5d40: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5d50: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5d60: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5d70: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5d80: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
5d90: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
5da0: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
5db0: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
5dc0: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
5dd0: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
5de0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
5df0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
5e00: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
5e10: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
5e20: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
5e30: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
5e40: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
5e50: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
5e60: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
5e70: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
5e80: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
5e90: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
5ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
5ef0: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
5f00: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
5f10: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
5f20: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
5f30: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
5f40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
5f50: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
5f60: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
5f70: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
5f80: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
5f90: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  he program..**.*
5fa0: 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65 74  * The P1 paramet
5fb0: 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c  er is not actual
5fc0: 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ly used by this 
5fd0: 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72  opcode.  However
5fe0: 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74  , it.** is somet
5ff0: 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e  imes set to 1 in
6000: 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61 20  stead of 0 as a 
6010: 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d  hint to the comm
6020: 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a  and-line shell.*
6030: 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f  * that this Goto
6040: 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   is the bottom o
6050: 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61  f a loop and tha
6060: 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d  t the lines from
6070: 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74   P2 down.** to t
6080: 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20  he current line 
6090: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
60a0: 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ed for EXPLAIN o
60b0: 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
60c0: 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20  P_Goto: {       
60d0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
60e0: 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f  .jump_to_p2_and_
60f0: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6100: 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  upt:.  pOp = &aO
6110: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6120: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
6130: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
6140: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
6150: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
6160: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
6170: 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e  Next, OP_RowSetN
6180: 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  ext, or OP_Sorte
6190: 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20  rNext) all jump 
61a0: 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63  here upon.  ** c
61b0: 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63  ompletion.  Chec
61c0: 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69  k to see if sqli
61d0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
61e0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a  has been called.
61f0: 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70    ** or if the p
6200: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
6210: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76   needs to be inv
6220: 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  oked. .  **.  **
6230: 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20   This code uses 
6240: 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f  unstructured "go
6250: 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61  to" statements a
6260: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b  nd does not look
6270: 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74   clean..  ** But
6280: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65   that is not due
6290: 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e   to sloppy codin
62a0: 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f  g habits. The co
62b0: 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  de is written th
62c0: 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20  is.  ** way for 
62d0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20  performance, to 
62e0: 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20  avoid having to 
62f0: 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70  run the interrup
6300: 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20  t and progress. 
6310: 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76   ** checks on ev
6320: 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69  ery opcode.  Thi
6330: 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f  s helps sqlite3_
6340: 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62  step() to run ab
6350: 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61  out 1.5%.  ** fa
6360: 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74  ster according t
6370: 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f  o "valgrind --to
6380: 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a  ol=cachegrind" *
6390: 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  /.check_for_inte
63a0: 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d  rrupt:.  if( db-
63b0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
63c0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
63d0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
63e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
63f0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
6400: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c  LLBACK.  /* Call
6410: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6420: 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20  llback if it is 
6430: 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74  configured and t
6440: 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62  he required numb
6450: 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20  er.  ** of VDBE 
6460: 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78  ops have been ex
6470: 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73  ecuted (either s
6480: 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61  ince this invoca
6490: 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c  tion of.  ** sql
64a0: 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f  ite3VdbeExec() o
64b0: 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d  r since last tim
64c0: 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  e the progress c
64d0: 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c  allback was call
64e0: 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ed)..  ** If the
64f0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6500: 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  ck returns non-z
6510: 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69  ero, exit the vi
6520: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69  rtual machine wi
6530: 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e  th.  ** a return
6540: 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f   code SQLITE_ABO
6550: 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  RT..  */.  if( d
6560: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20  b->xProgress!=0 
6570: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
6580: 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20  gressLimit ){.  
6590: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50    assert( db->nP
65a0: 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b  rogressOps!=0 );
65b0: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
65c0: 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20  mit = nVmStep + 
65d0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
65e0: 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e   - (nVmStep%db->
65f0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20  nProgressOps);. 
6600: 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67     if( db->xProg
6610: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
6620: 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20  ssArg) ){.      
6630: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
6640: 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  RRUPT;.      got
6650: 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
6660: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  t;.    }.  }.#en
6670: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
6680: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
6690: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
66a0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
66b0: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
66c0: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
66d0: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
66e0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
66f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
6700: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
6710: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
6720: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6730: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
6740: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
6750: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
6760: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6770: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
6780: 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29  namic(pIn1)==0 )
6790: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
67a0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
67b0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
67c0: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
67d0: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d  u.i = (int)(pOp-
67e0: 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52  aOp);.  REGISTER
67f0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6800: 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73  pIn1);..  /* Mos
6810: 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e  t jump operation
6820: 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74  s do a goto to t
6830: 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65  his spot in orde
6840: 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a  r to update.  **
6850: 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72   the pOp pointer
6860: 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a  . */.jump_to_p2:
6870: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
6880: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72  p->p2 - 1];.  br
6890: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
68a0: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
68b0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
68c0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
68d0: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
68e0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
68f0: 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65  gister P1.  Afte
6900: 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72  r.** the jump, r
6910: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
6920: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f  es undefined..*/
6930: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
6940: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6950: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6960: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6970: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6980: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6990: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
69a0: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e  In1->u.i];.  pIn
69b0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
69c0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
69d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
69e0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50   InitCoroutine P
69f0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
6a00: 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65  * Set up registe
6a10: 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
6a20: 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68  will Yield to th
6a30: 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c  e coroutine.** l
6a40: 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73  ocated at addres
6a50: 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  s P3..**.** If P
6a60: 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f  2!=0 then the co
6a70: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
6a80: 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65  tation immediate
6a90: 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68  ly follows.** th
6aa0: 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a  is opcode.  So j
6ab0: 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72  ump over the cor
6ac0: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
6ad0: 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72  ation to.** addr
6ae0: 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ess P2..**.** Se
6af0: 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75  e also: EndCorou
6b00: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6b10: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
6b20: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6b30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6b40: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
6b50: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
6b60: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
6b70: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
6b80: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
6b90: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6ba0: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
6bb0: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
6bc0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
6bd0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6be0: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
6bf0: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
6c00: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
6c10: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
6c20: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
6c30: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74  f( pOp->p2 ) got
6c40: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
6c50: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6c60: 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69  ode:  EndCorouti
6c70: 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ne P1 * * * *.**
6c80: 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74  .** The instruct
6c90: 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65  ion at the addre
6ca0: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
6cb0: 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a  1 is a Yield..**
6cc0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20   Jump to the P2 
6cd0: 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61  parameter of tha
6ce0: 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65  t Yield..** Afte
6cf0: 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  r the jump, regi
6d00: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
6d10: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
6d20: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
6d30: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6d40: 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65   OP_EndCoroutine
6d50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6d60: 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70   in1 */.  VdbeOp
6d70: 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e   *pCaller;.  pIn
6d80: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6d90: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6da0: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6db0: 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
6dc0: 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20  pIn1->u.i>=0 && 
6dd0: 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70  pIn1->u.i<p->nOp
6de0: 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20   );.  pCaller = 
6df0: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
6e00: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
6e10: 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59  er->opcode==OP_Y
6e20: 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ield );.  assert
6e30: 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30  ( pCaller->p2>=0
6e40: 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c   && pCaller->p2<
6e50: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20  p->nOp );.  pOp 
6e60: 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e  = &aOp[pCaller->
6e70: 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d  p2 - 1];.  pIn1-
6e80: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6e90: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6ea0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6eb0: 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20  Yield P1 P2 * * 
6ec0: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
6ed0: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
6ee0: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
6ef0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
6f00: 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65   This.** has the
6f10: 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64   effect of yield
6f20: 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69  ing to a corouti
6f30: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ne..**.** If the
6f40: 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20   coroutine that 
6f50: 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74  is launched by t
6f60: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
6f70: 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65  ends with.** Yie
6f80: 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65  ld or Return the
6f90: 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68  n continue to th
6fa0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6fb0: 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74  on.  But if.** t
6fc0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75  he coroutine lau
6fd0: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
6fe0: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
6ff0: 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74  ith.** EndCorout
7000: 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ine, then jump t
7010: 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61 6e  o P2 rather than
7020: 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68   continuing with
7030: 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73   the.** next ins
7040: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
7050: 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f  See also: InitCo
7060: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
7070: 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20  OP_Yield: {     
7080: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a         /* in1, j
7090: 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  ump */.  int pcD
70a0: 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  est;.  pIn1 = &a
70b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
70c0: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
70d0: 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20  ynamic(pIn1)==0 
70e0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
70f0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63   = MEM_Int;.  pc
7100: 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31  Dest = (int)pIn1
7110: 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75  ->u.i;.  pIn1->u
7120: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  .i = (int)(pOp -
7130: 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45   aOp);.  REGISTE
7140: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
7150: 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20   pIn1);.  pOp = 
7160: 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20  &aOp[pcDest];.  
7170: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7180: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
7190: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35    P1 P2 P3 P4 P5
71a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
71b0: 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c  f r[P3]=null hal
71c0: 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  t.**.** Check th
71d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
71e0: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
71f0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
7200: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
7210: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
7220: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
7230: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
7240: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
7250: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
7260: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
7270: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
7280: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
7290: 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  ..** The P5 para
72a0: 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20  meter should be 
72b0: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  1..*/.case OP_Ha
72c0: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
72d0: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
72e0: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
72f0: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
7300: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
7310: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
7320: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7330: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
7340: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
7350: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
7360: 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d  P5.**.** Exit im
7370: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
7380: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
7390: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
73a0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
73b0: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
73c0: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
73d0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
73e0: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
73f0: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
7400: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
7410: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
7420: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
7430: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
7440: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
7450: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
7460: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
7470: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
7480: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
7490: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
74a0: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
74b0: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
74c0: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
74d0: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
74e0: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
74f0: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
7500: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
7510: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
7520: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
7530: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
7540: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
7550: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
7560: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
7570: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
7580: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
7590: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
75a0: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
75b0: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
75c0: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
75d0: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50   string..**.** P
75e0: 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74  5 is a value bet
75f0: 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e  ween 0 and 4, in
7600: 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f  clusive, that mo
7610: 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74  difies the P4 st
7620: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ring..**.**    0
7630: 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a  :  (no change).*
7640: 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c  *    1:  NOT NUL
7650: 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c  L contraint fail
7660: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20  ed: P4.**    2: 
7670: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
7680: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7690: 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f      3:  CHECK co
76a0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
76b0: 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f   P4.**    4:  FO
76c0: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
76d0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
76e0: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
76f0: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69  ot zero and P4 i
7700: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65  s NULL, then eve
7710: 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68  rything after th
7720: 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74  e ":" is.** omit
7730: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ted..**.** There
7740: 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22   is an implied "
7750: 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74  Halt 0 0 0" inst
7760: 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64  ruction inserted
7770: 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64   at the very end
7780: 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f   of.** every pro
7790: 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70  gram.  So a jump
77a0: 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69   past the last i
77b0: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
77c0: 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20  e program.** is 
77d0: 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63  the same as exec
77e0: 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63  uting Halt..*/.c
77f0: 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20  ase OP_Halt: {. 
7800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
7810: 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pe;.  const char
7820: 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56 64 62   *zLogFmt;.  Vdb
7830: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
7840: 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63    int pcx;..  pc
7850: 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  x = (int)(pOp - 
7860: 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  aOp);.  if( pOp-
7870: 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26  >p1==SQLITE_OK &
7880: 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  & p->pFrame ){. 
7890: 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73     /* Halt the s
78a0: 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75  ub-program. Retu
78b0: 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  rn control to th
78c0: 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20  e parent frame. 
78d0: 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  */.    pFrame = 
78e0: 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  p->pFrame;.    p
78f0: 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
7900: 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20  e->pParent;.    
7910: 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20  p->nFrame--;.   
7920: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7930: 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
7940: 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20  hange);.    pcx 
7950: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
7960: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
7970: 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64  );.    lastRowid
7980: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
7990: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
79a0: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
79b0: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
79c0: 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20  tion pcx is the 
79d0: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
79e0: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
79f0: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
7a00: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
7a10: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
7a20: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
7a30: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
7a40: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
7a50: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
7a60: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
7a70: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
7a80: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
7a90: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
7aa0: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
7ab0: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
7ac0: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
7ad0: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
7ae0: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
7af0: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
7b00: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20  .  */.      pcx 
7b10: 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32  = p->aOp[pcx].p2
7b20: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
7b30: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
7b40: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
7b50: 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70      pOp = &aOp[p
7b60: 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  cx];.    break;.
7b70: 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f    }.  p->rc = pO
7b80: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
7b90: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
7ba0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
7bb0: 20 70 63 78 3b 0a 20 20 69 66 28 20 70 2d 3e 72   pcx;.  if( p->r
7bc0: 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  c ){.    if( pOp
7bd0: 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74  ->p5 ){.      st
7be0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
7bf0: 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d  * const azType[]
7c00: 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c   = { "NOT NULL",
7c10: 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43   "UNIQUE", "CHEC
7c20: 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  K",.            
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d   "FOREIGN KEY" }
7c60: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
7c70: 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f  pOp->p5>=1 && pO
7c80: 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20  p->p5<=4 );.    
7c90: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7ca0: 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  >p5==1 );.      
7cb0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7cc0: 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65  5==2 );.      te
7cd0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7ce0: 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =3 );.      test
7cf0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34  case( pOp->p5==4
7d00: 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70 65 20   );.      zType 
7d10: 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35  = azType[pOp->p5
7d20: 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  -1];.    }else{.
7d30: 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 30 3b        zType = 0;
7d40: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
7d50: 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70  t( zType!=0 || p
7d60: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7d70: 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62     zLogFmt = "ab
7d80: 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73  ort at %d in [%s
7d90: 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66 28 20  ]: %s";.    if( 
7da0: 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e 70 34  zType && pOp->p4
7db0: 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  .z ){.      sqli
7dc0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
7dd0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
7de0: 61 69 6c 65 64 3a 20 25 73 22 2c 20 7a 54 79 70  ailed: %s", zTyp
7df0: 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  e, pOp->p4.z);. 
7e00: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
7e10: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
7e20: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
7e30: 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  (p, "%s", pOp->p
7e40: 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  4.z);.    }else{
7e50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7e60: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63  beError(p, "%s c
7e70: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7e80: 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d  ", zType);.    }
7e90: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
7ea0: 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d  (pOp->p1, zLogFm
7eb0: 74 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c  t, pcx, p->zSql,
7ec0: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
7ed0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
7ee0: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
7ef0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7f00: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
7f10: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
7f20: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
7f30: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7f40: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
7f50: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
7f60: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
7f70: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
7f80: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
7f90: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
7fa0: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
7fb0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
7fc0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
7fd0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
7fe0: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
7ff0: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
8000: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
8010: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
8020: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
8030: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
8040: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8050: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
8060: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8070: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
8080: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
8090: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
80a0: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
80b0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
80c0: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
80d0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
80e0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
80f0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8100: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
8110: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
8120: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8130: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
8140: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8150: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8160: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8170: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
8180: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
8190: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
81a0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
81b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
81c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
81d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
81e0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
81f0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
8200: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
8210: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
8220: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
8230: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
8240: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8250: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
8260: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
8270: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
8280: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8290: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
82a0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
82b0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
82c0: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
82d0: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
82e0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
82f0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
8300: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
8310: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
8320: 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  LOAT, out2 */.  
8330: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8340: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8350: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8360: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
8370: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
8380: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
8390: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20   );.  pOut->u.r 
83a0: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
83b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
83c0: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
83d0: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
83e0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
83f0: 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a   r[P2]='P4'.**.*
8400: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
8410: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
8420: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
8430: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
8440: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
8450: 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64  o a String opcod
8460: 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  e before it is e
8470: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
8480: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
8490: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
84a0: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
84b0: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
84c0: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
84d0: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
84e0: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
84f0: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
8500: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
8510: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
8520: 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20  TRING, out2 */. 
8530: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8540: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
8550: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8560: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d  (p, pOp);.  pOp-
8570: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
8580: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
8590: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
85a0: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
85b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
85c0: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
85d0: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
85e0: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
85f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8600: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
8610: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
8620: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
8630: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
8640: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
8650: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
8660: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8670: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8680: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8690: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
86a0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
86b0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
86c0: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
86d0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
86e0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
86f0: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
8700: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
8710: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
8720: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
8730: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
8740: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
8750: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
8760: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
8770: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
8780: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8790: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
87a0: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
87b0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
87c0: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
87d0: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
87e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28    }.#endif.  if(
87f0: 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69   pOp->p1>db->aLi
8800: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
8810: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
8820: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8830: 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  }.  /* Fall thro
8840: 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
8850: 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20  case, OP_String 
8860: 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64  */.}.  ./* Opcod
8870: 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20  e: String P1 P2 
8880: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
8890: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
88a0: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
88b0: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
88c0: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
88d0: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
88e0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
88f0: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  2..**.** If P5!=
8900: 30 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  0 and the conten
8910: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
8920: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
8930: 20 7a 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74   zero, then.** t
8940: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
8950: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
8960: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
8970: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
8980: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
8990: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
89a0: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
89b0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
89c0: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
89d0: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
89e0: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
89f0: 20 43 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f   CAST..*/.case O
8a00: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8a10: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8a20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8a30: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8a40: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8a50: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8a60: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
8a70: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
8a80: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8a90: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
8aa0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
8ab0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
8ac0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8ad0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8ae0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
8af0: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
8b00: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
8b10: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
8b20: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
8b30: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73  ->p3>0 );.    as
8b40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
8b50: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8b60: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
8b70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
8b80: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
8b90: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
8ba0: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
8bb0: 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d  In3->u.i ) pOut-
8bc0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
8bd0: 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  b|MEM_Static|MEM
8be0: 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69  _Term;.  }.#endi
8bf0: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
8c00: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
8c10: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
8c20: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50  nopsis:  r[P2..P
8c30: 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72  3]=NULL.**.** Wr
8c40: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
8c50: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
8c60: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
8c70: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
8c80: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
8c90: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
8ca0: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
8cb0: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
8cc0: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
8cd0: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
8ce0: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
8cf0: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
8d00: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
8d10: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
8d20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
8d30: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
8d40: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
8d50: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
8d60: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
8d70: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
8d80: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
8d90: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
8da0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
8db0: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
8dc0: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
8dd0: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
8de0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8df0: 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31  .  int cnt;.  u1
8e00: 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f  6 nullFlag;.  pO
8e10: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8e20: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63  ase(p, pOp);.  c
8e30: 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70  nt = pOp->p3-pOp
8e40: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
8e50: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
8e60: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
8e70: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8e80: 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d   nullFlag = pOp-
8e90: 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c  >p1 ? (MEM_Null|
8ea0: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d  MEM_Cleared) : M
8eb0: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65  EM_Null;.  while
8ec0: 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70  ( cnt>0 ){.    p
8ed0: 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62  Out++;.    memAb
8ee0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
8ef0: 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Out);.    sqlite
8f00: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
8f10: 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  pOut);.    pOut-
8f20: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
8f30: 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20  g;.    cnt--;.  
8f40: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
8f50: 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c   Opcode: SoftNul
8f60: 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20  l P1 * * * *.** 
8f70: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d  Synopsis:  r[P1]
8f80: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20  =NULL.**.** Set 
8f90: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 68  register P1 to h
8fa0: 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55  ave the value NU
8fb0: 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74 68  LL as seen by th
8fc0: 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a  e OP_MakeRecord.
8fd0: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  ** instruction, 
8fe0: 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20  but do not free 
8ff0: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
9000: 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69  ob memory associ
9010: 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65  ated with.** the
9020: 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68   register, so th
9030: 61 74 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  at if the value 
9040: 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20  was a string or 
9050: 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a  blob that was.**
9060: 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69   previously copi
9070: 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70  ed using OP_SCop
9080: 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77 69  y, the copies wi
9090: 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  ll continue to b
90a0: 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65  e valid..*/.case
90b0: 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a   OP_SoftNull: {.
90c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
90d0: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
90e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
90f0: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
9100: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9110: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
9120: 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45   (pOut->flags|ME
9130: 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64  M_Null)&~MEM_Und
9140: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
9150: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
9160: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
9170: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9180: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
9190: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
91a0: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
91b0: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
91c0: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
91d0: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
91e0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
91f0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
9200: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9210: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
9220: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
9230: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f  X_LENGTH );.  pO
9240: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9250: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
9260: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9270: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
9280: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
9290: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
92a0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
92b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
92c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
92d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
92e0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
92f0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
9300: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
9310: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
9320: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
9330: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
9340: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
9350: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
9360: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
9370: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
9380: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
9390: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
93a0: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
93b0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
93c0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
93d0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
93e0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
93f0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9400: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
9410: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
9420: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
9430: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
9440: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9450: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
9460: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9470: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
9480: 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d  z==p->azVar[pOp-
9490: 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72  >p1-1] );.  pVar
94a0: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
94b0: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
94c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
94d0: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
94e0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
94f0: 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74    }.  pOut = out
9500: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9510: 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Op);.  sqlite3Vd
9520: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
9530: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
9540: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
9550: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9560: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9570: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
9580: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
9590: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
95a0: 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a  P2@P3]=r[P1@P3].
95b0: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50  **.** Move the P
95c0: 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  3 values in regi
95d0: 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ster P1..P1+P3-1
95e0: 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65   over into.** re
95f0: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
9600: 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20  3-1.  Registers 
9610: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a  P1..P1+P3-1 are.
9620: 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20  ** left holding 
9630: 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  a NULL.  It is a
9640: 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69  n error for regi
9650: 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50  ster ranges.** P
9660: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50  1..P1+P3-1 and P
9670: 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76  2..P2+P3-1 to ov
9680: 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e  erlap.  It is an
9690: 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33   error.** for P3
96a0: 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
96b0: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d   1..*/.case OP_M
96c0: 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20  ove: {.  int n; 
96d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
96e0: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
96f0: 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f   left to copy */
9700: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
9710: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
9720: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
9730: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
9740: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9750: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20  o copy to */..  
9760: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
9770: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
9780: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
9790: 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31  ssert( n>0 && p1
97a0: 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20  >0 && p2>0 );.  
97b0: 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32  assert( p1+n<=p2
97c0: 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a   || p2+n<=p1 );.
97d0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
97e0: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
97f0: 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20  Mem[p2];.  do{. 
9800: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c     assert( pOut<
9810: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  =&aMem[(p->nMem-
9820: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9830: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
9840: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
9850: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
9860: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
9870: 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
9880: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
9890: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
98a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
98b0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
98c0: 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  1);.#ifdef SQLIT
98d0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
98e0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
98f0: 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70  >=&aMem[p1] && p
9900: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c  Out->pScopyFrom<
9910: 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f  pOut ){.      pO
9920: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b  ut->pScopyFrom +
9930: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a  = pOp->p2 - p1;.
9940: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
9950: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9960: 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53  pOut);.    REGIS
9970: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20  TER_TRACE(p2++, 
9980: 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b  pOut);.    pIn1+
9990: 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  +;.    pOut++;. 
99a0: 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a   }while( --n );.
99b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
99c0: 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50  pcode: Copy P1 P
99d0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
99e0: 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d  psis: r[P2@P3+1]
99f0: 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a  =r[P1@P3+1].**.*
9a00: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
9a10: 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   registers P1..P
9a20: 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74  1+P3 into regist
9a30: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a  ers P2..P2+P3..*
9a40: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
9a50: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
9a60: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
9a70: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
9a80: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
9a90: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
9aa0: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
9ab0: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
9ac0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
9ad0: 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  y: {.  int n;.. 
9ae0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
9af0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9b00: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
9b10: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9b20: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
9b30: 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28  pIn1 );.  while(
9b40: 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65   1 ){.    sqlite
9b50: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
9b60: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
9b70: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20  MEM_Ephem);.    
9b80: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
9b90: 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Out);.#ifdef SQL
9ba0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f  ITE_DEBUG.    pO
9bb0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
9bc0: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52   0;.#endif.    R
9bd0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
9be0: 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c  p->p2+pOp->p3-n,
9bf0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20   pOut);.    if( 
9c00: 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b  (n--)==0 ) break
9c10: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
9c20: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
9c30: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9c40: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
9c50: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9c60: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
9c70: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
9c80: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
9c90: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
9ca0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9cb0: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
9cc0: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
9cd0: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
9ce0: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
9cf0: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
9d00: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
9d10: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
9d20: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
9d30: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
9d40: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
9d50: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
9d60: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
9d70: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
9d80: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
9d90: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
9da0: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
9db0: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
9dc0: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
9dd0: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
9de0: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
9df0: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
9e00: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
9e10: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
9e20: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
9e30: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
9e40: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
9e50: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
9e60: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9e70: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
9e80: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9e90: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9ea0: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
9eb0: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
9ec0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9ed0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
9ee0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
9ef0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9f00: 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  BUG.  if( pOut->
9f10: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20  pScopyFrom==0 ) 
9f20: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9f30: 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a   = pIn1;.#endif.
9f40: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9f50: 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50  pcode: IntCopy P
9f60: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
9f70: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b  nopsis: r[P2]=r[
9f80: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  P1].**.** Transf
9f90: 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  er the integer v
9fa0: 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67  alue held in reg
9fb0: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
9fc0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9fd0: 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
9fe0: 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  mized version of
9ff0: 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b   SCopy that work
a000: 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67  s only for integ
a010: 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f  er.** values..*/
a020: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79  .case OP_IntCopy
a030: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
a040: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
a050: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a060: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
a070: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
a080: 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75  Int)!=0 );.  pOu
a090: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a0a0: 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
a0b0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
a0c0: 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20  t, pIn1->u.i);. 
a0d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a0e0: 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20  code: ResultRow 
a0f0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a100: 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74  ynopsis:  output
a110: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
a120: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
a130: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
a140: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
a150: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
a160: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
a170: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
a180: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
a190: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
a1a0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
a1b0: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
a1c0: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
a1d0: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
a1e0: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
a1f0: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
a200: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
a210: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
a220: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
a230: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
a240: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
a250: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
a260: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
a270: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
a280: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
a290: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
a2a0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
a2b0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
a2c0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
a2d0: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
a2e0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
a2f0: 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75  CALLBACK.  /* Ru
a300: 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  n the progress c
a310: 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f  ounter just befo
a320: 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20  re returning..  
a330: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
a340: 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20  ogress!=0.   && 
a350: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
a360: 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62  ssLimit.   && db
a370: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
a380: 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30  pProgressArg)!=0
a390: 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  .  ){.    rc = S
a3a0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
a3b0: 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  .    goto vdbe_e
a3c0: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23  rror_halt;.  }.#
a3d0: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
a3e0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
a3f0: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
a400: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
a410: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
a420: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
a430: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a440: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
a450: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
a460: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
a470: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
a480: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
a490: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
a4a0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
a4b0: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
a4c0: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
a4d0: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
a4e0: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
a4f0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
a500: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
a510: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
a520: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
a530: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
a540: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
a550: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
a560: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
a570: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
a580: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
a590: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
a5a0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a5b0: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
a5c0: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
a5d0: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
a5e0: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
a5f0: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
a600: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
a610: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
a620: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
a630: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
a640: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
a650: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
a660: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
a670: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a680: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
a690: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
a6a0: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
a6b0: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
a6c0: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
a6d0: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
a6e0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a6f0: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
a700: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
a710: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
a720: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
a730: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
a740: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
a750: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
a760: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
a770: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
a780: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
a790: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
a7a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
a7b0: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
a7c0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
a7d0: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
a7e0: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
a7f0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a800: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
a810: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
a820: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
a830: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
a840: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
a850: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
a860: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
a870: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
a880: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
a890: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
a8a0: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
a8b0: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
a8c0: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
a8d0: 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
a8e0: 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20  LITE_OK) ){.    
a8f0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
a900: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
a910: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
a920: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
a930: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
a940: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
a950: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
a960: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
a970: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
a980: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
a990: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
a9a0: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
a9b0: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
a9c0: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
a9d0: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
a9e0: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
a9f0: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
aa00: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
aa10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
aa20: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
aa30: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
aa40: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
aa50: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
aa60: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
aa70: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
aa80: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
aa90: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
aaa0: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
aab0: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
aac0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
aad0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
aae0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
aaf0: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
ab00: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
ab10: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
ab20: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
ab30: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
ab40: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
ab50: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
ab60: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
ab70: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
ab80: 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
ab90: 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20   aOp) + 1;.  rc 
aba0: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
abb0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
abc0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
abd0: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
abe0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
abf0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
ac00: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
ac10: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
ac20: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
ac30: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
ac40: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
ac50: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
ac60: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ac70: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ac80: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
ac90: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
aca0: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
acb0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
acc0: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
acd0: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
ace0: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
acf0: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
ad00: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
ad10: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
ad20: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
ad30: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
ad40: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
ad50: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
ad60: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
ad70: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
ad80: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ad90: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
ada0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
adb0: 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70   i64 nByte;..  p
adc0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
add0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
ade0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
adf0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
ae00: 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
ae10: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
ae20: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
ae30: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
ae40: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
ae50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
ae60: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
ae70: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
ae80: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
ae90: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
aea0: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
aeb0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
aec0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
aed0: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
aee0: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
aef0: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
af00: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
af10: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
af20: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
af30: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
af40: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
af50: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
af60: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
af70: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
af80: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
af90: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
afa0: 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  m;.  }.  MemSetT
afb0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
afc0: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f  M_Str);.  if( pO
afd0: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
afe0: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
aff0: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
b000: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
b010: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
b020: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
b030: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
b040: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
b050: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
b060: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
b070: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
b080: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
b090: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
b0a0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
b0b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
b0c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
b0d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b0e0: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
b0f0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
b100: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
b110: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
b120: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b130: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
b140: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b150: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b160: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b170: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b180: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b190: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b1a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b1b0: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
b1c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b1d0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b1e0: 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]*r[P2].**.
b1f0: 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74  **.** Multiply t
b200: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b210: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
b220: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b230: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b240: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b250: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b260: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b270: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b280: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b290: 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61  * Opcode: Subtra
b2a0: 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ct P1 P2 P3 * *.
b2b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b2c0: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
b2d0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
b2e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b2f0: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
b300: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b310: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b320: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b330: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b340: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b350: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b360: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
b380: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
b390: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b3a0: 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a  P3]=r[P2]/r[P1].
b3b0: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
b3c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b3d0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
b3e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b3f0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b400: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b410: 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f  ister P3 (P3=P2/
b420: 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75  P1). If the valu
b430: 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65  e in .** registe
b440: 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  r P1 is zero, th
b450: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
b460: 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72   NULL. If either
b470: 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55   input is .** NU
b480: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b490: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b4a0: 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20  code: Remainder 
b4b0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b4c0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b4d0: 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]%r[P1].**.
b4e0: 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72  ** Compute the r
b4f0: 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69  emainder after i
b500: 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20  nteger register 
b510: 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79  P2 is divided by
b520: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b530: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b540: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b550: 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  r P3. .** If the
b560: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b570: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68  er P1 is zero th
b580: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b590: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
b5a0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
b5b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b5c0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
b5d0: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
b5e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b5f0: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
b600: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b610: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
b620: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b630: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
b640: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b650: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
b660: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
b670: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
b680: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
b690: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
b6a0: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
b6b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b6c0: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
b6d0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b6e0: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
b6f0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
b700: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
b710: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b720: 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b  .  char bIntint;
b730: 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75     /* Started ou
b740: 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72  t as two integer
b750: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75   operands */.  u
b760: 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  16 flags;      /
b770: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
b780: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
b790: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36   inputs */.  u16
b7a0: 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20   type1;      /* 
b7b0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
b7c0: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
b7d0: 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20    u16 type2;    
b7e0: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
b7f0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
b800: 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  nd */.  i64 iA; 
b810: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
b820: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
b830: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
b840: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
b850: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
b860: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b870: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
b880: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
b890: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
b8a0: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
b8b0: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
b8c0: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
b8d0: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
b8e0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b8f0: 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75  1];.  type1 = nu
b900: 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b  mericType(pIn1);
b910: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b920: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65  pOp->p2];.  type
b930: 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  2 = numericType(
b940: 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20  pIn2);.  pOut = 
b950: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
b960: 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e    flags = pIn1->
b970: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
b980: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
b990: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
b9a0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
b9b0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
b9c0: 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  l;.  if( (type1 
b9d0: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
b9e0: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
b9f0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
ba00: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
ba10: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
ba20: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
ba30: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
ba40: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
ba50: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
ba60: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
ba70: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
ba80: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
ba90: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
baa0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
bab0: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
bac0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
bad0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
bae0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
baf0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
bb00: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
bb10: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
bb20: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bb30: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
bb40: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
bb50: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bb60: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bb70: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bb80: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
bb90: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
bba0: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
bbb0: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
bbc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bbd0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
bbe0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
bbf0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bc00: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bc10: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bc20: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bc30: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
bc40: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bc50: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bc60: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
bc70: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
bc80: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bc90: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
bca0: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
bcb0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
bcc0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
bcd0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
bce0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
bcf0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
bd00: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
bd10: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
bd20: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
bd30: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
bd40: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
bd50: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bd60: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
bd70: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
bd80: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bd90: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
bda0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
bdb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bdc0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
bdd0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
bde0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
bdf0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
be00: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
be10: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
be20: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
be30: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
be40: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
be50: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
be60: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
be70: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
be80: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
be90: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
bea0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
beb0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
bec0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bed0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bee0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bef0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bf00: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
bf10: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
bf20: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
bf30: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
bf40: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
bf50: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
bf60: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
bf70: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
bf80: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bf90: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
bfa0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
bfb0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
bfc0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
bfd0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bfe0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
bff0: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
c000: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c010: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
c020: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
c030: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
c040: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
c050: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c060: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
c070: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
c080: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
c090: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
c0a0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
c0b0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
c0c0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
c0d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c0e0: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
c0f0: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
c100: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
c110: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
c120: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
c130: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
c140: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
c150: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
c160: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
c170: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
c180: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
c190: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
c1a0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
c1b0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
c1c0: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
c1d0: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
c1e0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
c1f0: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
c200: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
c210: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
c220: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
c230: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
c240: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
c250: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
c260: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
c270: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
c280: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
c290: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
c2a0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
c2b0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
c2c0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
c2d0: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
c2e0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
c2f0: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
c300: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
c310: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
c320: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
c330: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
c340: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
c350: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
c360: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
c370: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
c380: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
c390: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
c3a0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
c3b0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
c3c0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
c3d0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
c3e0: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
c3f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c400: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
c410: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
c420: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c430: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 30 20 50  ode: Function0 P
c440: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c450: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
c460: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
c470: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
c480: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
c490: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
c4a0: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
c4b0: 74 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  t that.** define
c4c0: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
c4d0: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
c4e0: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
c4f0: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
c500: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
c510: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
c520: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
c530: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
c540: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
c550: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
c560: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c570: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
c580: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
c590: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
c5a0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
c5b0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
c5c0: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
c5d0: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
c5e0: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
c5f0: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
c600: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
c610: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
c620: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
c630: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
c640: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
c650: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
c660: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
c670: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
c680: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
c690: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
c6a0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
c6b0: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
c6c0: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
c6d0: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
c6e0: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
c6f0: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
c700: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
c710: 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c 20 41 67 67  o: Function, Agg
c720: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
c730: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  /./* Opcode: Fun
c740: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
c750: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
c760: 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50  : r[P3]=func(r[P
c770: 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76  2@P5]).**.** Inv
c780: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
c790: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
c7a0: 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
c7b0: 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
c7c0: 74 20 74 68 61 74 0a 2a 2a 20 63 6f 6e 74 61 69  t that.** contai
c7d0: 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
c7e0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
c7f0: 62 65 20 72 75 6e 29 20 77 69 74 68 20 50 35 20  be run) with P5 
c800: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 0a  arguments taken.
c810: 2a 2a 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  ** from register
c820: 20 50 32 20 61 6e 64 20 73 75 63 63 65 73 73 6f   P2 and successo
c830: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
c840: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
c850: 69 73 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  is stored.** in 
c860: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 52 65  register P3.  Re
c870: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
c880: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
c890: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
c8a0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
c8b0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
c8c0: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
c8d0: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
c8e0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
c8f0: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
c900: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
c910: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
c920: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
c930: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
c940: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
c950: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
c960: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
c970: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
c980: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
c990: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
c9a0: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
c9b0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
c9c0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
c9d0: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
c9e0: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
c9f0: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
ca00: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
ca10: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
ca20: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
ca30: 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  * SQL functions 
ca40: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f  are initially co
ca50: 64 65 64 20 61 73 20 4f 50 5f 46 75 6e 63 74 69  ded as OP_Functi
ca60: 6f 6e 30 20 77 69 74 68 20 50 34 20 70 6f 69 6e  on0 with P4 poin
ca70: 74 69 6e 67 0a 2a 2a 20 74 6f 20 61 20 46 75 6e  ting.** to a Fun
ca80: 63 44 65 66 20 6f 62 6a 65 63 74 2e 20 20 42 75  cDef object.  Bu
ca90: 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61 6c 75  t on first evalu
caa0: 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f 70  ation, the P4 op
cab0: 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74 6f  erand is.** auto
cac0: 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72  matically conver
cad0: 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69  ted into an sqli
cae0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
caf0: 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65 72 61  ct and the opera
cb00: 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64 20  tion.** changed 
cb10: 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e 63 74  to this OP_Funct
cb20: 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e 20  ion opcode.  In 
cb30: 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
cb40: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a  itialization of.
cb50: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
cb60: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 6f 63  ontext object oc
cb70: 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20  curs only once, 
cb80: 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e 63 65  rather than once
cb90: 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76 61   for each.** eva
cba0: 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66  luation of the f
cbb0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  unction..**.** S
cbc0: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
cbd0: 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67  n0, AggStep, Agg
cbe0: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
cbf0: 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20 20  _Function0: {.  
cc00: 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33  int n;.  sqlite3
cc10: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
cc20: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
cc30: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
cc40: 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d  EF );.  n = pOp-
cc50: 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p5;.  assert( p
cc60: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
cc70: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
cc80: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
cc90: 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
cca0: 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
ccb0: 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  ->p2+n<=(p->nMem
ccc0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20  -p->nCursor)+1) 
ccd0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
cce0: 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
ccf0: 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
cd00: 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73  +n );.  pCtx = s
cd10: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
cd20: 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  w(db, sizeof(*pC
cd30: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
cd40: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
cd50: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
cd60: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
cd70: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
cd80: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
cd90: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
cda0: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
cdb0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
cdc0: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
cdd0: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
cde0: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
cdf0: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
ce00: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
ce10: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
ce20: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
ce30: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
ce40: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
ce50: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
ce60: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
ce70: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
ce80: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
ce90: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cea0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
ceb0: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
cec0: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
ced0: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
cee0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
cef0: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
cf00: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
cf10: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
cf20: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
cf30: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
cf40: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
cf50: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
cf60: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
cf70: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
cf80: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
cf90: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
cfa0: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
cfb0: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
cfc0: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
cfd0: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
cfe0: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
cff0: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   */.  pOut = &aM
d000: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d010: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d  f( pCtx->pOut !=
d020: 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74   pOut ){.    pCt
d030: 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a  x->pOut = pOut;.
d040: 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
d050: 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
d060: 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
d070: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d080: 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41  +i];.  }..  memA
d090: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d0a0: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66  pCtx->pOut);.#if
d0b0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
d0c0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
d0d0: 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
d0e0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
d0f0: 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
d100: 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
d110: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
d120: 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
d130: 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
d140: 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  f.  MemSetTypeFl
d150: 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d  ag(pCtx->pOut, M
d160: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
d170: 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
d180: 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  0;.  db->lastRow
d190: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
d1a0: 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d    (*pCtx->pFunc-
d1b0: 3e 78 46 75 6e 63 29 28 70 43 74 78 2c 20 70 43  >xFunc)(pCtx, pC
d1c0: 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e  tx->argc, pCtx->
d1d0: 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  argv); /* IMP: R
d1e0: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
d1f0: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
d200: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
d210: 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20   Remember rowid 
d220: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
d230: 78 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49  xFunc */..  /* I
d240: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
d250: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
d260: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
d270: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43  tion */.  if( pC
d280: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
d290: 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d  ){.    if( pCtx-
d2a0: 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
d2b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
d2c0: 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
d2d0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
d2e0: 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20  Ctx->pOut));.   
d2f0: 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73     rc = pCtx->is
d300: 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  Error;.    }.   
d310: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
d320: 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 43 74  teAuxData(p, pCt
d330: 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29  x->iOp, pOp->p1)
d340: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
d350: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
d360: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
d370: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
d380: 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67    if( pOut->flag
d390: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
d3a0: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71  _Blob) ){.    sq
d3b0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
d3c0: 6e 63 6f 64 69 6e 67 28 70 43 74 78 2d 3e 70 4f  ncoding(pCtx->pO
d3d0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
d3e0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
d3f0: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 43 74 78  beMemTooBig(pCtx
d400: 2d 3e 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 74  ->pOut) ) goto t
d410: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52  oo_big;.  }..  R
d420: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d430: 70 2d 3e 70 33 2c 20 70 43 74 78 2d 3e 70 4f 75  p->p3, pCtx->pOu
d440: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
d450: 5f 42 4c 4f 42 53 49 5a 45 28 70 43 74 78 2d 3e  _BLOBSIZE(pCtx->
d460: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
d470: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
d480: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
d490: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d4a0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32  r[P3]=r[P1]&r[P2
d4b0: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
d4c0: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
d4d0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
d4e0: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
d4f0: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
d500: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
d510: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
d520: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
d530: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
d540: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
d550: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
d560: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d570: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
d580: 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]|r[P2].**.**
d590: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
d5a0: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
d5b0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
d5c0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
d5d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
d5e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
d5f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
d600: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
d610: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
d620: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d630: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
d640: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
d650: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
d660: 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  <<r[P1].**.** Sh
d670: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
d680: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d690: 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74  r P2 to the left
d6a0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
d6b0: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
d6c0: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
d6d0: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
d6e0: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
d6f0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d700: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d710: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d720: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d730: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
d740: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
d750: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d760: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d770: 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a  =r[P2]>>r[P1].**
d780: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
d790: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
d7a0: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
d7b0: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
d7c0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
d7d0: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
d7e0: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
d7f0: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
d800: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d810: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d820: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d830: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d840: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d850: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d870: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
d880: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
d890: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
d8a0: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
d8b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d8c0: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
d8d0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d8e0: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
d8f0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
d900: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
d910: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
d920: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
d930: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
d940: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d950: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
d960: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d970: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
d980: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
d990: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
d9a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d9b0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
d9c0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
d9d0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
d9e0: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
d9f0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
da00: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
da10: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
da20: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
da30: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
da40: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
da50: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
da60: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
da70: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
da80: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
da90: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
daa0: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
dab0: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
dac0: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
dad0: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
dae0: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
daf0: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
db00: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
db10: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
db20: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
db30: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
db40: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
db50: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
db60: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
db70: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
db80: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
db90: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
dba0: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
dbb0: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
dbc0: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
dbd0: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
dbe0: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
dbf0: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
dc00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
dc10: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
dc20: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
dc30: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
dc40: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
dc50: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
dc60: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
dc70: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
dc80: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
dc90: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
dca0: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
dcb0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
dcc0: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
dcd0: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
dce0: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
dcf0: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
dd00: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
dd10: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
dd20: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
dd30: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
dd40: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
dd50: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
dd60: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
dd70: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
dd80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
dd90: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
dda0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
ddb0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
ddc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ddd0: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
dde0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
ddf0: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50  psis:  r[P1]=r[P
de00: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
de10: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
de20: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
de30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
de40: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
de50: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
de60: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
de70: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
de80: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
de90: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
dea0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
dec0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
ded0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
dee0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
def0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
df00: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
df10: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
df20: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
df30: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
df40: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
df50: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
df60: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
df70: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
df80: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
df90: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
dfa0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
dfb0: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
dfc0: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
dfd0: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
dfe0: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
dff0: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
e000: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
e010: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
e020: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
e030: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
e040: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
e050: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
e060: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
e070: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
e080: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e090: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e0a0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e0b0: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
e0c0: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
e0d0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
e0e0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
e0f0: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
e100: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
e110: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
e120: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
e130: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e140: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
e150: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e160: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
e170: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
e180: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
e190: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e1a0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
e1b0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
e1c0: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
e1d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
e1e0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e1f0: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
e200: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
e210: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
e220: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
e230: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
e240: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
e250: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
e260: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
e270: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
e280: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
e290: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
e2a0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
e2b0: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
e2c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
e2d0: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
e2e0: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
e2f0: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
e300: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
e310: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
e320: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
e330: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
e340: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
e350: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
e360: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
e370: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
e380: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
e390: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e3b0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e3c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e3d0: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e3e0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
e3f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
e400: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
e410: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e420: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
e430: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e440: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
e450: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e460: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
e470: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
e480: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e490: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e4a0: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
e4b0: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
e4c0: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20  .** <ul>.** <li 
e4d0: 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54  value="97"> TEXT
e4e0: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39  .** <li value="9
e4f0: 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20  8"> BLOB.** <li 
e500: 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45  value="99"> NUME
e510: 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  RIC.** <li value
e520: 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a  ="100"> INTEGER.
e530: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30  ** <li value="10
e540: 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c  1"> REAL.** </ul
e550: 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  >.**.** A NULL v
e560: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
e570: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
e580: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
e590: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
e5a0: 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Cast: {       
e5b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
e5c0: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
e5d0: 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41  Op->p2>=SQLITE_A
e5e0: 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e  FF_BLOB && pOp->
e5f0: 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2<=SQLITE_AFF_R
e600: 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EAL );.  testcas
e610: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
e620: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20  TE_AFF_TEXT );. 
e630: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
e640: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2==SQLITE_AFF_B
e650: 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73  LOB );.  testcas
e660: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
e670: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
e680: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e690: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e6a0: 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74  F_INTEGER );.  t
e6b0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e6c0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
e6d0: 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  L );.  pIn1 = &a
e6e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e6f0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
e700: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20  (p, pIn1);.  rc 
e710: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
e720: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
e730: 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70  eMemCast(pIn1, p
e740: 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67  Op->p2, encoding
e750: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
e760: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
e770: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
e780: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
e790: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
e7a0: 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33  ode: Lt P1 P2 P3
e7b0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e7c0: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50  is: if r[P1]<r[P
e7d0: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
e7e0: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
e7f0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
e800: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
e810: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
e820: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
e830: 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a  ddress P2.  .**.
e840: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
e850: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
e860: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
e870: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
e880: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
e890: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
e8a0: 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68  the jump.  If th
e8b0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
e8c0: 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63  ULL .** bit is c
e8d0: 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74  lear then fall t
e8e0: 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72  hrough if either
e8f0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e900: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
e910: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
e920: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
e930: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
e940: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
e950: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
e960: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
e970: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
e980: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
e990: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
e9a0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
e9b0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
e9c0: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
e9d0: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
e9e0: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
e9f0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
ea00: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
ea10: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
ea20: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
ea30: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
ea40: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
ea50: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
ea60: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
ea70: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ea80: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
ea90: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
eaa0: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
eab0: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
eac0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
ead0: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
eae0: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
eaf0: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
eb00: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
eb10: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
eb20: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
eb30: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
eb40: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
eb50: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
eb60: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
eb70: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
eb80: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
eb90: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
eba0: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
ebb0: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
ebc0: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
ebd0: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
ebe0: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
ebf0: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
ec00: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
ec10: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
ec20: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
ec30: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
ec40: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
ec50: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
ec60: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
ec70: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
ec80: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
ec90: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
eca0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
ecb0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
ecc0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
ecd0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
ece0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
ecf0: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
ed00: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
ed10: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
ed20: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ed30: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
ed40: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
ed50: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
ed60: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
ed70: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
ed80: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
ed90: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
eda0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
edb0: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
edc0: 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65  NULLEQ bit is se
edd0: 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55  t in P5, then NU
ede0: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
edf0: 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61  nsidered.** equa
ee00: 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
ee10: 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20  , provided that 
ee20: 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65  they do not have
ee30: 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72   their MEM_Clear
ee40: 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a  ed.** bit set..*
ee50: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
ee60: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ee70: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
ee80: 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]!=r[P3] goto
ee90: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
eea0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
eeb0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
eec0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
eed0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eee0: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
eef0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ef00: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
ef10: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  al.  See the Lt 
ef20: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
ef30: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ef40: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
ef50: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
ef60: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
ef70: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
ef80: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
ef90: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
efa0: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
efb0: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
efc0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
efd0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
efe0: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
eff0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73  mparison is fals
f000: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
f010: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
f020: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f030: 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69   true..** If nei
f040: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f050: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
f060: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
f070: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
f080: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
f090: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
f0a0: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
f0b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
f0c0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f0d0: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f0e0: 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]==r[P3] goto 
f0f0: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
f100: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f110: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f120: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f130: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f140: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
f150: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
f160: 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a   P3 are equal..*
f170: 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63  * See the Lt opc
f180: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f190: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f1a0: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
f1b0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
f1c0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
f1d0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
f1e0: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
f1f0: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
f200: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
f210: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
f220: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f230: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f240: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
f250: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
f260: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f270: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
f280: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
f290: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
f2a0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f2b0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
f2c0: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
f2d0: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
f2e0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
f2f0: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
f300: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
f310: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
f320: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f330: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72  sis: if r[P1]<=r
f340: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f350: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f360: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f370: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f380: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f390: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f3a0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f3b0: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
f3c0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
f3d0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f3e0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f3f0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f400: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f410: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
f420: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
f430: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f440: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
f450: 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]>r[P3] goto P2.
f460: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f470: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f480: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f490: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f4a0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f4b0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
f4c0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
f4d0: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
f4e0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f4f0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f500: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f510: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f520: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f530: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
f540: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f550: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50  s: if r[P1]>=r[P
f560: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
f570: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
f580: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
f590: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
f5a0: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
f5b0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
f5c0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
f5d0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
f5e0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
f5f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
f600: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
f610: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f620: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
f630: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
f640: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
f650: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f660: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
f670: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f680: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
f690: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f6a0: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
f6b0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f6c0: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
f6d0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f6e0: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
f6f0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f700: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
f710: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f720: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
f730: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f740: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
f750: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f760: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
f770: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
f780: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
f790: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
f7a0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f7b0: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
f7c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
f7d0: 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
f7e0: 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
f7f0: 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
f800: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
f810: 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
f820: 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
f830: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66  rison */.  u16 f
f840: 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f  lags1;         /
f850: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
f860: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d  l value of pIn1-
f870: 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20  >flags */.  u16 
f880: 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20  flags3;         
f890: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
f8a0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33  al value of pIn3
f8b0: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49  ->flags */..  pI
f8c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
f8d0: 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
f8e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f8f0: 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66  flags1 = pIn1->f
f900: 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d  lags;.  flags3 =
f910: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
f920: 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c  if( (flags1 | fl
f930: 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29  ags3)&MEM_Null )
f940: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  {.    /* One or 
f950: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
f960: 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66  e NULL */.    if
f970: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f980: 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20  TE_NULLEQ ){.   
f990: 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f     /* If SQLITE_
f9a0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77  NULLEQ is set (w
f9b0: 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68  hich will only h
f9c0: 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65  appen if the ope
f9d0: 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a  rator is.      *
f9e0: 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65  * OP_Eq or OP_Ne
f9f0: 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  ) then take the 
fa00: 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65  jump or not depe
fa10: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
fa20: 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74  .      ** or not
fa30: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
fa40: 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a  re null..      *
fa50: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
fa60: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
fa70: 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Eq || pOp->opcod
fa80: 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
fa90: 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
faa0: 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29  1 & MEM_Cleared)
fab0: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ==0 );.      ass
fac0: 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
fad0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
fae0: 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  L)==0 );.      i
faf0: 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e  f( (flags1&MEM_N
fb00: 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26  ull)!=0.       &
fb10: 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75  & (flags3&MEM_Nu
fb20: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
fb30: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65   (flags3&MEM_Cle
fb40: 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29  ared)==0.      )
fb50: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
fb60: 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  0;  /* Results a
fb70: 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
fb80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
fb90: 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65   res = 1;  /* Re
fba0: 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71  sults are not eq
fbb0: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ual */.      }. 
fbc0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
fbd0: 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  /* SQLITE_NULLEQ
fbe0: 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74   is clear and at
fbf0: 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61   least one opera
fc00: 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20  nd is NULL,.    
fc10: 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65    ** then the re
fc20: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e  sult is always N
fc30: 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68  ULL..      ** Th
fc40: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
fc50: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  if the SQLITE_JU
fc60: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20  MPIFNULL bit is 
fc70: 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  set..      */.  
fc80: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
fc90: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
fca0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74   ){.        pOut
fcb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
fcc0: 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  ];.        memAb
fcd0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
fce0: 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d 65  Out);.        Me
fcf0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
fd00: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
fd10: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
fd20: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
fd30: 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ut);.      }else
fd40: 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  {.        VdbeBr
fd50: 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a  anchTaken(2,3);.
fd60: 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d          if( pOp-
fd70: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
fd80: 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20  PIFNULL ){.     
fd90: 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
fda0: 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a  o_p2;.        }.
fdb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
fdc0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
fdd0: 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
fde0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
fdf0: 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
fe00: 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
fe10: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
fe20: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
fe30: 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
fe40: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
fe50: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20  NUMERIC ){.     
fe60: 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28   if( (flags1 & (
fe70: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
fe80: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
fe90: 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Str ){.        a
fea0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
feb0: 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20  ity(pIn1,0);.   
fec0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
fed0: 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e  flags3 & (MEM_In
fee0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
fef0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
ff00: 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
ff10: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
ff20: 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n3,0);.      }. 
ff30: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66     }else if( aff
ff40: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
ff50: 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20  F_TEXT ){.      
ff60: 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  if( (flags1 & ME
ff70: 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c  M_Str)==0 && (fl
ff80: 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags1 & (MEM_Int|
ff90: 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b  MEM_Real))!=0 ){
ffa0: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
ffb0: 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
ffc0: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
ffd0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
ffe0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
fff0: 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
10000 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
10010 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e  ringify(pIn1, en
10020 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20  coding, 1);.    
10030 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66      testcase( (f
10040 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21  lags1&MEM_Dyn) !
10050 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  = (pIn1->flags&M
10060 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20  EM_Dyn) );.     
10070 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e     flags1 = (pIn
10080 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  1->flags & ~MEM_
10090 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
100a0 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61  gs1 & MEM_TypeMa
100b0 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  sk);.      }.   
100c0 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
100d0 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
100e0 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49  (flags3 & (MEM_I
100f0 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
10100 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
10110 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
10120 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
10130 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10140 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
10150 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
10160 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10170 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c  mStringify(pIn3,
10180 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
10190 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
101a0 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e   (flags3&MEM_Dyn
101b0 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ) != (pIn3->flag
101c0 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
101d0 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28        flags3 = (
101e0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn3->flags & ~M
101f0 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
10200 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70  flags3 & MEM_Typ
10210 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  eMask);.      }.
10220 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
10230 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
10240 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
10250 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
10260 0a 20 20 20 20 69 66 28 20 66 6c 61 67 73 31 20  .    if( flags1 
10270 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
10280 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10290 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  emExpandBlob(pIn
102a0 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 31  1);.      flags1
102b0 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20   &= ~MEM_Zero;. 
102c0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 66 6c 61     }.    if( fla
102d0 67 73 33 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  gs3 & MEM_Zero )
102e0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
102f0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
10300 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c  (pIn3);.      fl
10310 61 67 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72  ags3 &= ~MEM_Zer
10320 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 73  o;.    }.    res
10330 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
10340 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
10350 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
10360 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
10370 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
10380 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
10390 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
103a0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
103b0 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
103c0 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
103d0 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
103e0 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
103f0 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
10400 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
10410 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
10420 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
10430 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
10440 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
10450 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
10460 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
10470 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
10480 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
10490 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
104a0 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
104b0 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
104c0 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
104d0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
104e0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
104f0 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
10500 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
10510 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
10520 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
10530 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
10540 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
10550 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
10560 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
10570 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10580 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10590 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
105a0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
105b0 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41  p->p2];.    memA
105c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
105d0 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
105e0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
105f0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
10600 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
10610 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10620 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
10630 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
10640 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
10650 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  es!=0, (pOp->p5 
10660 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
10670 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
10680 65 73 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  es ){.      goto
10690 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
106a0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
106b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65  }../* Opcode: Pe
106c0 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20  rmutation * * * 
106d0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74  P4 *.**.** Set t
106e0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75  he permutation u
106f0 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f  sed by the OP_Co
10700 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74  mpare operator t
10710 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a  o be the array.*
10720 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e  * of integers in
10730 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70   P4..**.** The p
10740 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
10750 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
10760 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
10770 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
10780 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
10790 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
107a0 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
107b0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
107c0 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
107d0 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
107e0 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
107f0 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  re..*/.case OP_P
10800 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20  ermutation: {.  
10810 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
10820 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
10830 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
10840 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50  p->p4.ai );.  aP
10850 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34  ermute = pOp->p4
10860 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .ai;.  break;.}.
10870 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70  ./* Opcode: Comp
10880 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20  are P1 P2 P3 P4 
10890 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
108a0 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50  r[P1@P3] <-> r[P
108b0 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  2@P3].**.** Comp
108c0 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
108d0 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
108e0 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
108f0 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
10900 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
10910 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
10920 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
10930 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
10940 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
10950 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
10960 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
10970 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
10980 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
10990 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
109a0 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  TE bit set, then
109b0 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
109c0 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64  mparison is.** d
109d0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
109e0 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
109f0 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72  Permutation oper
10a00 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a  ator.  If the.**
10a10 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
10a20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68  bit is clear, th
10a30 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20  en register are 
10a40 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75  compared in sequ
10a50 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e  ential.** order.
10a60 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
10a70 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
10a80 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
10a90 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10aa0 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
10ab0 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
10ac0 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
10ad0 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
10ae0 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
10af0 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
10b00 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
10b10 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
10b20 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
10b30 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
10b40 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
10b50 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
10b60 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
10b70 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
10b80 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
10b90 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
10ba0 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
10bb0 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
10bc0 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
10bd0 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
10be0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
10bf0 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
10c00 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
10c10 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
10c20 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
10c30 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
10c40 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
10c50 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
10c60 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
10c70 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
10c80 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
10c90 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
10ca0 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20  order */..  if( 
10cb0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
10cc0 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20  G_PERMUTE)==0 ) 
10cd0 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
10ce0 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
10cf0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
10d00 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
10d10 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
10d20 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
10d30 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
10d40 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
10d50 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45  ->p2;.#if SQLITE
10d60 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65  _DEBUG.  if( aPe
10d70 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74  rmute ){.    int
10d80 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20   k, mx = 0;.    
10d90 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b  for(k=0; k<n; k+
10da0 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b  +) if( aPermute[
10db0 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65  k]>mx ) mx = aPe
10dc0 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73  rmute[k];.    as
10dd0 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
10de0 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
10df0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10e00 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
10e10 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p2+mx<=(p->nM
10e20 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
10e30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
10e40 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
10e50 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d   p1+n<=(p->nMem-
10e60 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
10e70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
10e80 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p2+n<=(p->n
10e90 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
10ea0 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  1 );.  }.#endif 
10eb0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
10ec0 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  */.  for(i=0; i<
10ed0 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78  n; i++){.    idx
10ee0 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50   = aPermute ? aP
10ef0 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20  ermute[i] : i;. 
10f00 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
10f10 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69  Valid(&aMem[p1+i
10f20 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  dx]) );.    asse
10f30 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
10f40 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b  aMem[p2+idx]) );
10f50 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
10f60 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65  ACE(p1+idx, &aMe
10f70 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p1+idx]);.    
10f80 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10f90 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b  2+idx, &aMem[p2+
10fa0 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
10fb0 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
10fc0 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
10fd0 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
10fe0 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
10ff0 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
11000 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
11010 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
11020 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61  te3MemCompare(&a
11030 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d  Mem[p1+idx], &aM
11040 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
11050 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
11060 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
11070 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
11080 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
11090 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
110a0 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
110b0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
110c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
110d0 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
110e0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
110f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
11100 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
11110 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
11120 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
11130 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
11140 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
11150 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
11160 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
11170 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
11180 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
11190 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
111a0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
111b0 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
111d0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
111e0 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
111f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11200 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  0,3); pOp = &aOp
11210 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
11220 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
11230 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64  are==0 ){.    Vd
11240 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
11250 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
11260 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p2 - 1];.  }
11270 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
11280 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20  anchTaken(2,3); 
11290 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
112a0 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62  p3 - 1];.  }.  b
112b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
112c0 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
112d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
112e0 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
112f0 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
11300 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
11310 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
11320 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
11330 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
11340 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
11350 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
11360 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
11370 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
11380 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
11390 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
113a0 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
113b0 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
113c0 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
113d0 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
113e0 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
113f0 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
11400 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
11410 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11420 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
11430 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
11440 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
11450 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
11460 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11470 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
11480 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
11490 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
114a0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
114b0 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
114c0 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
114d0 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
114e0 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
114f0 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
11500 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
11510 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
11520 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
11530 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
11540 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
11550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11560 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
11570 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
11580 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
11590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
115a0 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
115b0 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
115c0 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
115d0 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
115e0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
115f0 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
11600 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
11610 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
11620 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
11630 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
11640 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
11650 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
11660 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
11670 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11680 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
11690 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
116a0 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
116b0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
116c0 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
116d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
116e0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
116f0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11700 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
11710 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
11720 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
11730 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
11740 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
11750 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
11760 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11770 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
11780 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
11790 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
117a0 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
117b0 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
117c0 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
117d0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
117e0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
117f0 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
11800 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
11810 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
11820 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
11830 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
11840 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
11850 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
11860 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
11870 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
11880 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
11890 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
118a0 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
118b0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
118c0 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
118d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
118e0 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
118f0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11900 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
11910 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
11920 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11930 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
11940 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
11950 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
11960 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
11970 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
11980 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11990 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
119a0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
119b0 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
119c0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
119d0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
119e0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
119f0 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
11a00 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
11a10 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11a20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11a30 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
11a40 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
11a50 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
11a60 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11a70 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
11a80 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
11a90 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
11aa0 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64  u.i = !sqlite3Vd
11ab0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11ac0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11ad0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
11ae0 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
11af0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
11b00 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  1]= ~r[P1].**.**
11b10 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
11b20 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
11b30 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
11b40 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
11b50 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
11b60 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
11b70 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
11b80 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
11b90 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
11ba0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
11bb0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
11bc0 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
11bd0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11be0 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
11bf0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
11c00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
11c10 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
11c20 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
11c30 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
11c40 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
11c50 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11c60 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
11c70 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
11c80 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
11c90 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74  ut->u.i = ~sqlit
11ca0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11cb0 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
11cc0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11cd0 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20   Once P1 P2 * * 
11ce0 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  *.**.** Check th
11cf0 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75  e "once" flag nu
11d00 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74 20 69  mber P1. If it i
11d10 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69  s set, jump to i
11d20 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a  nstruction P2. .
11d30 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65  ** Otherwise, se
11d40 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66  t the flag and f
11d50 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
11d60 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
11d70 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ion..** In other
11d80 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70 63   words, this opc
11d90 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66  ode causes all f
11da0 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
11db0 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a 2a   up through P2.*
11dc0 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75  * (but not inclu
11dd0 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e 20  ding P2) to run 
11de0 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f  just once and to
11df0 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73   be skipped on s
11e00 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d  ubsequent.** tim
11e10 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c  es through the l
11e20 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22  oop..**.** All "
11e30 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65 20  once" flags are 
11e40 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72 65  initially cleare
11e50 64 20 77 68 65 6e 65 76 65 72 20 61 20 70 72 65  d whenever a pre
11e60 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pared statement.
11e70 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73 20  ** first begins 
11e80 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20  to run..*/.case 
11e90 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20  OP_Once: {      
11ea0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
11eb0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
11ec0 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  >p1<p->nOnceFlag
11ed0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
11ee0 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c  Taken(p->aOnceFl
11ef0 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20  ag[pOp->p1]!=0, 
11f00 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e  2);.  if( p->aOn
11f10 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
11f20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
11f30 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
11f40 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  .    p->aOnceFla
11f50 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a  g[pOp->p1] = 1;.
11f60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11f70 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
11f80 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
11f90 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11fa0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11fb0 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
11fc0 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
11fd0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
11fe0 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
11ff0 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
12000 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
12010 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
12020 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
12030 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
12040 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
12050 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
12060 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
12070 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
12080 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
12090 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
120a0 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
120b0 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
120c0 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69  dered false if i
120d0 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
120e0 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
120f0 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
12100 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
12110 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
12120 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
12130 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
12140 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12160 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
12170 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
12180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12190 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
121a0 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   c;.  pIn1 = &aM
121b0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
121c0 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
121d0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
121e0 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
121f0 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
12200 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
12210 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
12220 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
12230 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23  alue(pIn1)!=0;.#
12240 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c  else.    c = sql
12250 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
12260 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65  e(pIn1)!=0.0;.#e
12270 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70  ndif.    if( pOp
12280 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e  ->opcode==OP_IfN
12290 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d  ot ) c = !c;.  }
122a0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
122b0 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
122c0 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f  f( c ){.    goto
122d0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
122e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
122f0 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
12300 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
12310 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31  nopsis:  if r[P1
12320 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]==NULL goto P2.
12330 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
12340 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
12350 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
12360 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
12370 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
12380 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12390 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
123a0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
123b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
123c0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
123d0 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
123e0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
123f0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
12400 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12410 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67  ull)!=0 ){.    g
12420 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12430 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12440 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
12450 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
12460 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
12470 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]!=NULL goto 
12480 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
12490 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
124a0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
124b0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
124c0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
124d0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
124e0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
124f0 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
12500 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
12510 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56  em[pOp->p1];.  V
12520 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
12530 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
12540 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b  EM_Null)==0, 2);
12550 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12560 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12570 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  =0 ){.    goto j
12580 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
12590 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
125a0 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
125b0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
125c0 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
125d0 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  PX.**.** Interpr
125e0 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
125f0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
12600 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
12610 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
12620 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
12630 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
12640 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
12650 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
12660 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
12670 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
12680 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
12690 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
126a0 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
126b0 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
126c0 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
126d0 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
126e0 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
126f0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
12700 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
12710 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
12720 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
12730 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
12740 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
12750 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
12760 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
12770 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
12780 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
12790 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
127a0 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
127b0 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
127c0 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
127d0 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
127e0 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
127f0 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  he OPFLAG_CLEARC
12800 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20  ACHE bit is set 
12810 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20  on P5 and P1 is 
12820 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
12830 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  ursor,.** then t
12840 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20  he cache of the 
12850 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20  cursor is reset 
12860 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74  prior to extract
12870 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a  ing the column..
12880 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f  ** The first OP_
12890 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61  Column against a
128a0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66   pseudo-table af
128b0 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ter the value of
128c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
128d0 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61  register has cha
128e0 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65  nged should have
128f0 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a   this bit set..*
12900 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
12910 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
12920 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
12930 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f  G bits are set o
12940 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65  n P5 when.** the
12950 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61   result is guara
12960 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65  nteed to only be
12970 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
12980 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74  ument of a lengt
12990 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66  h().** or typeof
129a0 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73  () function, res
129b0 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20  pectively.  The 
129c0 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65  loading of large
129d0 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a   blobs can be.**
129e0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e   skipped for len
129f0 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f  gth() and all co
12a00 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61  ntent loading ca
12a10 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72  n be skipped for
12a20 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61   typeof()..*/.ca
12a30 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a  se OP_Column: {.
12a40 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a    i64 payloadSiz
12a50 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  e64; /* Number o
12a60 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  f bytes in the r
12a70 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70  ecord */.  int p
12a80 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
12a90 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
12aa0 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
12ab0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
12ac0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
12ad0 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
12ae0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
12af0 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
12b00 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
12b10 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
12b20 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
12b30 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
12b40 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
12b50 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
12b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12b70 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
12b80 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
12b90 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
12ba0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
12bb0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
12bc0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
12bd0 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
12be0 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
12bf0 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
12c00 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
12c10 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
12c20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
12c30 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
12c40 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
12c50 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
12c60 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
12c70 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
12c80 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
12c90 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
12ca0 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
12cb0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
12cc0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
12cd0 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
12ce0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
12cf0 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
12d00 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
12d10 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
12d20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
12d30 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34  /.  u64 offset64
12d40 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  ;      /* 64-bit
12d50 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32   offset */.  u32
12d60 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20   avail;         
12d70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
12d80 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  es of available 
12d90 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b  data */.  u32 t;
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12db0 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d  A type code from
12dc0 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
12dd0 65 72 20 2a 2f 0a 20 20 75 31 36 20 66 78 3b 20  er */.  u16 fx; 
12de0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 44             /* pD
12df0 65 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c 75 65  est->flags value
12e00 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b   */.  Mem *pReg;
12e10 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75           /* Pseu
12e20 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65  doTable input re
12e30 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20  gister */..  p2 
12e40 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
12e50 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
12e60 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
12e70 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
12e80 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
12e90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
12ea0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
12eb0 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73  p, pDest);.  ass
12ec0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
12ed0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
12ee0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
12ef0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
12f00 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
12f10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
12f20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b  p2<pC->nField );
12f30 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d  .  aOffset = pC-
12f40 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65  >aOffset;.  asse
12f50 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
12f60 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
12f70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
12f80 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
12f90 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
12fa0 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73  nullRow );.  ass
12fb0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
12fc0 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45  e!=CURTYPE_SORTE
12fd0 52 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  R );.  pCrsr = p
12fe0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a  C->uc.pCursor;..
12ff0 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
13000 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c  or cache is stal
13010 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74  e, bring it up-t
13020 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d  o-date */.  rc =
13030 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
13040 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
13050 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
13060 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
13070 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ;.  if( pC->cach
13080 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
13090 65 43 74 72 20 29 7b 0a 20 20 20 20 69 66 28 20  eCtr ){.    if( 
130a0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
130b0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
130c0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
130d0 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
130e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
130f0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
13100 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67   );.        pReg
13110 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e   = &aMem[pC->uc.
13120 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
13130 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13140 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
13150 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
13160 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
13170 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
13180 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
13190 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
131a0 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
131b0 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
131c0 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
131d0 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
131e0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
131f0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13200 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
13210 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13220 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
13230 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
13240 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13250 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
13260 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
13270 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
13280 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
13290 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  le==0 ){.       
132a0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
132b0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
132c0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
132d0 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
132e0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
132f0 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26  KeySize(pCrsr, &
13300 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a  payloadSize64);.
13310 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
13320 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
13330 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
13340 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
13350 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
13360 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
13370 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c  te3BtreeParseCel
13380 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56  lPtr() uses getV
13390 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74  arint32() to ext
133a0 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20  ract the.       
133b0 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65   ** payload size
133c0 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73  , so it is impos
133d0 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61  sible for payloa
133e0 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20  dSize64 to be.  
133f0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
13400 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
13410 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13420 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20   (payloadSize64 
13430 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  & SQLITE_MAX_U32
13440 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53  )==(u64)payloadS
13450 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20  ize64 );.       
13460 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
13470 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
13480 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
13490 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
134a0 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
134b0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
134c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
134d0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
134e0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
134f0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
13500 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
13510 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
13520 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
13530 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53  r, &pC->payloadS
13540 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ize);.        as
13550 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
13560 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61  _OK );   /* Data
13570 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
13580 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43  il */.        pC
13590 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33  ->aRow = sqlite3
135a0 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
135b0 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
135c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
135d0 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33  ert( avail<=6553
135e0 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d  6 );  /* Maximum
135f0 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34   page size is 64
13600 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  KiB */.      if(
13610 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13620 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29   <= (u32)avail )
13630 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a  {.        pC->sz
13640 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  Row = pC->payloa
13650 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c  dSize;.      }el
13660 73 65 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f  se if( pC->paylo
13670 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
13680 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
13690 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
136a0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  .        goto to
136b0 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 65 6c  o_big;.      }el
136c0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  se{.        pC->
136d0 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20  szRow = avail;. 
136e0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
136f0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
13700 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
13710 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
13720 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  et = getVarint32
13730 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65  (pC->aRow, offse
13740 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72  t);.    pC->nHdr
13750 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20  Parsed = 0;.    
13760 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66  aOffset[0] = off
13770 73 65 74 3b 0a 0a 0a 20 20 20 20 69 66 28 20 61  set;...    if( a
13780 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20  vail<offset ){. 
13790 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
137a0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
137b0 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
137c0 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
137d0 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
137e0 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
137f0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
13800 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
13810 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
13820 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
13830 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
13840 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
13850 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
13860 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
13870 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
13880 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
13890 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
138a0 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
138b0 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
138c0 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  0;..      /* Mak
138d0 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74  e sure a corrupt
138e0 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
138f0 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76  t given us an ov
13900 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20  ersize header.. 
13910 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20       ** Do this 
13920 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20  now to avoid an 
13930 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20  oversize memory 
13940 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20  allocation..    
13950 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79    **.      ** Ty
13960 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
13970 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
13980 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
13990 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
139a0 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75        ** types u
139b0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
139c0 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
139d0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
139e0 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
139f0 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
13a00 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
13a10 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
13a20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
13a30 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33  rom a.      ** 3
13a40 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
13a50 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
13a60 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
13a70 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
13a80 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79       ** extra by
13a90 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64  tes for the head
13aa0 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66  er length itself
13ab0 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d  .  32768*3 + 3 =
13ac0 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f   98307..      */
13ad0 0a 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65  .      if( offse
13ae0 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66 66  t > 98307 || off
13af0 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  set > pC->payloa
13b00 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 20  dSize ){.       
13b10 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
13b20 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
13b30 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13b40 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  n_error;.      }
13b50 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54  .    }..    /* T
13b60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74  he following got
13b70 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  o is an optimiza
13b80 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65  tion.  It can be
13b90 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20   omitted and.   
13ba0 20 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77   ** everything w
13bb0 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20  ill still work. 
13bc0 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69   But OP_Column i
13bd0 73 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73  s measurably fas
13be0 74 65 72 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b  ter.    ** by sk
13bf0 69 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65  ipping the subse
13c00 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61  quent conditiona
13c10 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61  l, which is alwa
13c20 79 73 20 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a  ys true..    */.
13c30 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
13c40 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
13c50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
13c60 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64  ditional skipped
13c70 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f   */.    goto op_
13c80 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
13c90 65 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  er;.  }..  /* Ma
13ca0 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
13cb0 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
13cc0 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
13cd0 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
13ce0 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
13cf0 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
13d00 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
13d10 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  ] and pC->aType[
13d20 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43  ]..  */.  if( pC
13d30 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
13d40 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
13d50 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64  ere is more head
13d60 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  er available for
13d70 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20   parsing in the 
13d80 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20  record, try.    
13d90 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64  ** to extract ad
13da0 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
13db0 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  up through the p
13dc0 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20  2+1-th field .  
13dd0 20 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75    */.    op_colu
13de0 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
13df0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
13e00 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
13e10 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
13e20 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
13e30 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
13e40 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
13e50 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
13e60 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
13e70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
13e80 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
13e90 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
13ea0 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
13eb0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
13ec0 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
13ed0 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
13ee0 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
13ef0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
13f00 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
13f10 20 29 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d   ) goto op_colum
13f20 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  n_error;.       
13f30 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d   zData = (u8*)sM
13f40 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  em.z;.      }els
13f50 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
13f60 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20   = pC->aRow;.   
13f70 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
13f80 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79   Fill in pC->aTy
13f90 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65  pe[i] and aOffse
13fa0 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f  t[i] values thro
13fb0 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69  ugh the p2-th fi
13fc0 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20  eld. */.      i 
13fd0 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  = pC->nHdrParsed
13fe0 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 36 34  ;.      offset64
13ff0 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20   = aOffset[i];. 
14000 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74       zHdr = zDat
14010 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  a + pC->iHdrOffs
14020 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64  et;.      zEndHd
14030 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66  r = zData + aOff
14040 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73  set[0];.      as
14050 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a  sert( i<=p2 && z
14060 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20  Hdr<zEndHdr );. 
14070 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
14080 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30   if( (t = zHdr[0
14090 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20  ])<0x80 ){.     
140a0 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20       zHdr++;.   
140b0 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
140c0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e  += sqlite3VdbeOn
140d0 65 42 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c  eByteSerialTypeL
140e0 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
140f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
14100 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47  zHdr += sqlite3G
14110 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c  etVarint32(zHdr,
14120 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &t);.          
14130 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69  offset64 += sqli
14140 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14150 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
14160 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61   }.        pC->a
14170 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20  Type[i++] = t;. 
14180 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
14190 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74  ] = (u32)(offset
141a0 36 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29  64 & 0xffffffff)
141b0 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  ;.      }while( 
141c0 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45  i<=p2 && zHdr<zE
141d0 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70  ndHdr );.      p
141e0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20  C->nHdrParsed = 
141f0 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64  i;.      pC->iHd
14200 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28  rOffset = (u32)(
14210 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20  zHdr - zData);. 
14220 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
14230 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64  w==0 ) sqlite3Vd
14240 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
14250 65 6d 29 3b 0a 20 20 0a 20 20 20 20 20 20 2f 2a  em);.  .      /*
14260 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
14270 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
14280 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
14290 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
142a0 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
142b0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
142c0 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
142d0 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
142e0 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
142f0 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
14300 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
14310 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
14320 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
14330 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
14340 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
14350 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
14360 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
14370 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
14380 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
14390 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
143a0 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
143b0 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
143c0 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
143d0 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
143e0 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
143f0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
14400 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
14410 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
14420 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
14430 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
14440 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  .      VVA_ONLY(
14450 20 74 20 3d 20 30 3b 20 29 20 2f 2a 20 4f 6e 6c   t = 0; ) /* Onl
14460 79 20 6e 65 65 64 65 64 20 62 79 20 61 73 73 65  y needed by asse
14470 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
14480 2a 2f 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  */.    }..    /*
14490 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
144a0 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
144b0 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
144c0 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
144d0 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
144e0 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
144f0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
14500 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
14510 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
14520 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
14530 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
14540 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
14550 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
14560 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
14570 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
14580 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14590 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
145a0 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
145b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
145c0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
145d0 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
145e0 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
145f0 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
14600 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14610 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14620 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
14630 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14640 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
14650 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d 20   }else{.    t = 
14660 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20  pC->aType[p2];. 
14670 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
14680 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
14690 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
146a0 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
146b0 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
146c0 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
146d0 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
146e0 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
146f0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
14700 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
14710 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
14720 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
14730 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
14740 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
14750 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
14760 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
14770 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
14780 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
14790 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
147a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
147b0 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
147c0 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e   assert( t==pC->
147d0 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69  aType[p2] );.  i
147e0 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
147f0 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
14800 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
14810 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
14820 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
14830 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
14840 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
14850 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
14860 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
14870 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
14880 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 73  ow page */.    s
14890 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
148a0 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66  Get(pC->aRow+aOf
148b0 66 73 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44 65  fset[p2], t, pDe
148c0 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  st);.  }else{.  
148d0 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
148e0 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
148f0 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
14900 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
14910 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  */.    if( ((pOp
14920 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
14930 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
14940 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
14950 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
14960 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
14970 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
14980 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
14990 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
149a0 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
149b0 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
149c0 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
149d0 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
149e0 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20  irrelevant for. 
149f0 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68       **    1. th
14a00 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
14a10 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20  ion,.      **   
14a20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58   2. the length(X
14a30 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
14a40 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20  is a blob, and. 
14a50 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66       **    3. if
14a60 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
14a70 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20  gth is zero..   
14a80 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68     ** So we migh
14a90 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f  t as well use bo
14aa0 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68  gus content rath
14ab0 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a  er than reading.
14ac0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
14ad0 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
14ae0 4c 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  L will work for 
14af0 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74  the value for st
14b00 72 69 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61  rings.      ** a
14b10 6e 64 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61  nd blobs and wha
14b20 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20  tever is in the 
14b30 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61  payloadSize64 va
14b40 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20  riable.      ** 
14b50 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
14b60 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a  erything else. *
14b70 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
14b80 64 62 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d  dbeSerialGet(t<=
14b90 31 33 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f  13 ? (u8*)&paylo
14ba0 61 64 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c  adSize64 : 0, t,
14bb0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
14bc0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
14bd0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
14be0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
14bf0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
14c00 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20  !pC->isTable,.  
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c30 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
14c40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14c50 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
14c60 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
14c70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
14c80 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14c90 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29  lGet((const u8*)
14ca0 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65  pDest->z, t, pDe
14cb0 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  st);.      pDest
14cc0 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
14cd0 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d  Ephem;.    }.  }
14ce0 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20  .  pDest->enc = 
14cf0 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f  encoding;..op_co
14d00 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49  lumn_out:.  /* I
14d10 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  f the column val
14d20 75 65 20 69 73 20 61 6e 20 65 70 68 65 6d 65 72  ue is an ephemer
14d30 61 6c 20 73 74 72 69 6e 67 2c 20 67 6f 20 61 68  al string, go ah
14d40 65 61 64 20 61 6e 64 20 70 65 72 73 69 73 74 0a  ead and persist.
14d50 20 20 2a 2a 20 74 68 61 74 20 73 74 72 69 6e 67    ** that string
14d60 20 69 6e 20 63 61 73 65 20 74 68 65 20 63 75 72   in case the cur
14d70 73 6f 72 20 6d 6f 76 65 73 20 62 65 66 6f 72 65  sor moves before
14d80 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
14d90 65 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e 20  e is.  ** used. 
14da0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
14db0 6f 64 65 20 64 6f 65 73 20 74 68 65 20 65 71 75  ode does the equ
14dc0 69 76 61 6c 65 6e 74 20 6f 66 20 44 65 65 70 68  ivalent of Deeph
14dd0 65 6d 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a 2a  emeralize().  **
14de0 20 62 75 74 20 64 6f 65 73 20 69 74 20 66 61 73   but does it fas
14df0 74 65 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28 70  ter. */.  if( (p
14e00 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
14e10 4d 5f 45 70 68 65 6d 29 21 3d 30 20 26 26 20 70  M_Ephem)!=0 && p
14e20 44 65 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 66  Dest->z ){.    f
14e30 78 20 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  x = pDest->flags
14e40 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
14e50 42 6c 6f 62 29 3b 0a 20 20 20 20 61 73 73 65 72  Blob);.    asser
14e60 74 28 20 66 78 21 3d 30 20 29 3b 0a 20 20 20 20  t( fx!=0 );.    
14e70 7a 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 75  zData = (const u
14e80 38 2a 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20 20  8*)pDest->z;.   
14e90 20 6c 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e 3b   len = pDest->n;
14ea0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
14eb0 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
14ec0 65 73 69 7a 65 28 70 44 65 73 74 2c 20 6c 65 6e  esize(pDest, len
14ed0 2b 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  +2) ) goto no_me
14ee0 6d 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 44  m;.    memcpy(pD
14ef0 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c  est->z, zData, l
14f00 65 6e 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  en);.    pDest->
14f10 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
14f20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
14f30 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  = 0;.    pDest->
14f40 66 6c 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f 54  flags = fx|MEM_T
14f50 65 72 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75  erm;.  }.op_colu
14f60 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41  mn_error:.  UPDA
14f70 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
14f80 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
14f90 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
14fa0 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
14fb0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14fc0 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
14fd0 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
14fe0 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
14ff0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70  1@P2]).**.** App
15000 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
15010 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
15020 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
15030 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
15040 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
15050 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
15060 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
15070 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
15080 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
15090 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
150a0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
150b0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
150c0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
150d0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
150e0 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
150f0 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
15100 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
15110 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54  Affinity;   /* T
15120 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62  he affinity to b
15130 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63  e applied */.  c
15140 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20  har cAff;       
15150 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e          /* A sin
15160 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66  gle character of
15170 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20   affinity */..  
15180 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
15190 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
151a0 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b   zAffinity!=0 );
151b0 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
151c0 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
151d0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
151e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
151f0 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28  hile( (cAff = *(
15200 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30  zAffinity++))!=0
15210 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
15220 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d  pIn1 <= &p->aMem
15230 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
15240 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
15250 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
15260 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70  (pIn1) );.    ap
15270 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
15280 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67  , cAff, encoding
15290 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
152a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
152b0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
152c0 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
152d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
152e0 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
152f0 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
15300 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
15310 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
15320 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
15330 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
15340 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
15350 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
15360 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
15370 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
15380 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
15390 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
153a0 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
153b0 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
153c0 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
153d0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
153e0 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
153f0 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
15400 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
15410 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
15420 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
15430 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
15440 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
15450 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
15460 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
15470 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
15480 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
15490 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
154a0 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
154b0 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
154c0 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
154d0 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
154e0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
154f0 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
15500 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
15510 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  BLOB..*/.case OP
15520 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
15530 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
15540 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
15550 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
15560 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
15570 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
15580 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
15590 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
155a0 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
155b0 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
155c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
155d0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
155e0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
155f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15600 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
15610 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
15620 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
15630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15640 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
15650 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
15660 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a  cord */.  i64 nZ
15670 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
15680 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
15690 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
156a0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
156b0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
156c0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
156d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
156e0 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
156f0 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
15700 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
15710 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
15720 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
15730 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
15740 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
15750 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
15760 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
15770 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15780 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
15790 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
157a0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
157b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
157c0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
157d0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
157e0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
157f0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
15800 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
15810 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
15820 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
15830 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
15840 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
15850 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
15860 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
15870 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
15880 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
15890 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e  ] header */.  in
158a0 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
158b0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
158c0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
158d0 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  [] content */.  
158e0 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  u32 len;        
158f0 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
15900 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a   of a field */..
15910 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
15920 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
15930 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
15940 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
15950 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
15960 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
15970 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15980 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15990 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
159a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
159b0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
159c0 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
159d0 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
159e0 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
159f0 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
15a00 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
15a10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a50 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
15a60 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
15a70 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
15a80 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
15a90 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
15aa0 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
15ab0 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  orth..  **.  ** 
15ac0 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
15ad0 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
15ae0 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
15af0 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
15b00 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
15b10 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
15b20 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
15b30 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
15b40 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
15b50 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
15b60 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
15b70 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
15b80 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
15b90 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
15ba0 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
15bb0 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
15bc0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15bd0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
15be0 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
15bf0 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
15c00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
15c10 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
15c20 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
15c30 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
15c40 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
15c50 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
15c60 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15c70 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
15c80 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
15c90 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
15ca0 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
15cb0 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
15cc0 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28  Op->p2+nField<=(
15cd0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15ce0 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  or)+1 );.  pData
15cf0 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
15d00 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
15d10 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
15d20 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
15d30 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
15d40 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
15d50 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
15d60 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
15d70 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
15d80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15d90 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
15da0 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
15db0 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
15dc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
15dd0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
15de0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
15df0 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20  .  /* Apply the 
15e00 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69  requested affini
15e10 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73  ty to all inputs
15e20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
15e30 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
15e40 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79  .  if( zAffinity
15e50 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70   ){.    pRec = p
15e60 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  Data0;.    do{. 
15e70 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
15e80 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66  ty(pRec++, *(zAf
15e90 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64  finity++), encod
15ea0 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ing);.      asse
15eb0 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  rt( zAffinity[0]
15ec0 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61  ==0 || pRec<=pLa
15ed0 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65  st );.    }while
15ee0 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
15ef0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  ;.  }..  /* Loop
15f00 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
15f10 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
15f20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
15f30 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
15f40 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
15f50 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
15f60 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
15f70 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63  ord..  */.  pRec
15f80 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a   = pLast;.  do{.
15f90 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
15fa0 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
15fb0 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
15fc0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20  = serial_type = 
15fd0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15fe0 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
15ff0 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a  _format, &len);.
16000 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
16010 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
16020 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74  {.      if( nDat
16030 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  a ){.        if(
16040 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
16050 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20  xpandBlob(pRec) 
16060 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
16070 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16080 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
16090 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
160a0 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
160b0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
160c0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
160d0 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
160e0 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
160f0 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
16100 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
16110 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
16120 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
16130 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
16140 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
16150 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
16160 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65    }while( (--pRe
16170 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20  c)>=pData0 );.. 
16180 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
16190 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
161a0 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
161b0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
161c0 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
161d0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
161e0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
161f0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
16200 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
16210 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
16220 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
16230 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
16240 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
16250 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
16260 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
16270 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
16280 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
16290 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
162a0 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
162b0 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
162c0 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
162d0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
162e0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
162f0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
16300 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
16310 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
16320 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
16330 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
16340 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
16350 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
16360 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
16370 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
16380 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
16390 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
163a0 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
163b0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
163c0 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
163d0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
163e0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
163f0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
16400 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
16410 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
16420 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
16430 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
16440 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
16450 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
16460 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
16470 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
16480 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
16490 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
164a0 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
164b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
164c0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
164d0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
164e0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
164f0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
16500 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
16510 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
16520 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
16530 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
16540 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
16550 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
16560 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
16570 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
16580 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
16590 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
165a0 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
165b0 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
165c0 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
165d0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
165e0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
165f0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
16600 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
16610 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
16620 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
16630 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
16640 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
16650 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
16660 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
16670 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
16680 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
16690 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
166a0 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
166b0 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
166c0 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
166d0 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
166e0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
166f0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
16700 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
16710 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
16720 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
16730 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
16740 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
16750 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
16760 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
16770 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
16780 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
16790 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
167a0 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
167b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
167c0 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
167d0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
167e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
167f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
16800 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
16810 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
16820 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
16830 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
16840 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
16850 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
16860 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
16870 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
16880 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
16890 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
168a0 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
168b0 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
168c0 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
168d0 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
168e0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
168f0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
16900 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
16910 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
16920 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16930 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
16940 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
16950 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74  sis: r[P2]=count
16960 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  ().**.** Store t
16970 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
16980 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
16990 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
169a0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
169b0 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
169c0 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
169d0 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
169e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
169f0 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
16a00 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
16a10 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
16a20 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
16a30 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61  sor *pCrsr;..  a
16a40 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
16a50 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79  pOp->p1]->eCurTy
16a60 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
16a70 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
16a80 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
16a90 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
16aa0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
16ab0 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20  .  nEntry = 0;  
16ac0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
16ad0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
16ae0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
16af0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
16b00 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73  3BtreeCount(pCrs
16b10 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70  r, &nEntry);.  p
16b20 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
16b30 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
16b40 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74  pOut->u.i = nEnt
16b50 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  ry;.  break;.}.#
16b60 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
16b70 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a  : Savepoint P1 *
16b80 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
16b90 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72  en, release or r
16ba0 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65  ollback the save
16bb0 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70  point named by p
16bc0 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70  arameter P4, dep
16bd0 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65  ending.** on the
16be0 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f   value of P1. To
16bf0 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65   open a new save
16c00 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f  point, P1==0. To
16c10 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
16c20 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67  ) an.** existing
16c30 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
16c40 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63  1, or to rollbac
16c50 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61  k an existing sa
16c60 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a  vepoint P1==2..*
16c70 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f  /.case OP_Savepo
16c80 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  int: {.  int p1;
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
16cb0 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20  e of P1 operand 
16cc0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
16cd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16ce0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
16cf0 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69  savepoint */.  i
16d00 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65  nt nName;.  Save
16d10 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53  point *pNew;.  S
16d20 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
16d30 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e  oint;.  Savepoin
16d40 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69  t *pTmp;.  int i
16d50 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74  Savepoint;.  int
16d60 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70   ii;..  p1 = pOp
16d70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20  ->p1;.  zName = 
16d80 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a  pOp->p4.z;..  /*
16d90 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
16da0 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   p1 parameter is
16db0 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61   valid. Also tha
16dc0 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  t if there is no
16dd0 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73   open.  ** trans
16de0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  action, then the
16df0 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79  re cannot be any
16e00 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20   savepoints. .  
16e10 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
16e20 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c  >pSavepoint==0 |
16e30 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  | db->autoCommit
16e40 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
16e50 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
16e60 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EGIN||p1==SAVEPO
16e70 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d  INT_RELEASE||p1=
16e80 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16e90 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ACK );.  assert(
16ea0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
16eb0 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
16ec0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
16ed0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68   );.  assert( ch
16ee0 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
16ef0 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72  t(db) );.  asser
16f00 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
16f10 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
16f20 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
16f30 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64  .    if( db->nVd
16f40 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
16f50 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
16f60 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
16f70 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
16f80 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
16f90 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
16fa0 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
16fb0 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
16fc0 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
16fd0 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
16fe0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
16ff0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
17000 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
17010 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  t - SQL statemen
17020 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17030 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
17040 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
17050 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
17060 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
17070 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e  30(zName);..#ifn
17080 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
17090 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20  VIRTUALTABLE.   
170a0 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20     /* This call 
170b0 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68  is Ok even if th
170c0 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  is savepoint is 
170d0 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73  actually a trans
170e0 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20  action.      ** 
170f0 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74  savepoint (and t
17100 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20  herefore should 
17110 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65  not prompt xSave
17120 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63  point()) callbac
17130 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20  ks..      ** If 
17140 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
17150 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20  ction savepoint 
17160 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74  being opened, it
17170 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20   is guaranteed. 
17180 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65       ** that the
17190 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61   db->aVTrans[] a
171a0 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20  rray is empty.  
171b0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
171c0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
171d0 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e  =0 || db->nVTran
171e0 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63  s==0 );.      rc
171f0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
17200 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
17210 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20  POINT_BEGIN,.   
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
17240 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e  >nStatement+db->
17250 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  nSavepoint);.   
17260 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17270 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17280 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17290 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a  #endif..      /*
172a0 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61   Create a new sa
172b0 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72  vepoint structur
172c0 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77  e. */.      pNew
172d0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
172e0 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
172f0 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
17300 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
17310 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
17320 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
17330 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
17340 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
17350 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
17360 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
17370 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
17380 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
17390 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
173a0 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
173b0 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
173c0 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
173d0 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
173e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
173f0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
17400 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
17410 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
17420 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
17430 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
17440 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
17450 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
17460 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
17470 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17480 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
17490 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
174a0 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
174b0 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
174c0 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
174d0 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
174e0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
174f0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
17500 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
17510 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
17520 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
17530 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
17540 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
17550 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
17560 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
17570 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
17580 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
17590 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
175a0 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
175b0 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
175c0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
175d0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
175e0 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
175f0 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
17600 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
17610 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
17620 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
17630 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
17640 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
17650 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
17660 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
17670 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
17680 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
17690 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
176a0 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
176b0 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
176c0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
176d0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
176e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
176f0 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20  ror(p, "no such 
17700 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
17710 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
17720 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17730 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
17740 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
17750 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
17760 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
17770 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
17780 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
17790 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
177a0 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
177b0 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
177c0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
177d0 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f  ements..      */
177e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
177f0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
17800 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70  ot release savep
17810 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20  oint - ".       
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17840 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17850 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
17860 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
17870 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
17880 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
17890 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
178a0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
178b0 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
178c0 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
178d0 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
178e0 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
178f0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
17900 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
17910 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
17920 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
17930 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
17940 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
17950 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
17960 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
17970 69 6e 74 3b 0a 20 20 20 20 20 20 61 73 73 65 72  int;.      asser
17980 74 28 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65  t( db->bConcurre
17990 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 69 73 54  nt==0 || db->isT
179a0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
179b0 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  int==0 );.      
179c0 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
179d0 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
179e0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
179f0 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
17a00 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
17a10 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
17a20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
17a30 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17a40 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
17a50 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
17a60 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
17a70 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
17a80 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
17a90 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
17aa0 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
17ab0 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
17ac0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
17ad0 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
17ae0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17af0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17b00 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
17b10 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
17b20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
17b30 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
17b40 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
17b50 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
17b60 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
17b70 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65        int isSche
17b80 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
17b90 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
17ba0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
17bb0 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
17bc0 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
17bd0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17be0 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
17bf0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
17c00 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
17c10 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
17c20 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20  es)!=0;.        
17c30 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
17c40 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
17c50 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
17c60 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70  sqlite3BtreeTrip
17c70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61  AllCursors(db->a
17c80 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20  Db[ii].pBt,.    
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f     SQLITE_ABORT_
17cc0 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20  ROLLBACK,.      
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d   isSchemaChange=
17d00 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  =0);.           
17d10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17d20 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
17d30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17d40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17d50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
17d60 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
17d70 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
17d80 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
17d90 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
17da0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
17db0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17dc0 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
17dd0 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
17de0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
17df0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
17e00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17e10 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
17e20 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17e30 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
17e40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
17e50 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  f( isSchemaChang
17e60 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
17e70 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
17e80 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
17e90 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
17ea0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
17eb0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
17ec0 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17ed0 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
17ee0 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
17ef0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
17f00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17f10 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
17f20 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
17f30 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
17f40 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
17f50 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
17f60 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
17f70 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
17f80 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
17f90 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
17fa0 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
17fb0 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
17fc0 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
17fd0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
17fe0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
17ff0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
18000 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
18010 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
18020 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
18030 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
18040 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
18050 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
18060 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
18070 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
18080 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
18090 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
180a0 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
180b0 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
180c0 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
180d0 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
180e0 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
180f0 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
18100 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
18110 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
18120 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
18130 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
18140 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
18150 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
18160 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
18170 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
18180 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
18190 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
181a0 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
181b0 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
181c0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
181d0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
181e0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
181f0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
18200 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
18210 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
18220 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
18230 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
18240 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
18250 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
18260 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
18270 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
18280 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
18290 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
182a0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
182b0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
182c0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
182d0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
182e0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
182f0 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49  n || p1==SAVEPOI
18300 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
18310 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
18320 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
18330 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
18340 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
18350 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18360 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18370 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
18380 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
18390 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
183a0 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
183b0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
183c0 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
183d0 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
183e0 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
183f0 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
18400 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
18410 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
18420 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
18430 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
18440 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
18450 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
18460 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
18470 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
18480 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
18490 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
184a0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
184b0 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
184c0 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
184d0 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
184e0 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f  *.** If P3 is no
184f0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 69  n-zero, then thi
18500 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
18510 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20   being executed 
18520 61 73 20 70 61 72 74 20 6f 66 0a 2a 2a 20 61 20  as part of.** a 
18530 22 42 45 47 49 4e 20 43 4f 4e 43 55 52 52 45 4e  "BEGIN CONCURREN
18540 54 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a 2a  T" command..**.*
18550 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
18560 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
18570 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
18580 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
18590 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
185a0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
185b0 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69  t iRollback;.  i
185c0 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 20 20 69  nt turnOnAC;.  i
185d0 6e 74 20 62 43 6f 6e 63 75 72 72 65 6e 74 3b 0a  nt bConcurrent;.
185e0 20 20 69 6e 74 20 68 72 63 3b 0a 0a 20 20 64 65    int hrc;..  de
185f0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
18600 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f  = pOp->p1;.  iRo
18610 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32  llback = pOp->p2
18620 3b 0a 20 20 62 43 6f 6e 63 75 72 72 65 6e 74 20  ;.  bConcurrent 
18630 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 74 75 72  = pOp->p3;.  tur
18640 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41  nOnAC = desiredA
18650 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62  utoCommit && !db
18660 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  ->autoCommit;.  
18670 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
18680 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
18690 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
186a0 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
186b0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
186c0 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62  mit==1 || iRollb
186d0 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ack==0 );.  asse
186e0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
186f0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 62 43 6f 6e  ommit==0 || bCon
18700 63 75 72 72 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  current==0 );.  
18710 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
18720 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
18730 3e 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20  >bConcurrent==0 
18740 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18750 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
18760 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
18770 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
18780 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
18790 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
187a0 3b 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41  ;..  if( turnOnA
187b0 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20  C && !iRollback 
187c0 0a 20 20 20 26 26 20 28 64 62 2d 3e 6e 56 64 62  .   && (db->nVdb
187d0 65 57 72 69 74 65 3e 30 20 7c 7c 20 28 64 62 2d  eWrite>0 || (db-
187e0 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20 26 26 20  >bConcurrent && 
187f0 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
18800 31 29 29 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  1)).  ){.    /* 
18810 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  A transaction ma
18820 79 20 6f 6e 6c 79 20 62 65 20 63 6f 6d 6d 69 74  y only be commit
18830 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
18840 20 6e 6f 20 6f 74 68 65 72 20 61 63 74 69 76 65   no other active
18850 0a 20 20 20 20 2a 2a 20 77 72 69 74 65 72 20 56  .    ** writer V
18860 4d 73 2e 20 49 66 20 74 68 65 20 74 72 61 6e 73  Ms. If the trans
18870 61 63 74 69 6f 6e 20 69 73 20 43 4f 4e 43 55 52  action is CONCUR
18880 52 45 4e 54 2c 20 74 68 65 6e 20 69 74 20 6d 61  RENT, then it ma
18890 79 20 6f 6e 6c 79 20 62 65 0a 20 20 20 20 2a 2a  y only be.    **
188a0 20 63 6f 6d 6d 69 74 74 65 64 20 69 66 20 74 68   committed if th
188b0 65 72 65 20 61 72 65 20 6e 6f 20 61 63 74 69 76  ere are no activ
188c0 65 20 56 4d 73 20 61 74 20 61 6c 6c 20 28 72 65  e VMs at all (re
188d0 61 64 65 72 73 20 6f 72 20 77 72 69 74 65 72 73  aders or writers
188e0 29 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  )..    **.    **
188f0 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
18900 74 69 6f 6e 20 69 73 20 61 20 43 4f 4d 4d 49 54  tion is a COMMIT
18910 20 61 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63   and the transac
18920 74 69 6f 6e 20 6d 61 79 20 6e 6f 74 20 62 65 0a  tion may not be.
18930 20 20 20 20 2a 2a 20 63 6f 6d 6d 69 74 74 65 64      ** committed
18940 20 64 75 65 20 74 6f 20 6f 6e 65 20 6f 66 20 74   due to one of t
18950 68 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 62  he conditions ab
18960 6f 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ove, return an e
18970 72 72 6f 72 0a 20 20 20 20 2a 2a 20 69 6e 64 69  rror.    ** indi
18980 63 61 74 69 6e 67 20 74 68 61 74 20 6f 74 68 65  cating that othe
18990 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
189a0 65 74 65 20 62 65 66 6f 72 65 20 74 68 65 20 43  ete before the C
189b0 4f 4d 4d 49 54 20 63 61 6e 20 0a 20 20 20 20 2a  OMMIT can .    *
189c0 2a 20 62 65 20 70 72 6f 63 65 73 73 65 64 2e 20  * be processed. 
189d0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
189e0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
189f0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
18a00 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
18a30 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
18a40 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
18a50 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
18a60 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
18a70 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
18a80 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
18a90 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
18aa0 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
18ab0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
18ac0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
18ad0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
18ae0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
18af0 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
18b00 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
18b10 31 3b 0a 20 20 20 20 20 20 64 62 2d 3e 62 43 6f  1;.      db->bCo
18b20 6e 63 75 72 72 65 6e 74 20 3d 20 30 3b 0a 20 20  ncurrent = 0;.  
18b30 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
18b40 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
18b50 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
18b60 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
18b70 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
18b80 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
18b90 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
18ba0 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
18bb0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d  utoCommit;.    }
18bc0 0a 20 20 20 20 68 72 63 20 3d 20 73 71 6c 69 74  .    hrc = sqlit
18bd0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
18be0 20 20 20 69 66 28 20 28 68 72 63 20 26 20 30 78     if( (hrc & 0x
18bf0 46 46 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  FF)==SQLITE_BUSY
18c00 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
18c10 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
18c20 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  p);.      db->au
18c30 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
18c40 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
18c50 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72  mit);.      p->r
18c60 63 20 3d 20 68 72 63 3b 0a 20 20 20 20 20 20 72  c = hrc;.      r
18c70 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
18c80 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
18c90 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
18ca0 20 20 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65     db->bConcurre
18cb0 6e 74 20 3d 20 28 75 38 29 62 43 6f 6e 63 75 72  nt = (u8)bConcur
18cc0 72 65 6e 74 3b 0a 20 20 20 20 61 73 73 65 72 74  rent;.    assert
18cd0 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
18ce0 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
18cf0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
18d00 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
18d10 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
18d20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
18d30 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
18d40 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
18d50 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18d60 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
18d70 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
18d80 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
18d90 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
18da0 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
18db0 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
18dc0 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
18dd0 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
18de0 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
18df0 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
18e00 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
18e10 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
18e20 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
18e50 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
18e60 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
18e70 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
18e80 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
18e90 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
18ea0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
18eb0 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
18ec0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
18ed0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
18ee0 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
18ef0 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
18f00 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
18f10 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
18f20 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
18f30 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
18f40 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
18f50 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
18f60 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
18f70 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
18f80 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
18f90 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
18fa0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
18fb0 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
18fc0 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
18fd0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
18fe0 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
18ff0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
19000 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
19010 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
19020 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
19030 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
19040 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
19050 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
19060 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
19070 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
19080 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
19090 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
190a0 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
190b0 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
190c0 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
190d0 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
190e0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
190f0 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
19100 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
19110 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
19120 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
19130 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
19140 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
19150 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
19160 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
19170 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
19180 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19190 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
191a0 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
191b0 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
191c0 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
191d0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
191e0 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
191f0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
19200 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
19210 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
19220 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
19230 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
19240 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
19250 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
19260 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
19270 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
19280 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
19290 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
192a0 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
192b0 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
192c0 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
192d0 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
192e0 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
192f0 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
19300 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
19310 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19320 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
19330 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
19340 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
19350 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
19360 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
19370 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
19380 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
19390 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
193a0 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
193b0 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
193c0 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
193d0 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
193e0 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
193f0 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
19400 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
19410 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
19420 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
19430 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
19440 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
19450 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
19460 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
19470 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
19480 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
19490 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
194a0 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
194b0 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
194c0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
194d0 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
194e0 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
194f0 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
19500 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
19510 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
19520 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
19530 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
19540 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
19550 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
19560 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
19570 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
19580 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
19590 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
195a0 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
195b0 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
195c0 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
195d0 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
195e0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
195f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
19600 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
19610 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
19620 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
19630 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
19640 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
19650 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
19660 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  y==0 || pOp->p2=
19670 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19680 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
19690 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
196a0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
196b0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
196c0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
196d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
196e0 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
196f0 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
19700 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
19710 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
19720 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19730 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
19740 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
19750 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
19760 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
19770 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19780 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
19790 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
197a0 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
197b0 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
197c0 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  OT );.    testca
197d0 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
197e0 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a  USY_RECOVERY );.
197f0 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
19800 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
19810 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
19820 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
19830 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
19840 72 63 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  rc;.      goto v
19850 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
19860 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
19870 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19880 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19890 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
198a0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
198b0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
198c0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
198d0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
198e0 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
198f0 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
19900 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
19910 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
19920 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
19930 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
19940 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
19950 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
19960 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
19970 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
19980 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
19990 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
199a0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
199b0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
199c0 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
199d0 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
199e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
199f0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
19a00 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
19a10 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
19a20 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
19a30 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
19a40 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
19a50 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
19a60 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
19a70 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
19a80 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
19a90 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
19aa0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
19ab0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
19ac0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
19ad0 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
19ae0 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
19af0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
19b00 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
19b10 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
19b20 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
19b30 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
19b40 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
19b50 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
19b60 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
19b70 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
19b80 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
19b90 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
19ba0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
19bb0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
19bc0 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
19bd0 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
19be0 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
19bf0 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
19c00 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32  NTATION-OF: R-32
19c10 31 39 35 2d 31 39 34 36 35 20 54 68 65 20 73 63  195-19465 The sc
19c20 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
19c30 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20  used by SQLite. 
19c40 20 20 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20     ** each time 
19c50 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
19c60 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
19c70 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
19c80 63 61 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20  cache of the.   
19c90 20 2a 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20   ** schema used 
19ca0 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
19cb0 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
19cc0 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
19cd0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61  of the.    ** da
19ce0 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
19cf0 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
19d00 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
19d10 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
19d20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
19d30 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
19d40 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
19d50 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
19d60 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
19d70 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
19d80 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
19d90 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
19da0 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
19db0 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61  eta = 0;.  }.  a
19dc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
19dd0 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
19de0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
19df0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28  if( pOp->p5 && (
19e00 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c  iMeta!=pOp->p3 |
19e10 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e  | iGen!=pOp->p4.
19e20 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i) ){.    sqlite
19e30 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
19e40 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
19e50 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
19e60 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
19e70 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
19e80 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
19e90 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
19ea0 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
19eb0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19ec0 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
19ed0 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
19ee0 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
19ef0 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
19f00 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
19f10 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
19f20 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
19f30 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
19f40 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
19f50 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
19f60 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
19f70 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
19f80 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
19f90 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
19fa0 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
19fb0 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
19fc0 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
19fd0 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
19fe0 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
19ff0 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
1a000 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
1a010 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
1a020 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
1a030 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
1a040 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
1a050 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
1a060 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
1a070 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
1a080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1a090 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
1a0a0 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
1a0b0 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
1a0c0 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
1a0d0 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
1a0e0 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
1a0f0 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
1a100 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
1a110 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
1a120 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
1a130 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
1a140 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
1a150 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
1a160 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
1a170 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
1a180 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
1a190 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
1a1a0 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
1a1b0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1a1c0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
1a1d0 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
1a1e0 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
1a1f0 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
1a200 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1a210 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
1a220 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
1a230 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
1a240 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
1a250 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
1a260 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
1a270 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1a280 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
1a290 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1a2a0 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
1a2b0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1a2c0 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
1a2d0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1a2e0 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
1a2f0 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1a300 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
1a310 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1a320 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1a330 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1a340 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
1a350 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1a360 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
1a370 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
1a380 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1a390 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
1a3a0 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
1a3b0 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
1a3c0 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
1a3d0 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
1a3e0 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
1a3f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a400 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
1a410 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
1a420 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1a430 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
1a440 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1a450 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
1a460 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a470 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
1a480 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
1a490 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1a4a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1a4b0 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1a4c0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1a4d0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1a4e0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1a4f0 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1a500 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1a510 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1a520 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1a530 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1a540 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1a550 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1a560 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1a570 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1a580 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1a590 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1a5a0 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1a5b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a5c0 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1a5d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1a5e0 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e  Write the conten
1a5f0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
1a600 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   (interpreted as
1a610 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20   an integer).** 
1a620 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
1a630 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
1a640 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20  e P1.  P2==1 is 
1a650 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1a660 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69  on.  .** P2==2 i
1a670 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
1a680 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20  ormat. P2==3 is 
1a690 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1a6a0 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
1a6b0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1a6c0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
1a6d0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1a6e0 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1a6f0 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
1a700 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1a710 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
1a720 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
1a730 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
1a740 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
1a750 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
1a760 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1a770 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
1a780 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
1a790 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
1a7a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
1a7b0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1a7c0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1a7d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a7e0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1a7f0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1a800 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1a810 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1a820 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1a830 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
1a840 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
1a850 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1a860 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
1a870 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1a880 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1a890 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
1a8a0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
1a8b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
1a8c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1a8d0 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 23  egerify(pIn3);.#
1a8e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1a8f0 49 54 5f 43 4f 4e 43 55 52 52 45 4e 54 0a 20 20  IT_CONCURRENT.  
1a900 69 66 28 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72  if( db->bConcurr
1a910 65 6e 74 20 0a 20 20 20 26 26 20 28 70 4f 70 2d  ent .   && (pOp-
1a920 3e 70 32 3d 3d 42 54 52 45 45 5f 55 53 45 52 5f  >p2==BTREE_USER_
1a930 56 45 52 53 49 4f 4e 20 7c 7c 20 70 4f 70 2d 3e  VERSION || pOp->
1a940 70 32 3d 3d 42 54 52 45 45 5f 41 50 50 4c 49 43  p2==BTREE_APPLIC
1a950 41 54 49 4f 4e 5f 49 44 29 0a 20 20 29 7b 0a 20  ATION_ID).  ){. 
1a960 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
1a970 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
1a980 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
1a990 61 6e 6e 6f 74 20 6d 6f 64 69 66 79 20 25 73 20  annot modify %s 
1a9a0 77 69 74 68 69 6e 20 43 4f 4e 43 55 52 52 45 4e  within CONCURREN
1a9b0 54 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  T transaction",.
1a9c0 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 32 3d          pOp->p2=
1a9d0 3d 42 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53  =BTREE_USER_VERS
1a9e0 49 4f 4e 20 3f 20 22 75 73 65 72 5f 76 65 72 73  ION ? "user_vers
1a9f0 69 6f 6e 22 20 3a 20 22 61 70 70 6c 69 63 61 74  ion" : "applicat
1aa00 69 6f 6e 5f 69 64 22 0a 20 20 20 20 29 3b 0a 20  ion_id".    );. 
1aa10 20 20 20 62 72 65 61 6b 3b 20 0a 20 20 7d 0a 23     break; .  }.#
1aa20 65 6e 64 69 66 0a 20 20 2f 2a 20 53 65 65 20 6e  endif.  /* See n
1aa30 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20  ote about index 
1aa40 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52  shifting on OP_R
1aa50 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72  eadCookie */.  r
1aa60 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1aa70 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e  UpdateMeta(pDb->
1aa80 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69  pBt, pOp->p2, (i
1aa90 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  nt)pIn3->u.i);. 
1aaa0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1aab0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1aac0 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  ON ){.    /* Whe
1aad0 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
1aae0 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
1aaf0 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
1ab00 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
1ab10 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
1ab20 3e 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20  >bConcurrent==0 
1ab30 29 3b 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  );.    pDb->pSch
1ab40 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
1ab50 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e  ie = (int)pIn3->
1ab60 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  u.i;.    db->fla
1ab70 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
1ab80 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
1ab90 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
1aba0 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
1abb0 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
1abc0 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
1abd0 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
1abe0 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
1abf0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1ac00 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b  = (u8)pIn3->u.i;
1ac10 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1ac20 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
1ac30 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
1ac40 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1ac50 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
1ac60 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
1ac70 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
1ac80 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
1ac90 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
1aca0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
1acb0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
1acc0 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
1acd0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
1ace0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1acf0 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
1ad00 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1ad10 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1ad20 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1ad30 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
1ad40 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
1ad50 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
1ad60 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
1ad70 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
1ad80 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
1ad90 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
1ada0 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
1adb0 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
1adc0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1add0 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
1ade0 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
1adf0 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
1ae00 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
1ae10 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
1ae20 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1ae30 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
1ae40 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
1ae50 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
1ae60 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
1ae70 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
1ae80 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
1ae90 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
1aea0 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
1aeb0 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
1aec0 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
1aed0 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
1aee0 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
1aef0 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
1af00 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
1af10 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
1af20 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
1af30 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
1af40 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
1af50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
1af60 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
1af70 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1af80 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
1af90 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
1afa0 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
1afb0 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
1afc0 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
1afd0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
1afe0 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
1aff0 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
1b000 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
1b010 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
1b020 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
1b030 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
1b040 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
1b050 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
1b060 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
1b070 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
1b080 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
1b090 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
1b0a0 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
1b0b0 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
1b0c0 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
1b0d0 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
1b0e0 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
1b0f0 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
1b100 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
1b110 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
1b120 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
1b130 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
1b140 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
1b150 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1b160 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1b170 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1b180 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1b190 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1b1a0 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1b1b0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1b1c0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1b1d0 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
1b1e0 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
1b1f0 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
1b200 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1b210 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1b220 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
1b230 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
1b240 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
1b250 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
1b260 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
1b270 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
1b280 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1b290 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
1b2a0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
1b2b0 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e  penWrite, Reopen
1b2c0 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Idx.*/./* Opcode
1b2d0 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50  : ReopenIdx P1 P
1b2e0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1b2f0 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1b300 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65  iDb=P3.**.** The
1b310 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1b320 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  e works exactly 
1b330 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78  like ReadOpen ex
1b340 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72  cept that it fir
1b350 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  st.** checks to 
1b360 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f  see if the curso
1b370 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61  r on P1 is alrea
1b380 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72  dy open with a r
1b390 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  oot page.** numb
1b3a0 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20  er of P2 and if 
1b3b0 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64  it is this opcod
1b3c0 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  e becomes a no-o
1b3d0 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  p.  In other wor
1b3e0 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75  ds,.** if the cu
1b3f0 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20  rsor is already 
1b400 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f  open, do not reo
1b410 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  pen it..**.** Th
1b420 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1b430 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  de may only be u
1b440 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61  sed with P5==0 a
1b450 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67  nd with P4 being
1b460 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f  .** a P4_KEYINFO
1b470 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65   object.  Furthe
1b480 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61  rmore, the P3 va
1b490 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65 20  lue must be the 
1b4a0 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79  same as.** every
1b4b0 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78   other ReopenIdx
1b4c0 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72   or OpenRead for
1b4d0 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72   the same cursor
1b4e0 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53   number..**.** S
1b4f0 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20  ee the OpenRead 
1b500 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61  opcode documenta
1b510 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
1b520 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1b530 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1b540 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
1b550 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1b560 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1b570 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1b580 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1b590 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
1b5a0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1b5b0 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
1b5c0 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
1b5d0 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
1b5e0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1b5f0 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
1b600 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
1b610 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1b620 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1b630 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1b640 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1b650 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1b660 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1b670 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1b680 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1b690 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1b6a0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1b6b0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1b6c0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1b6d0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1b6e0 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1b6f0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1b700 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1b710 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1b720 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1b730 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1b740 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1b750 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1b760 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
1b770 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
1b780 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
1b790 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1b7a0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
1b7b0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
1b7c0 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
1b7d0 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
1b7e0 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
1b7f0 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
1b800 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
1b810 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
1b820 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
1b830 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
1b840 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
1b850 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
1b860 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
1b870 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
1b880 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
1b890 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
1b8a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70  .*/.case OP_Reop
1b8b0 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e  enIdx: {.  int n
1b8c0 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
1b8d0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
1b8e0 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
1b8f0 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
1b900 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
1b910 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1b920 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
1b930 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1b940 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1b950 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1b960 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1b970 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1b980 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  );.  pCur = p->a
1b990 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1b9a0 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43 75   if( pCur && pCu
1b9b0 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33  r->pgnoRoot==(u3
1b9c0 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  2)pOp->p2 ){.   
1b9d0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69   assert( pCur->i
1b9e0 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20  Db==pOp->p3 );  
1b9f0 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65      /* Guarantee
1ba00 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65  d by the code ge
1ba10 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67  nerator */.    g
1ba20 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  oto open_cursor_
1ba30 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20  set_hints;.  }. 
1ba40 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
1ba50 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  r is not current
1ba60 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70  ly open or is op
1ba70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e  en on a differen
1ba80 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68  t.  ** index, th
1ba90 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
1baa0 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64  into OP_OpenRead
1bab0 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70   to force a reop
1bac0 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  en */.case OP_Op
1bad0 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
1bae0 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73  OpenWrite:..  as
1baf0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1bb00 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1bb10 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  || pOp->p5==0 ||
1bb20 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1bb30 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1bb40 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1bb50 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1bb60 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1bb70 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e  penRead || pOp->
1bb80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65  opcode==OP_Reope
1bb90 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c  nIdx.          |
1bba0 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1bbb0 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1bbc0 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1bbd0 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  = SQLITE_ABORT_R
1bbe0 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62 72 65  OLLBACK;.    bre
1bbf0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  ak;.  }..  nFiel
1bc00 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
1bc10 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f  o = 0;.  p2 = pO
1bc20 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70  p->p2;.  iDb = p
1bc30 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1bc40 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1bc50 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1bc60 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1bc70 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1bc80 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  b) );.  pDb = &d
1bc90 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70  b->aDb[iDb];.  p
1bca0 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  X = pDb->pBt;.  
1bcb0 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b  assert( pX!=0 );
1bcc0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1bcd0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1bce0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1bcf0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
1bd00 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  ==BTREE_FORDELET
1bd10 45 20 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20  E );.    wrFlag 
1bd20 3d 20 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20  = BTREE_WRCSR | 
1bd30 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
1bd40 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20  G_FORDELETE);.  
1bd50 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1bd60 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1bd70 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
1bd80 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63      if( pDb->pSc
1bd90 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1bda0 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t < p->minWriteF
1bdb0 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20  ileFormat ){.   
1bdc0 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69     p->minWriteFi
1bdd0 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e  leFormat = pDb->
1bde0 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1bdf0 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rmat;.    }.  }e
1be00 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  lse{.    wrFlag 
1be10 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = 0;.  }.  if( p
1be20 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1be30 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61  P2ISREG ){.    a
1be40 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20  ssert( p2>0 );. 
1be50 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28     assert( p2<=(
1be60 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
1be70 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  or) );.    pIn2 
1be80 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1be90 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1bea0 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1beb0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1bec0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1bed0 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1bee0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1bef0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1bf00 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1bf10 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1bf20 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1bf30 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1bf40 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
1bf50 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1bf60 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1bf70 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1bf80 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1bf90 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1bfa0 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1bfb0 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1bfc0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1bfd0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1bfe0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1bff0 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1c000 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1c010 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1c020 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20  if( NEVER(p2<2) 
1c030 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ) {.      rc = S
1c040 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
1c050 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
1c060 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c070 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  r;.    }.  }.  i
1c080 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1c090 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
1c0a0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
1c0b0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1c0c0 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1c0d0 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1c0e0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1c0f0 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1c100 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  b );.    nField 
1c110 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  = pKeyInfo->nFie
1c120 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46  ld+pKeyInfo->nXF
1c130 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ield;.  }else if
1c140 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1c150 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e  4_INT32 ){.    n
1c160 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1c170 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  i;.  }.  assert(
1c180 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1c190 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1c1a0 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  =0 );.  testcase
1c1b0 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20  ( nField==0 );  
1c1c0 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e  /* Table with IN
1c1d0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1c1e0 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c  Y and nothing el
1c1f0 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61  se */.  pCur = a
1c200 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1c210 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64   pOp->p1, nField
1c220 2c 20 69 44 62 2c 20 43 55 52 54 59 50 45 5f 42  , iDb, CURTYPE_B
1c230 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 75  TREE);.  if( pCu
1c240 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
1c250 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
1c260 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
1c270 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
1c280 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74    pCur->pgnoRoot
1c290 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71   = p2;.  rc = sq
1c2a0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1c2b0 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
1c2c0 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
1c2d0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1c2e0 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  pCur->pKeyInfo =
1c2f0 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20   pKeyInfo;.  /* 
1c300 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
1c310 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61  or.isTable varia
1c320 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65  ble. Previous ve
1c330 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53  rsions of.  ** S
1c340 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68  QLite used to ch
1c350 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d  eck if the root-
1c360 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20  page flags were 
1c370 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69  sane at this poi
1c380 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f  nt.  ** and repo
1c390 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  rt database corr
1c3a0 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77  uption if they w
1c3b0 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69  ere not, but thi
1c3c0 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a  s check has.  **
1c3d0 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74   since moved int
1c3e0 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  o the btree laye
1c3f0 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d  r.  */  .  pCur-
1c400 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
1c410 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
1c420 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72  FO;..open_cursor
1c430 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73  _set_hints:.  as
1c440 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c  sert( OPFLAG_BUL
1c450 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b  KCSR==BTREE_BULK
1c460 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74  LOAD );.  assert
1c470 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d  ( OPFLAG_SEEKEQ=
1c480 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29  =BTREE_SEEK_EQ )
1c490 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
1c4a0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42  p->p5 & OPFLAG_B
1c4b0 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66  ULKCSR );.#ifdef
1c4c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
1c4d0 55 52 53 4f 52 5f 48 49 4e 54 0a 20 20 74 65 73  URSOR_HINT.  tes
1c4e0 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26  tcase( pOp->p2 &
1c4f0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29   OPFLAG_SEEKEQ )
1c500 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
1c510 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1c520 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e  tFlags(pCur->uc.
1c530 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20  pCursor,.       
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c550 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
1c560 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43   & (OPFLAG_BULKC
1c570 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
1c580 29 29 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  )));.  break;.}.
1c590 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c5a0 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1c5b0 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1c5c0 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1c5d0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1c5e0 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1c5f0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1c600 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1c610 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1c620 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1c630 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1c640 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1c650 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1c660 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1c670 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1c680 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1c690 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1c6a0 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1c6b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1c6c0 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1c6d0 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1c6e0 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1c6f0 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1c700 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1c710 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1c720 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1c730 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1c740 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1c750 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1c760 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1c770 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1c780 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1c790 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1c7a0 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
1c7b0 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
1c7c0 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
1c7d0 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
1c7e0 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
1c7f0 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
1c800 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
1c810 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
1c820 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
1c830 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1c840 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
1c850 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
1c860 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
1c870 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
1c880 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
1c890 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1c8a0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1c8b0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mn=P2.**.** This
1c8c0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1c8d0 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1c8e0 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1c8f0 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1c900 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1c910 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1c920 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1c930 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1c940 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1c950 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1c960 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1c970 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1c980 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1c990 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1c9a0 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1c9b0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1c9c0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1c9d0 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  pCx;.  KeyInfo *
1c9e0 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61  pKeyInfo;..  sta
1c9f0 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1ca00 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1ca10 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1ca20 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1ca30 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1ca40 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1ca50 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1ca60 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1ca70 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1ca80 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1ca90 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1caa0 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  B;.  assert( pOp
1cab0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1cac0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1cad0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1cae0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1caf0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1cb00 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45  1, CURTYPE_BTREE
1cb10 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1cb20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1cb30 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1cb40 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
1cb50 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20  meral = 1;.  rc 
1cb60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1cb70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1cb80 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1cbb0 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1cbc0 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1cbd0 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1cbe0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1cbf0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1cc00 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1cc10 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1cc20 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1cc30 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1cc40 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1cc50 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1cc60 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1cc70 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1cc80 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1cc90 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1cca0 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1ccb0 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1ccc0 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1ccd0 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1cce0 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1ccf0 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1cd00 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1cd10 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1cd20 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1cd30 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1cd40 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1cd50 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1cd60 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1cd70 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1cd80 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1cd90 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1cda0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1cdb0 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1cdc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1cdd0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1cde0 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1cdf0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1ce00 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1ce10 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1ce20 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1ce30 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1ce40 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1ce50 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1ce60 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1ce70 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1ce80 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1ce90 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1cea0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1ceb0 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1cec0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1ced0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1cee0 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 42 54 52  ->pBt, pgno, BTR
1cef0 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 20 20 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e            pKeyIn
1cf20 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72  fo, pCx->uc.pCur
1cf30 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1cf40 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1cf50 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1cf60 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1cf70 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1cf80 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1cf90 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53  ROOT, BTREE_WRCS
1cfa0 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfc0 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72   0, pCx->uc.pCur
1cfd0 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
1cfe0 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1cff0 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
1d000 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d  sOrdered = (pOp-
1d010 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44  >p5!=BTREE_UNORD
1d020 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ERED);.  break;.
1d030 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
1d040 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50  rterOpen P1 P2 P
1d050 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  3 P4 *.**.** Thi
1d060 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  s opcode works l
1d070 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ike OP_OpenEphem
1d080 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74  eral except that
1d090 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74   it opens.** a t
1d0a0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74  ransient index t
1d0b0 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61  hat is specifica
1d0c0 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20  lly designed to 
1d0d0 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61  sort large.** ta
1d0e0 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78  bles using an ex
1d0f0 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72  ternal merge-sor
1d100 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a  t algorithm..**.
1d110 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50  ** If argument P
1d120 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  3 is non-zero, t
1d130 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73  hen it indicates
1d140 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72   that the sorter
1d150 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74   may.** assume t
1d160 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72  hat a stable sor
1d170 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68  t considering th
1d180 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64  e first P3 field
1d190 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79  s of each.** key
1d1a0 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74   is sufficient t
1d1b0 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65  o produce the re
1d1c0 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a  quired results..
1d1d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
1d1e0 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  rOpen: {.  VdbeC
1d1f0 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1d200 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1d210 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1d220 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1d230 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1d240 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1d250 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52  pOp->p2, -1, CUR
1d260 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20  TYPE_SORTER);.  
1d270 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1d280 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1d290 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
1d2a0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1d2b0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1d2c0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1d2d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1d2e0 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1d2f0 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d  NC(db) );.  rc =
1d300 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
1d310 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e  erInit(db, pOp->
1d320 70 33 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61  p3, pCx);.  brea
1d330 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d340 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31   SequenceTest P1
1d350 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
1d360 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f  opsis: if( curso
1d370 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63  r[P1].ctr++ ) pc
1d380 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69   = P2.**.** P1 i
1d390 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
1d3a0 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e  r. If the sequen
1d3b0 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75  ce counter is cu
1d3c0 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75  rrently zero, ju
1d3d0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67  mp.** to P2. Reg
1d3e0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
1d3f0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75  er or not the ju
1d400 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63  mp is taken, inc
1d410 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68  rement the.** th
1d420 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65  e sequence value
1d430 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71  ..*/.case OP_Seq
1d440 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56  uenceTest: {.  V
1d450 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d460 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d470 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1d480 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1d490 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1d4a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1d4b0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
1d4c0 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43  .  if( (pC->seqC
1d4d0 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20  ount++)==0 ){.  
1d4e0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
1d4f0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
1d500 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1d510 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
1d520 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1d530 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e  s: P3 columns in
1d540 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65   r[P2].**.** Ope
1d550 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74  n a new cursor t
1d560 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
1d570 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20  fake table that 
1d580 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
1d590 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61  e.** row of data
1d5a0 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  .  The content o
1d5b0 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  f that one row i
1d5c0 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
1d5d0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73   memory.** regis
1d5e0 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65  ter P2.  In othe
1d5f0 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20  r words, cursor 
1d600 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c  P1 becomes an al
1d610 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20  ias for the .** 
1d620 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74  MEM_Blob content
1d630 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65   contained in re
1d640 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1d650 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
1d660 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
1d670 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
1d680 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a  o hold a single.
1d690 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
1d6a0 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
1d6b0 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
1d6c0 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
1d6d0 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
1d6e0 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
1d6f0 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
1d700 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
1d710 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
1d720 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
1d730 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
1d740 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
1d750 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1d760 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
1d770 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
1d780 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
1d790 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
1d7a0 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
1d7b0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1d7c0 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
1d7d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1d7e0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1d7f0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1d800 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
1d810 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1d820 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1d830 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d  ->p1, pOp->p3, -
1d840 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44  1, CURTYPE_PSEUD
1d850 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  O);.  if( pCx==0
1d860 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1d870 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1d880 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73   1;.  pCx->uc.ps
1d890 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70  eudoTableReg = p
1d8a0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
1d8b0 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73  sTable = 1;.  as
1d8c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1d8d0 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1d8e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
1d8f0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1d900 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
1d910 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1d920 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
1d930 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
1d940 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
1d950 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1d960 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
1d970 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
1d980 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d990 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1d9a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
1d9b0 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1d9c0 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
1d9d0 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
1d9e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
1d9f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
1da00 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1da10 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
1da20 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  ASK./* Opcode: C
1da30 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20  olumnsUsed P1 * 
1da40 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
1da50 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20  s opcode (which 
1da60 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53  only exists if S
1da70 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c  QLite was compil
1da80 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  ed with.** SQLIT
1da90 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
1daa0 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74  USED_MASK) ident
1dab0 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75  ifies which colu
1dac0 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61  mns of the.** ta
1dad0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72  ble or index for
1dae0 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75   cursor P1 are u
1daf0 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34  sed.  P4 is a 64
1db00 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
1db10 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68  (P4_INT64) in wh
1db20 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33  ich the first 63
1db30 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f   bits are one fo
1db40 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a  r each of the.**
1db50 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e   first 63 column
1db60 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
1db70 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  r index that are
1db80 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a   actually used.*
1db90 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e  * by the cursor.
1dba0 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72    The high-order
1dbb0 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61   bit is set if a
1dbc0 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a  ny column after.
1dbd0 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75  ** the 64th is u
1dbe0 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sed..*/.case OP_
1dbf0 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20  ColumnsUsed: {. 
1dc00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1dc10 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1dc20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1dc30 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
1dc40 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1dc50 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73   );.  pC->maskUs
1dc60 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d  ed = *(u64*)pOp-
1dc70 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
1dc80 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
1dc90 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50  Opcode: SeekGE P
1dca0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1dcb0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1dcc0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1dcd0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1dce0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1dcf0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1dd00 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1dd10 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1dd20 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1dd30 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
1dd40 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1dd50 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1dd60 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1dd70 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1dd80 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1dd90 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1dda0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1ddb0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1ddc0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1ddd0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1dde0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1ddf0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1de00 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1de10 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1de20 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1de30 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1de40 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1de50 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
1de60 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1de70 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1de80 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1de90 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1dea0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
1deb0 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
1dec0 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
1ded0 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
1dee0 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
1def0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1df00 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
1df10 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
1df20 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
1df30 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
1df40 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1df50 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
1df60 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
1df70 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
1df80 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
1df90 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45  owed by an IdxLE
1dfa0 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
1dfb0 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
1dfc0 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70  .** The IdxLE op
1dfd0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
1dfe0 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
1dff0 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
1e000 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f  t the.** IdxLE o
1e010 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1e020 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
1e030 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
1e040 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1e050 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1e060 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1e070 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1e080 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1e090 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1e0a0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1e0b0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1e0c0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1e0d0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1e0e0 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1e0f0 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1e100 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1e110 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1e120 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1e130 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1e140 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1e150 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1e160 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1e170 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1e180 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1e190 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1e1a0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1e1b0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1e1c0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1e1d0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1e1e0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1e1f0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1e200 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1e210 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1e220 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1e230 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1e240 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1e250 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1e260 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1e270 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1e280 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1e290 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1e2a0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1e2b0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1e2c0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1e2d0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1e2e0 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1e2f0 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1e300 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1e310 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1e320 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1e330 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1e340 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1e350 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1e360 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1e370 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1e380 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1e390 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1e3a0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1e3b0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1e3c0 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1e3d0 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1e3e0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1e3f0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1e400 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1e410 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1e420 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1e430 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1e440 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1e450 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1e460 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1e470 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1e480 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1e490 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1e4a0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1e4b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1e4c0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1e4d0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1e4e0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1e4f0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1e500 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1e510 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1e520 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1e530 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1e540 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1e550 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1e560 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1e570 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1e580 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1e590 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1e5a0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1e5b0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1e5c0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1e5d0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1e5e0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1e5f0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1e600 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1e610 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1e620 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1e630 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1e640 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1e650 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1e660 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1e670 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1e680 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1e690 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1e6a0 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1e6b0 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1e6c0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1e6d0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1e6e0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1e6f0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1e700 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1e710 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1e720 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1e730 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1e740 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1e750 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1e760 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1e770 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1e780 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1e790 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1e7a0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1e7b0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1e7c0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1e7d0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1e7e0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1e7f0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1e800 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1e810 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1e820 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1e830 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1e840 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1e850 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1e860 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1e870 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1e880 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1e890 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1e8a0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1e8b0 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1e8c0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1e8d0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1e8e0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1e8f0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1e900 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e910 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1e920 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1e930 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1e940 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1e950 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1e960 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1e970 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e980 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1e990 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1e9a0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1e9b0 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  xt..**.** If the
1e9c0 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
1e9d0 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1e9e0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
1e9f0 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
1ea00 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1ea10 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
1ea20 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
1ea30 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
1ea40 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
1ea50 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1ea60 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
1ea70 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
1ea80 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
1ea90 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
1eaa0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
1eab0 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xGE opcode with 
1eac0 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
1ead0 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45  ts..** The IdxGE
1eae0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1eaf0 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
1eb00 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
1eb10 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47   but the.** IdxG
1eb20 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1eb30 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
1eb40 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
1eb50 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
1eb60 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1eb70 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1eb80 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
1eb90 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20  case OP_SeekLT: 
1eba0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1ebb0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1ebc0 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20  SeekLE:         
1ebd0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1ebe0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20  case OP_SeekGE: 
1ebf0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1ec00 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1ec10 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20  SeekGT: {       
1ec20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1ec30 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1ec40 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
1ec50 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69  on result */.  i
1ec60 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20  nt oc;          
1ec70 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20    /* Opcode */. 
1ec80 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1ec90 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f      /* The curso
1eca0 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55  r to seek */.  U
1ecb0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1ecc0 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20    /* The key to 
1ecd0 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  seek for */.  in
1ece0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
1ecf0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
1ed00 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20  lumns or fields 
1ed10 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  in the key */.  
1ed20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
1ed30 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1ed40 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1ed50 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c  o */.  int eqOnl
1ed60 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  y;        /* Onl
1ed70 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  y interested in 
1ed80 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20  == results */.. 
1ed90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1eda0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1edb0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1edc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1edd0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1ede0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1edf0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1ee00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ee10 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1ee20 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
1ee30 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
1ee40 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
1ee50 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1ee60 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
1ee70 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
1ee80 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
1ee90 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
1eea0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1eeb0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1eec0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
1eed0 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f  !=0 );.  oc = pO
1eee0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f  p->opcode;.  eqO
1eef0 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e  nly = 0;.  pC->n
1ef00 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64  ullRow = 0;.#ifd
1ef10 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1ef20 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
1ef30 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
1ef40 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
1ef50 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
1ef60 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  The BTREE_SEEK_E
1ef70 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73  Q flag is only s
1ef80 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73  et on index curs
1ef90 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  ors */.    asser
1efa0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
1efb0 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
1efc0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
1efd0 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 20 29  EE_SEEK_EQ)==0 )
1efe0 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e  ;..    /* The in
1eff0 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20  put value in P3 
1f000 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20  might be of any 
1f010 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72  type: integer, r
1f020 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20  eal, string,.   
1f030 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c   ** blob, or NUL
1f040 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73  L.  But it needs
1f050 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
1f060 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20  r before we can 
1f070 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65  do.    ** the se
1f080 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69  ek, so convert i
1f090 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d  t. */.    pIn3 =
1f0a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1f0b0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
1f0c0 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
1f0d0 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
1f0e0 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
1f0f0 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
1f100 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
1f110 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   0);.    }.    i
1f120 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1f130 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
1f140 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
1f150 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1f160 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1f170 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1f180 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c  without.    ** l
1f190 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
1f1a0 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
1f1b0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
1f1c0 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
1f1d0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1f1e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
1f1f0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
1f200 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1f210 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
1f220 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1f230 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  3 value cannot b
1f240 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1f250 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e   any kind of a n
1f260 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a  umber,.        *
1f270 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
1f280 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
1f290 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
1f2a0 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  /.        VdbeBr
1f2b0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20  anchTaken(1,2); 
1f2c0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
1f2d0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1f2e0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1f2f0 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1f300 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c  mation iKey is l
1f310 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61  arger than the a
1f320 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
1f330 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
1f340 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66   substitute >= f
1f350 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c  or > and < for <
1f360 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73  =. e.g. if the s
1f370 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20  earch term.     
1f380 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74   ** is 4.9 and t
1f390 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f  he integer appro
1f3a0 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20  ximation 5:.    
1f3b0 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20    **.      **   
1f3c0 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20       (x >  4.9) 
1f3d0 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20     ->     (x >= 
1f3e0 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  5).      **     
1f3f0 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20     (x <= 4.9)   
1f400 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29   ->     (x <  5)
1f410 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1f420 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64  if( pIn3->u.r<(d
1f430 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
1f440 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1f450 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65  _SeekGE==(OP_See
1f460 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kGT-1) );.      
1f470 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1f480 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d  kLT==(OP_SeekLE-
1f490 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1f4a0 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45  sert( (OP_SeekLE
1f4b0 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1f4c0 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1f4d0 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1f4e0 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
1f4f0 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
1f500 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20  01) ) oc--;.    
1f510 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1f520 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
1f530 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c  on iKey is small
1f540 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
1f550 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
1f560 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
1f570 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20  bstitute <= for 
1f580 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20  < and > for >=. 
1f590 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69   */.      else i
1f5a0 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f  f( pIn3->u.r>(do
1f5b0 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
1f5c0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1f5d0 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLE==(OP_Seek
1f5e0 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LT+1) );.       
1f5f0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1f600 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31  GT==(OP_SeekGE+1
1f610 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1f620 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20  ert( (OP_SeekLT 
1f630 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1f640 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20  eekGE & 0x0001) 
1f650 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
1f660 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
1f670 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
1f680 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20  1) ) oc++;.     
1f690 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63   }.    } .    rc
1f6a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1f6b0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1f6c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c  ->uc.pCursor, 0,
1f6d0 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
1f6e0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  res);.    pC->mo
1f6f0 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65  vetoTarget = iKe
1f700 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f  y;  /* Used by O
1f710 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20  P_Delete */.    
1f720 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1f730 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
1f740 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1f750 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  or;.    }.  }els
1f760 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20  e{.    /* For a 
1f770 63 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20  cursor with the 
1f780 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69  BTREE_SEEK_EQ hi
1f790 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f  nt, only the OP_
1f7a0 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a  SeekGE and.    *
1f7b0 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f  * OP_SeekLE opco
1f7c0 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c  des are allowed,
1f7d0 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20   and these must 
1f7e0 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  be immediately f
1f7f0 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62  ollowed.    ** b
1f800 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72  y an OP_IdxGT or
1f810 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65   OP_IdxLT opcode
1f820 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  , respectively, 
1f830 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
1f840 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  y..    */.    if
1f850 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1f860 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e  rsorHasHint(pC->
1f870 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
1f880 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20  E_SEEK_EQ) ){.  
1f890 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a      eqOnly = 1;.
1f8a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1f8b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
1f8c0 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ekGE || pOp->opc
1f8d0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29  ode==OP_SeekLE )
1f8e0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1f8f0 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
1f900 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31  P_IdxLT || pOp[1
1f910 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
1f920 47 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  GT );.      asse
1f930 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70  rt( pOp[1].p1==p
1f940 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20  Op[0].p1 );.    
1f950 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
1f960 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29  .p2==pOp[0].p2 )
1f970 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1f980 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30  pOp[1].p3==pOp[0
1f990 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p3 );.      as
1f9a0 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e  sert( pOp[1].p4.
1f9b0 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29  i==pOp[0].p4.i )
1f9c0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69  ;.    }..    nFi
1f9d0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1f9e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1f9f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1fa00 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
1fa10 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1fa20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1fa30 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1fa40 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1fa50 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
1fa60 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1fa70 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1fa80 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1fa90 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
1faa0 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1fab0 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
1fac0 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
1fad0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1fae0 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = -1;.    **   }
1faf0 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20  else{.    **    
1fb00 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1fb10 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20  +1;.    **   }. 
1fb20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61     */.    r.defa
1fb30 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28  ult_rc = ((1 & (
1fb40 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29  oc - OP_SeekLT))
1fb50 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20   ? -1 : +1);.   
1fb60 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1fb70 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61  SeekGT || r.defa
1fb80 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1fb90 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1fba0 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66  _SeekLE || r.def
1fbb0 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
1fbc0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1fbd0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65  P_SeekGE || r.de
1fbe0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1fbf0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1fc00 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64  OP_SeekLT || r.d
1fc10 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
1fc20 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ..    r.aMem = &
1fc30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
1fc40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1fc50 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
1fc60 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
1fc70 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
1fc80 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1fc90 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
1fca0 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42  ndif.    ExpandB
1fcb0 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1fcc0 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20   r.eqSeen = 0;. 
1fcd0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1fce0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1fcf0 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
1fd00 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1fd10 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
1fd20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1fd30 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1fd40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1fd50 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79  }.    if( eqOnly
1fd60 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20   && r.eqSeen==0 
1fd70 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1fd80 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20   res!=0 );.     
1fd90 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66   goto seek_not_f
1fda0 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ound;.    }.  }.
1fdb0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1fdc0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
1fdd0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1fde0 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
1fdf0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1fe00 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1fe10 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1fe20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
1fe30 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  GE ){  assert( o
1fe40 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c==OP_SeekGE || 
1fe50 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b  oc==OP_SeekGT );
1fe60 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c  .    if( res<0 |
1fe70 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1fe80 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20  =OP_SeekGT) ){. 
1fe90 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1fea0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1feb0 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63  BtreeNext(pC->uc
1fec0 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
1fed0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1fee0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1fef0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1ff00 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
1ff10 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1ff20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1ff30 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1ff40 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
1ff50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
1ff60 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1ff70 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1ff80 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
1ff90 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
1ffa0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1ffb0 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70  revious(pC->uc.p
1ffc0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1ffd0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1ffe0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1fff0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20000 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
20010 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
20020 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
20030 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
20040 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
20050 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69  o.      ** see i
20060 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
20070 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
20080 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
20090 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e  BtreeEof(pC->uc.
200a0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
200b0 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75    }.seek_not_fou
200c0 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nd:.  assert( pO
200d0 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62  p->p2>0 );.  Vdb
200e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
200f0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
20100 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  s ){.    goto ju
20110 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
20120 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a  e if( eqOnly ){.
20130 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20140 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
20150 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
20160 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
20170 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20  ;.    pOp++; /* 
20180 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c  Skip the OP_IdxL
20190 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68  t or OP_IdxGT th
201a0 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20  at follows */.  
201b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
201c0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
201d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
201e0 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72  opsis:  intkey=r
201f0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P2].**.** P1 is
20200 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63   an open table c
20210 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
20220 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e  a rowid integer.
20230 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72    Arrange.** for
20240 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74   P1 to move so t
20250 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
20260 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e   the rowid given
20270 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P2..**.** Th
20280 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
20290 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
202a0 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
202b0 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
202c0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
202d0 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
202e0 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
202f0 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
20300 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
20310 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
20320 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ens..*/.case OP_
20330 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  Seek: {    /* in
20340 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
20350 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
20360 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
20370 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
20380 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
20390 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
203a0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
203b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
203c0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
203d0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
203e0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
203f0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
20400 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
20410 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
20420 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20  w = 0;.  pIn2 = 
20430 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
20440 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
20450 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
20460 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
20470 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
20480 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61  veto = 1;.  brea
20490 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
204a0 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
204b0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
204c0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
204d0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
204e0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
204f0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
20500 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
20510 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
20520 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
20530 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
20540 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
20550 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
20560 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
20570 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
20580 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
20590 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
205a0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
205b0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
205c0 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
205d0 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
205e0 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
205f0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
20600 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
20610 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
20620 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
20630 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
20640 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
20650 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
20660 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62  e where it can b
20670 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
20680 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72   the forward dir
20690 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78  ection.  The Nex
206a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
206b0 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20  ll work,.** but 
206c0 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73  not the Prev ins
206d0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
206e0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
206f0 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
20700 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
20710 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
20720 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
20730 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
20740 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
20750 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
20760 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
20770 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
20780 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
20790 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
207a0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
207b0 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
207c0 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
207d0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
207e0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
207f0 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
20800 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
20810 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
20820 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
20830 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
20840 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
20850 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
20860 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
20870 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
20880 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
20890 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
208a0 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
208b0 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
208c0 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
208d0 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
208e0 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
208f0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
20900 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
20910 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
20920 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
20930 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
20940 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
20950 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
20960 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
20970 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
20980 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
20990 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
209a0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
209b0 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
209c0 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
209d0 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
209e0 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
209f0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
20a00 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f   NotExists, NoCo
20a10 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  nflict.*/./* Opc
20a20 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
20a30 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
20a40 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
20a50 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
20a60 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
20a70 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
20a80 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
20a90 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
20aa0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
20ab0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
20ac0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
20ad0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
20ae0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
20af0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
20b00 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
20b10 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
20b20 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
20b30 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
20b40 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
20b50 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
20b60 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
20b70 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
20b80 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
20b90 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
20ba0 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
20bb0 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
20bc0 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
20bd0 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
20be0 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
20bf0 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
20c00 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
20c10 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
20c20 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
20c30 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
20c40 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
20c50 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
20c60 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
20c70 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
20c80 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
20c90 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
20ca0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
20cb0 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
20cc0 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
20cd0 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
20ce0 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
20cf0 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
20d00 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
20d10 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
20d20 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
20d30 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
20d40 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20d50 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
20d60 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
20d70 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
20d80 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
20d90 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
20da0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
20db0 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
20dc0 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
20dd0 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
20de0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20df0 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
20e00 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
20e10 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  ase OP_NoConflic
20e20 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  t:     /* jump, 
20e30 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
20e40 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
20e50 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
20e60 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
20e70 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
20e80 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
20e90 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e  eadyExists;.  in
20ea0 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e  t takeJump;.  in
20eb0 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73  t ii;.  VdbeCurs
20ec0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
20ed0 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65  s;.  char *pFree
20ee0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
20ef0 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
20f00 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
20f10 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
20f20 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
20f30 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
20f40 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20  + sizeof(Mem)*4 
20f50 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
20f60 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20  LITE_TEST.  if( 
20f70 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
20f80 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c  NoConflict ) sql
20f90 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
20fa0 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  ++;.#endif..  as
20fb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20fc0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20fd0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
20fe0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
20ff0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
21000 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
21010 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
21020 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
21030 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
21040 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
21050 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
21060 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
21070 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
21080 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
21090 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
210a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
210b0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
210c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
210d0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
210e0 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 69 66 28  pFree = 0;.  if(
210f0 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
21100 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
21110 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
21120 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
21130 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
21140 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b    r.aMem = pIn3;
21150 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
21160 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  i<r.nField; ii++
21170 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
21180 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
21190 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20  Mem[ii]) );.    
211a0 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e    ExpandBlob(&r.
211b0 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65  aMem[ii]);.#ifde
211c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
211d0 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45       if( ii ) RE
211e0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
211f0 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d  ->p3+ii, &r.aMem
21200 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  [ii]);.#endif.  
21210 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 20    }.    pIdxKey 
21220 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = &r;.  }else{. 
21230 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
21240 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
21250 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20  ackedRecord(.   
21260 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66       pC->pKeyInf
21270 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a  o, aTempRec, siz
21280 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26  eof(aTempRec), &
21290 70 46 72 65 65 0a 20 20 20 20 29 3b 0a 20 20 20  pFree.    );.   
212a0 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
212b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
212c0 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
212d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
212e0 62 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  b );.    ExpandB
212f0 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73  lob(pIn3);.    s
21300 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
21310 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
21320 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
21330 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
21340 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e  .  }.  pIdxKey->
21350 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
21360 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a    takeJump = 0;.
21370 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21380 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e==OP_NoConflict
21390 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74   ){.    /* For t
213a0 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  he OP_NoConflict
213b0 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68   opcode, take th
213c0 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66  e jump if any of
213d0 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75   the.    ** inpu
213e0 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c  t fields are NUL
213f0 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79  L, since any key
21400 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c   with a NULL wil
21410 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e  l not.    ** con
21420 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72  flict */.    for
21430 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65  (ii=0; ii<pIdxKe
21440 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  y->nField; ii++)
21450 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78  {.      if( pIdx
21460 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c  Key->aMem[ii].fl
21470 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
21480 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a 75  {.        takeJu
21490 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  mp = 1;.        
214a0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
214b0 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20     }.  }.  rc = 
214c0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
214d0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
214e0 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b  c.pCursor, pIdxK
214f0 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  ey, 0, 0, &res);
21500 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
21510 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
21520 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21530 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
21540 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73   }.  pC->seekRes
21550 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72  ult = res;.  alr
21560 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
21570 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  s==0);.  pC->nul
21580 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79  lRow = 1-already
21590 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65  Exists;.  pC->de
215a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
215b0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
215c0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
215d0 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  E;.  if( pOp->op
215e0 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29  code==OP_Found )
215f0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
21600 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69  Taken(alreadyExi
21610 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts!=0,2);.    i
21620 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
21630 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
21640 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
21650 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
21660 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61  (takeJump||alrea
21670 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a  dyExists==0,2);.
21680 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d 70      if( takeJump
21690 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69 73   || !alreadyExis
216a0 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
216b0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
216c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
216d0 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32   NotExists P1 P2
216e0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
216f0 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
21700 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ].**.** P1 is th
21710 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72  e index of a cur
21720 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53  sor open on an S
21730 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28  QL table btree (
21740 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20  with integer.** 
21750 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e  keys).  P3 is an
21760 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20   integer rowid. 
21770 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20   If P1 does not 
21780 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
21790 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50   with.** rowid P
217a0 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  3 then jump imme
217b0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
217c0 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20  Or, if P2 is 0, 
217d0 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49  raise an.** SQLI
217e0 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72  TE_CORRUPT error
217f0 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e  . If P1 does con
21800 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
21810 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  th rowid P3 then
21820 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63   .** leave the c
21830 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61  ursor pointing a
21840 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e  t that record an
21850 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
21860 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  o the next.** in
21870 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
21880 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64   The OP_NotFound
21890 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
218a0 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
218b0 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72  ion on index btr
218c0 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62  ees.** (with arb
218d0 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c  itrary multi-val
218e0 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20  ue keys)..**.** 
218f0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
21900 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
21910 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
21920 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61  t cannot be adva
21930 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65  nced.** in eithe
21940 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
21950 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
21960 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20  e Next and Prev 
21970 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20  opcodes will.** 
21980 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69  not work followi
21990 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
219a0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
219b0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
219c0 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63   NoConflict.*/.c
219d0 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
219e0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
219f0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62  mp, in3 */.  Vdb
21a00 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
21a10 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21a20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34    int res;.  u64
21a30 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d   iKey;..  pIn3 =
21a40 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
21a50 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
21a60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
21a70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
21a80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21a90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21aa0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21ab0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21ac0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
21ad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
21ae0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
21af0 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  = 0;.#endif.  as
21b00 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
21b10 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
21b20 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
21b30 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
21b40 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
21b50 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
21b60 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
21b70 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
21b80 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
21b90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21ba0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
21bb0 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
21bc0 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
21bd0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
21be0 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   || res==0 );.  
21bf0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
21c00 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
21c10 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
21c20 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  /.  pC->nullRow 
21c30 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
21c40 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21c50 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
21c60 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21c70 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
21c80 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70  n(res!=0,2);.  p
21c90 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
21ca0 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  res;.  if( res!=
21cb0 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
21cc0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
21cd0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
21ce0 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
21cf0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
21d00 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  T_BKPT;.    }els
21d10 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  e{.      goto ju
21d20 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
21d30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21d40 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
21d50 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
21d60 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
21d70 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  2]=cursor[P1].ct
21d80 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74  r++.**.** Find t
21d90 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c  he next availabl
21da0 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
21db0 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  r for cursor P1.
21dc0 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65  .** Write the se
21dd0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e  quence number in
21de0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
21df0 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20  ** The sequence 
21e00 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75  number on the cu
21e10 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
21e20 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a  ted after this.*
21e30 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
21e40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
21e50 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  ence: {         
21e60 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
21e70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21e80 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21e90 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
21ea0 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
21eb0 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61  p->p1]!=0 );.  a
21ec0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
21ed0 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79  pOp->p1]->eCurTy
21ee0 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe!=CURTYPE_VTAB
21ef0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
21f00 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
21f10 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
21f20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
21f30 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b  >p1]->seqCount++
21f40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
21f50 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77  * Opcode: NewRow
21f60 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
21f70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
21f80 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47  2]=rowid.**.** G
21f90 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
21fa0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
21fb0 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
21fc0 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
21fd0 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
21fe0 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
21ff0 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
22000 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
22010 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
22020 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
22030 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
22040 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
22050 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
22060 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
22070 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
22080 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
22090 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
220a0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
220b0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44  frame of this VD
220c0 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a  BE that holds .*
220d0 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  * the largest pr
220e0 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74  eviously generat
220f0 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
22100 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20  . No new record 
22110 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61  numbers are.** a
22120 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
22130 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  s than this valu
22140 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c  e. When this val
22150 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d  ue reaches its m
22160 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53  aximum, .** an S
22170 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
22180 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
22190 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
221a0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
221b0 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
221c0 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
221d0 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
221e0 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
221f0 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
22200 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
22210 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
22220 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
22230 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
22240 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ut2 */.  i64 v; 
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22260 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
22270 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
22280 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
22290 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
222a0 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
222b0 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
222c0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
222d0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
222e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
222f0 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
22300 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22310 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
22320 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
22330 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
22340 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
22350 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
22360 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
22370 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
22380 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
22390 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
223a0 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
223b0 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
223c0 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
223d0 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  = 0;.  pOut = ou
223e0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
223f0 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
22400 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
22410 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22420 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22430 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22440 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
22450 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
22460 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
22470 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
22480 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
22490 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20  or!=0 );.  {.   
224a0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
224b0 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
224c0 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
224d0 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
224e0 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
224f0 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
22500 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
22510 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
22520 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
22530 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
22540 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
22550 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
22560 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
22570 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
22580 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
22590 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
225a0 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
225b0 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
225c0 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
225d0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
225e0 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
225f0 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
22600 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
22610 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
22620 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
22630 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
22640 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
22650 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
22660 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
22670 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
22680 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
22690 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
226a0 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
226b0 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
226c0 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
226d0 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
226e0 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
226f0 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
22700 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20   100 times..    
22710 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
22720 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23  C->isTable );..#
22730 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
22740 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66  IT_ROWID.#   def
22750 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78  ine MAX_ROWID 0x
22760 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20  7fffffff.#else. 
22770 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69     /* Some compi
22780 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  lers complain ab
22790 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66  out constants of
227a0 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66   the form 0x7fff
227b0 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20  ffffffffffff..  
227c0 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70    ** Others comp
227d0 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66  lain about 0x7ff
227e0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c  ffffffffffffffLL
227f0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
22800 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20   macro seems.   
22810 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74   ** to provide t
22820 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c  he constant whil
22830 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d  e making all com
22840 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20  pilers happy..  
22850 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20    */.#   define 
22860 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29  MAX_ROWID  (i64)
22870 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66  ( (((u64)0x7ffff
22880 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34  fff)<<32) | (u64
22890 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65  )0xffffffff ).#e
228a0 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70  ndif..    if( !p
228b0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
228c0 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  d ){.      rc = 
228d0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
228e0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
228f0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
22900 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
22910 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
22920 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22930 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
22940 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
22950 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a       v = 1;   /*
22960 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38   IMP: R-61914-48
22970 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  074 */.      }el
22980 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  se{.        asse
22990 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
229a0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
229b0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29 3b  ->uc.pCursor) );
229c0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
229d0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
229e0 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
229f0 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61  , &v);.        a
22a00 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
22a10 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e  E_OK );   /* Can
22a20 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69  not fail followi
22a30 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a  ng BtreeLast() *
22a40 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e  /.        if( v>
22a50 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  =MAX_ROWID ){.  
22a60 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
22a70 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
22a80 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
22a90 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20           v++;   
22aa0 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d  /* IMP: R-29538-
22ab0 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20  34987 */.       
22ac0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
22ad0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
22ae0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
22af0 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ENT.    if( pOp-
22b00 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  >p3 ){.      /* 
22b10 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
22b20 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
22b30 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
22b40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
22b50 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
22b60 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
22b70 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
22b80 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
22b90 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
22ba0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
22bb0 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  t);.        /* A
22bc0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
22bd0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
22be0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
22bf0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
22c00 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
22c10 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
22c20 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
22c30 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d  Op->p3];.      }
22c40 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
22c50 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
22c60 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
22c70 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
22c80 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
22c90 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
22ca0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
22cb0 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
22cc0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
22cd0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
22ce0 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20  nge(p, pMem);.  
22cf0 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
22d00 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
22d10 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52  Mem) );..      R
22d20 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
22d30 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
22d40 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
22d50 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
22d60 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  m);.      assert
22d70 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
22d80 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
22d90 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
22da0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
22db0 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
22dc0 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
22dd0 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
22de0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
22df0 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
22e00 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32  ;   /* IMP: R-12
22e10 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20  275-61338 */.   
22e20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
22e30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
22e40 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
22e50 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
22e60 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65  .        v = pMe
22e70 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
22e80 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e    }.      pMem->
22e90 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23  u.i = v;.    }.#
22ea0 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43  endif.    if( pC
22eb0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
22ec0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
22ed0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
22ee0 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
22ef0 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
22f00 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
22f10 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
22f20 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
22f30 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
22f40 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
22f50 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
22f60 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
22f70 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
22f80 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
22f90 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
22fa0 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
22fb0 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
22fc0 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
22fd0 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
22fe0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22ff0 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
23000 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
23010 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
23020 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
23030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23040 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
23050 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
23060 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20   */.      cnt = 
23070 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  0;.      do{.   
23080 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
23090 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
230a0 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
230b0 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
230c0 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e  >1); v++;  /* En
230d0 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67  sure that v is g
230e0 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
230f0 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65   */.      }while
23100 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65  (  ((rc = sqlite
23110 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
23120 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
23130 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a  sor, 0, (u64)v,.
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23170 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49   0, &res))==SQLI
23180 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20  TE_OK).         
23190 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20     && (res==0). 
231a0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b             && (+
231b0 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20  +cnt<100));.    
231c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
231d0 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
231e0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
231f0 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
23200 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30  IMP: R-38219-530
23210 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f  02 */.        go
23220 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23230 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
23240 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30       assert( v>0
23250 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30   );  /* EV: R-40
23260 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20  812-03570 */.   
23270 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72   }.    pC->defer
23280 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
23290 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
232a0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
232b0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
232c0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
232d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
232e0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
232f0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
23300 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61   intkey=r[P3] da
23310 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57  ta=r[P2].**.** W
23320 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e  rite an entry in
23330 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  to the table of 
23340 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65  cursor P1.  A ne
23350 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72  w entry is.** cr
23360 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73  eated if it does
23370 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  n't already exis
23380 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f  t or the data fo
23390 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a  r an existing.**
233a0 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72   entry is overwr
233b0 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61  itten.  The data
233c0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45   is the value ME
233d0 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e  M_Blob stored in
233e0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
233f0 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
23400 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
23410 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
23420 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d  y must.** be a M
23430 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  EM_Int..**.** If
23440 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
23450 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
23460 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
23470 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
23480 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
23490 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
234a0 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
234b0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
234c0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
234d0 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
234e0 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
234f0 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
23500 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
23510 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
23520 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
23530 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
23540 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
23550 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
23560 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
23570 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  g of P5 is set a
23580 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  nd if the result
23590 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20   of.** the last 
235a0 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28  seek operation (
235b0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61  OP_NotExists) wa
235c0 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65  s a success, the
235d0 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  n this.** operat
235e0 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74  ion will not att
235f0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
23600 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77   appropriate row
23610 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a   before doing.**
23620 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20   the insert but 
23630 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65  will instead ove
23640 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74  rwrite the row t
23650 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
23660 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70  s.** currently p
23670 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65  ointing to.  Pre
23680 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69  sumably, the pri
23690 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  or OP_NotExists 
236a0 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c  opcode.** has al
236b0 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64  ready positioned
236c0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72   the cursor corr
236d0 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20  ectly.  This is 
236e0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  an optimization.
236f0 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70  ** that boosts p
23700 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76  erformance by av
23710 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74  oiding redundant
23720 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   seeks..**.** If
23730 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
23740 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
23750 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
23760 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
23770 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
23780 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
23790 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
237a0 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
237b0 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
237c0 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
237d0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
237e0 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
237f0 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
23800 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
23810 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
23820 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
23830 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  t to a string co
23840 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
23850 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d  le-name, or.** m
23860 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
23870 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  t is not NULL, t
23880 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
23890 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33  ook .** (sqlite3
238a0 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
238b0 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c  ) is invoked fol
238c0 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
238d0 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
238e0 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
238f0 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
23900 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
23910 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
23920 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
23930 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
23940 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
23950 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
23960 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
23970 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
23980 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
23990 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
239a0 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
239b0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
239c0 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
239d0 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
239e0 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
239f0 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
23a00 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
23a10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
23a20 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
23a30 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
23a40 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
23a50 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
23a60 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
23a70 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
23a80 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
23a90 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
23aa0 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64  is:  intkey=P3 d
23ab0 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
23ac0 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
23ad0 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
23ae0 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
23af0 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
23b00 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
23b10 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
23b20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
23b30 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
23b40 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
23b50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
23b60 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
23b70 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
23b80 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
23b90 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
23ba0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
23bb0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
23bc0 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
23bd0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
23be0 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
23bf0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
23c00 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
23c10 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
23c20 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
23c30 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
23c40 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56   inserted */.  V
23c50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
23c60 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
23c70 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
23c80 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
23c90 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
23ca0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
23cb0 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20  r of zero-bytes 
23cc0 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69  to append */.  i
23cd0 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
23ce0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
23cf0 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
23d00 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
23d10 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
23d20 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
23d30 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
23d40 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
23d50 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f  ate hook */.  co
23d60 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20  nst char *zTbl; 
23d70 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20  /* Table name - 
23d80 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61  used by the opda
23d90 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74  te hook */.  int
23da0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f   op;           /
23db0 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64  * Opcode for upd
23dc0 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45  ate hook: SQLITE
23dd0 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54  _UPDATE or SQLIT
23de0 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70  E_INSERT */..  p
23df0 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
23e00 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
23e10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23e20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23e30 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
23e40 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
23e50 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23e60 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23e70 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23e80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
23e90 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
23ea0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
23eb0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
23ec0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
23ed0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
23ee0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
23ef0 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
23f00 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  a);..  if( pOp->
23f10 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
23f20 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20  t ){.    pKey = 
23f30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
23f40 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
23f50 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
23f60 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
23f70 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79   memIsValid(pKey
23f80 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
23f90 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
23fa0 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79   pKey);.    iKey
23fb0 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
23fc0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
23fd0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
23fe0 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
23ff0 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e      iKey = pOp->
24000 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  p3;.  }..  if( p
24010 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
24020 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
24030 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f  ange++;.  if( pO
24040 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c  p->p5 & OPFLAG_L
24050 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c  ASTROWID ) db->l
24060 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
24070 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69  owid = iKey;.  i
24080 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
24090 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
240a0 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a    pData->z = 0;.
240b0 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30      pData->n = 0
240c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
240d0 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c  ssert( pData->fl
240e0 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
240f0 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a  MEM_Str) );.  }.
24100 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28    seekResult = (
24110 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
24120 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
24130 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
24140 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44  t : 0);.  if( pD
24150 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
24160 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65  _Zero ){.    nZe
24170 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a  ro = pData->u.nZ
24180 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ero;.  }else{.  
24190 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d    nZero = 0;.  }
241a0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
241b0 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
241c0 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  c.pCursor, 0, iK
241d0 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
241f0 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
24200 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50     (pOp->p5 & OP
24230 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c  FLAG_APPEND)!=0,
24240 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b   seekResult.  );
24250 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
24260 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
24270 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24280 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
24290 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
242a0 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
242b0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
242c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
242d0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
242e0 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
242f0 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   ){.    zDb = db
24300 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
24310 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d  Name;.    zTbl =
24320 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
24330 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  op = ((pOp->p5 &
24340 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
24350 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
24360 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  E : SQLITE_INSER
24370 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  T);.    assert( 
24380 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
24390 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
243a0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
243b0 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20  teArg, op, zDb, 
243c0 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
243d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
243e0 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >=0 );.  }.  bre
243f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24400 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a  : Delete P1 P2 *
24410 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c   P4 P5.**.** Del
24420 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61  ete the record a
24430 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63  t which the P1 c
24440 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74  ursor is current
24450 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ly pointing..**.
24460 2a 2a 20 49 66 20 74 68 65 20 50 35 20 70 61 72  ** If the P5 par
24470 61 6d 65 74 65 72 20 69 73 20 6e 6f 6e 2d 7a 65  ameter is non-ze
24480 72 6f 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77  ro, the cursor w
24490 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
244a0 74 69 6e 67 20 61 74 20 0a 2a 2a 20 65 69 74 68  ting at .** eith
244b0 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
244c0 68 65 20 70 72 65 76 69 6f 75 73 20 72 65 63 6f  he previous reco
244d0 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
244e0 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 0a   If it is left .
244f0 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ** pointing at t
24500 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
24510 74 68 65 6e 20 74 68 65 20 6e 65 78 74 20 4e 65  then the next Ne
24520 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
24530 69 6c 6c 20 62 65 20 61 20 0a 2a 2a 20 6e 6f 2d  ill be a .** no-
24540 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c  op. As a result,
24550 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 69 74   in this case it
24560 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
24570 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77   a record from w
24580 69 74 68 69 6e 20 61 0a 2a 2a 20 4e 65 78 74 20  ithin a.** Next 
24590 6c 6f 6f 70 2e 20 49 66 20 50 35 20 69 73 20 7a  loop. If P5 is z
245a0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 75  ero, then the cu
245b0 72 73 6f 72 20 69 73 20 6c 65 66 74 20 69 6e 20  rsor is left in 
245c0 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61  an undefined sta
245d0 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  te..**.** If the
245e0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
245f0 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65  flag of P2 is se
24600 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
24610 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
24620 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
24630 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
24640 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
24650 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
24660 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
24670 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
24680 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
24690 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
246a0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
246b0 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d  en it is the nam
246c0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
246d0 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69  hat P1 is.** poi
246e0 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75  nting to.  The u
246f0 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20  pdate hook will 
24700 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69  be invoked, if i
24710 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20  t exists..** If 
24720 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
24730 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f  hen the P1 curso
24740 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
24750 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75   positioned.** u
24760 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
24770 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
24780 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
24790 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
247a0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
247b0 72 20 2a 70 43 3b 0a 20 20 75 38 20 68 61 73 55  r *pC;.  u8 hasU
247c0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3b 0a 0a  pdateCallback;..
247d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
247e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
247f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24800 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24810 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24820 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
24830 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
24840 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
24850 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24860 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
24870 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24880 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
24890 3d 30 20 29 3b 0a 0a 20 20 68 61 73 55 70 64 61  =0 );..  hasUpda
248a0 74 65 43 61 6c 6c 62 61 63 6b 20 3d 20 64 62 2d  teCallback = db-
248b0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
248c0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26   && pOp->p4.z &&
248d0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20   pC->isTable;.  
248e0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 68  if( pOp->p5 && h
248f0 61 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  asUpdateCallback
24900 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
24910 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
24920 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 70 43 2d  uc.pCursor, &pC-
24930 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a  >movetoTarget);.
24940 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49    }..#ifdef SQLI
24950 54 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54 68  TE_DEBUG.  /* Th
24960 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  e seek operation
24970 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64   that positioned
24980 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f   the cursor prio
24990 72 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20 77  r to OP_Delete w
249a0 69 6c 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61 6c  ill.  ** have al
249b0 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d  so set the pC->m
249c0 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c  ovetoTarget fiel
249d0 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  d to the rowid o
249e0 66 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 20  f the row that. 
249f0 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65 6c   ** is being del
24a00 65 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 70 4f  eted */.  if( pO
24a10 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69  p->p4.z && pC->i
24a20 73 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70  sTable && pOp->p
24a30 35 3d 3d 30 20 29 7b 0a 20 20 20 20 69 36 34 20  5==0 ){.    i64 
24a40 69 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 73 71  iKey = 0;.    sq
24a50 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
24a60 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
24a70 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  , &iKey);.    as
24a80 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f  sert( pC->moveto
24a90 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 20  Target==iKey ); 
24aa0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20  .  }.#endif. .  
24ab0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24ac0 65 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70  eDelete(pC->uc.p
24ad0 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29  Cursor, pOp->p5)
24ae0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
24af0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24b00 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
24b10 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
24b20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
24b30 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
24b40 5f 4f 4b 20 26 26 20 68 61 73 55 70 64 61 74 65  _OK && hasUpdate
24b50 43 61 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Callback ){.    
24b60 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
24b70 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
24b80 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  rg, SQLITE_DELET
24b90 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E,.             
24ba0 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61             db->a
24bb0 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
24bc0 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43  e, pOp->p4.z, pC
24bd0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
24be0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
24bf0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
24c00 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
24c10 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
24c20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
24c30 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
24c40 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
24c50 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
24c60 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
24c70 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
24c80 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
24c90 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
24ca0 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
24cb0 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
24cc0 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
24cd0 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
24ce0 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
24cf0 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
24d00 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
24d10 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
24d20 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
24d30 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
24d40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
24d50 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
24d60 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
24d70 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
24d80 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
24d90 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
24da0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
24db0 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
24dc0 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
24dd0 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d  s:  if key(P1)!=
24de0 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67  trim(r[P3],P4) g
24df0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  oto P2.**.** P1 
24e00 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
24e10 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  or. This instruc
24e20 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20  tion compares a 
24e30 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a  prefix of the.**
24e40 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20   record blob in 
24e50 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69  register P3 agai
24e60 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  nst a prefix of 
24e70 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a  the entry that .
24e80 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75  ** the sorter cu
24e90 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70  rsor currently p
24ea0 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20  oints to.  Only 
24eb0 74 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65  the first P4 fie
24ec0 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20  lds.** of r[P3] 
24ed0 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72  and the sorter r
24ee0 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72  ecord are compar
24ef0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  ed..**.** If eit
24f00 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f  her P3 or the so
24f10 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20  rter contains a 
24f20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74  NULL in one of t
24f30 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74  heir significant
24f40 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20  .** fields (not 
24f50 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20  counting the P4 
24f60 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
24f70 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f  d which are igno
24f80 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65  red) then.** the
24f90 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
24fa0 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75  ssumed to be equ
24fb0 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74  al..**.** Fall t
24fc0 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69  hrough to next i
24fd0 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68  nstruction if th
24fe0 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f  e two records co
24ff0 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a  mpare equal to.*
25000 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a  * each other.  J
25010 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
25020 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e  y are different.
25030 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
25040 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56  erCompare: {.  V
25050 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
25060 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
25070 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d  nKeyCol;..  pC =
25080 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25090 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
250a0 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
250b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
250c0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
250d0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
250e0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79  pOp->p3];.  nKey
250f0 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Col = pOp->p4.i;
25100 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
25110 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
25120 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20  rterCompare(pC, 
25130 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26  pIn3, nKeyCol, &
25140 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  res);.  VdbeBran
25150 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
25160 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
25170 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
25180 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20    break;.};../* 
25190 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61  Opcode: SorterDa
251a0 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ta P1 P2 P3 * *.
251b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
251c0 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
251d0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
251e0 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74  r P2 the current
251f0 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72   sorter data for
25200 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50   sorter cursor P
25210 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72  1..** Then clear
25220 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64   the column head
25230 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73  er cache on curs
25240 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P3..**.** Thi
25250 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d  s opcode is norm
25260 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65  ally use to move
25270 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66   a record out of
25280 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20   the sorter and 
25290 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74  into.** a regist
252a0 65 72 20 74 68 61 74 20 69 73 20 74 68 65 20 73  er that is the s
252b0 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73 65 75  ource for a pseu
252c0 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20  do-table cursor 
252d0 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
252e0 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68   OpenPseudo.  Th
252f0 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  at pseudo-table 
25300 63 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e  cursor is the on
25310 65 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69  e that is identi
25320 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d  fied by.** param
25330 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69  eter P3.  Cleari
25340 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e  ng the P3 column
25350 20 63 61 63 68 65 20 61 73 20 70 61 72 74 20 6f   cache as part o
25360 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61  f this opcode sa
25370 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68  ves.** us from h
25380 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61  aving to issue a
25390 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f   separate NullRo
253a0 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  w instruction to
253b0 20 63 6c 65 61 72 20 74 68 61 74 20 63 61 63 68   clear that cach
253c0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  e..*/.case OP_So
253d0 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64  rterData: {.  Vd
253e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
253f0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
25400 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70  p->p2];.  pC = p
25410 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25420 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
25430 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63  rter(pC) );.  rc
25440 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
25450 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70  rterRowkey(pC, p
25460 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Out);.  assert( 
25470 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc!=SQLITE_OK ||
25480 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20   (pOut->flags & 
25490 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61  MEM_Blob) );.  a
254a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
254b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
254c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 2d 3e  nCursor );.  p->
254d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e  apCsr[pOp->p3]->
254e0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
254f0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
25500 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25510 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
25520 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
25530 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
25540 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
25550 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
25560 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
25570 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
25580 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
25590 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
255a0 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
255b0 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
255c0 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
255d0 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
255e0 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
255f0 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
25600 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
25610 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
25620 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
25630 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
25640 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
25650 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
25660 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
25670 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
25680 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
25690 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
256a0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a  psis: r[P2]=key.
256b0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
256c0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
256d0 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65   complete row ke
256e0 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  y for cursor P1.
256f0 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
25700 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
25710 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
25720 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69   The key is copi
25730 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
25740 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
25750 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
25760 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
25770 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
25780 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
25790 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
257a0 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
257b0 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
257c0 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
257d0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
257e0 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
257f0 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65   OP_RowKey:.case
25800 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
25810 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25820 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
25830 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69  sr;.  u32 n;.  i
25840 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20  64 n64;..  pOut 
25850 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
25860 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
25870 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
25880 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
25890 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
258a0 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
258b0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
258c0 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
258d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
258e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
258f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25900 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25910 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25920 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
25930 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
25940 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
25950 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
25960 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20  ter(pC)==0 );.  
25970 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
25980 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ble || pOp->opco
25990 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de!=OP_RowData )
259a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
259b0 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f  isTable==0 || pO
259c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
259d0 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
259e0 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
259f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25a00 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
25a10 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
25a20 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20  ->uc.pCursor;.. 
25a30 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
25a40 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
25a50 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
25a60 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
25a70 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52  sts or.  ** OP_R
25a80 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
25a90 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
25aa0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74  g instructions t
25ab0 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
25ac0 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  date.  ** the cu
25ad0 72 73 6f 72 2e 20 20 49 66 20 74 68 69 73 20 77  rsor.  If this w
25ae0 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73  here not the cas
25af0 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c  e, on of the fol
25b00 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 73  lowing assert()s
25b10 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c  .  ** would fail
25b20 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65  .  Should this e
25b30 76 65 72 20 63 68 61 6e 67 65 20 28 62 65 63 61  ver change (beca
25b40 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69  use of changes i
25b50 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20  n the code.  ** 
25b60 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20  generator) then 
25b70 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65  the fix would be
25b80 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c   to insert a cal
25b90 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
25ba0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
25bb0 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  o()..  */.  asse
25bc0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25bd0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
25be0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
25bf0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
25c00 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30  (pCrsr) );.#if 0
25c10 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65    /* Not require
25c20 64 20 64 75 65 20 74 6f 20 74 68 65 20 70 72 65  d due to the pre
25c30 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28  vious to assert(
25c40 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a  ) statements */.
25c50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
25c60 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
25c70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  C);.  if( rc!=SQ
25c80 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
25c90 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
25ca0 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  r;.#endif..  if(
25cb0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
25cc0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
25cd0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
25ce0 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
25cf0 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  ) sqlite3BtreeKe
25d00 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36  ySize(pCrsr, &n6
25d10 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  4);.    assert( 
25d20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
25d30 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61      /* True beca
25d40 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
25d50 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
25d60 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e   */.    if( n64>
25d70 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
25d80 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
25d90 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
25da0 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
25db0 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20   n = (u32)n64;. 
25dc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f   }else{.    VVA_
25dd0 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
25de0 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
25df0 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
25e00 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
25e10 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44  TE_OK );    /* D
25e20 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
25e30 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28   fail */.    if(
25e40 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
25e50 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
25e60 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
25e70 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
25e80 20 20 20 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63     }.  }.  testc
25e90 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69  ase( n==0 );.  i
25ea0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
25eb0 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
25ec0 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29  pOut, MAX(n,32))
25ed0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
25ee0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  mem;.  }.  pOut-
25ef0 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74  >n = n;.  MemSet
25f00 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
25f10 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20  EM_Blob);.  if( 
25f20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
25f30 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
25f40 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72  e3BtreeKey(pCrsr
25f50 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
25f60 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
25f70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25f80 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e  Data(pCrsr, 0, n
25f90 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a  , pOut->z);.  }.
25fa0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
25fb0 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
25fc0 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
25fd0 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
25fe0 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
25ff0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
26000 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
26010 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
26020 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
26030 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
26040 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
26050 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
26060 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
26070 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
26080 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
26090 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
260a0 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
260b0 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
260c0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
260d0 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
260e0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
260f0 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
26100 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
26110 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
26120 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
26130 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
26140 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
26150 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
26160 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
26170 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
26180 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
26190 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
261a0 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
261b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
261c0 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
261d0 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
261e0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
261f0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
26200 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
26210 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20  Module;..  pOut 
26220 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
26230 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
26240 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26250 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26260 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
26270 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26280 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26290 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
262a0 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
262b0 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
262c0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
262d0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
262e0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
262f0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
26300 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
26310 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72  e if( pC->deferr
26320 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20  edMoveto ){.    
26330 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  v = pC->movetoTa
26340 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rget;.#ifndef SQ
26350 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
26360 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
26370 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
26380 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b  =CURTYPE_VTAB ){
26390 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
263a0 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a  >uc.pVCur!=0 );.
263b0 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
263c0 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
263d0 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
263e0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
263f0 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
26400 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
26410 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
26420 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56  xRowid(pC->uc.pV
26430 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71  Cur, &v);.    sq
26440 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
26450 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
26460 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
26470 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
26480 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  BLE */.  }else{.
26490 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
264a0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
264b0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61  E_BTREE );.    a
264c0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
264d0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
264e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
264f0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
26500 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
26510 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26520 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
26530 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
26540 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
26550 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
26560 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
26570 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
26580 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
26590 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 76  ->uc.pCursor, &v
265a0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
265b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
265c0 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
265d0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52  cause of CursorR
265e0 65 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a  estore() above *
265f0 2f 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  /.  }.  pOut->u.
26600 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
26610 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
26620 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
26630 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
26640 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
26650 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
26660 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
26670 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
26680 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
26690 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
266a0 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
266b0 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
266c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
266d0 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
266e0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
266f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
26700 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
26710 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
26720 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
26730 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
26740 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
26750 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
26760 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
26770 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
26780 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
26790 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20  RTYPE_BTREE ){. 
267a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
267b0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
267c0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
267d0 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
267e0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
267f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26800 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20  Opcode: Last P1 
26810 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
26820 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
26830 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
26840 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74  umn or Prev inst
26850 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
26860 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
26870 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
26880 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
26890 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
268a0 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
268b0 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
268c0 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
268d0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
268e0 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
268f0 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
26900 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
26910 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
26920 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
26930 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
26940 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
26950 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
26960 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
26970 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
26980 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
26990 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
269a0 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
269b0 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
269c0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
269d0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
269e0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
269f0 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
26a00 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
26a10 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
26a20 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
26a30 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
26a40 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
26a50 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
26a60 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26a70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26a80 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26a90 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26aa0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
26ab0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
26ac0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
26ad0 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
26ae0 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
26af0 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
26b00 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
26b10 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
26b20 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
26b30 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
26b40 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
26b50 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
26b60 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
26b70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
26b80 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
26b90 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
26ba0 20 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66   pOp->p3;.#ifdef
26bb0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
26bc0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
26bd0 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69  Last;.#endif.  i
26be0 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a  f( pOp->p2>0 ){.
26bf0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
26c00 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
26c10 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74     if( res ) got
26c20 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
26c30 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
26c40 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
26c50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
26c60 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
26c70 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
26c80 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
26c90 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
26ca0 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
26cb0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
26cc0 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
26cd0 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
26ce0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
26cf0 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
26d00 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
26d10 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
26d20 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
26d30 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
26d40 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
26d50 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
26d60 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
26d70 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
26d80 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
26d90 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
26da0 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
26db0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
26dc0 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
26dd0 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
26de0 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
26df0 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
26e00 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
26e10 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
26e20 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
26e30 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
26e40 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
26e50 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
26e60 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
26e70 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
26e80 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
26e90 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
26ea0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
26eb0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
26ec0 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
26ed0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
26ee0 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
26ef0 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
26f00 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
26f10 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
26f20 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
26f30 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
26f40 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
26f50 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
26f60 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
26f70 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
26f80 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
26f90 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
26fa0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
26fb0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
26fc0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
26fd0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
26fe0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
26ff0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
27000 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
27010 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
27020 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
27030 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
27040 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27050 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
27060 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
27070 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
27080 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
27090 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
270a0 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
270b0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
270c0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
270d0 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
270e0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
270f0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
27100 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
27110 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
27120 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
27130 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
27140 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
27150 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
27160 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
27170 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
27180 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
27190 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
271a0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
271b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
271c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
271d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
271e0 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
271f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
27200 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
27210 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
27220 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
27230 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
27240 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
27250 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
27260 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
27270 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
27280 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
27290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
272a0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
272b0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
272c0 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  );.    pCrsr = p
272d0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
272e0 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
272f0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
27300 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
27310 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
27320 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27330 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
27340 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
27350 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
27360 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
27370 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72  (u8)res;.  asser
27380 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
27390 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
273a0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
273b0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
273c0 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
273d0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
273e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
273f0 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33  e: Next P1 P2 P3
27400 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76   P4 P5.**.** Adv
27410 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
27420 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
27430 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
27440 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
27450 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
27460 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
27470 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
27480 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
27490 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
274a0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
274b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
274c0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
274d0 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
274e0 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
274f0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
27500 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65  P2..**.** The Ne
27510 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
27520 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
27530 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65  g an SeekGT, See
27540 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65  kGE, or.** OP_Re
27550 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64  wind opcode used
27560 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
27570 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69   cursor.  Next i
27580 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
27590 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c   to follow SeekL
275a0 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50  T, SeekLE, or OP
275b0 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  _Last..**.** The
275c0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
275d0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
275e0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
275f0 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73  o-table.  P1 mus
27600 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f  t have.** been o
27610 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74  pened prior to t
27620 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68  his opcode or th
27630 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73  e program will s
27640 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54  egfault..**.** T
27650 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
27660 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
27670 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
27680 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
27690 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
276a0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
276b0 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
276c0 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
276d0 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
276e0 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
276f0 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
27700 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
27710 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
27720 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
27730 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
27740 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
27750 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
27760 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
27770 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
27780 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
27790 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
277a0 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
277b0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
277c0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
277d0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
277e0 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
277f0 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
27800 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
27810 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
27820 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a  , NextIfOpen.*/.
27830 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49  /* Opcode: NextI
27840 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
27850 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
27860 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
27870 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65  t like Next exce
27880 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
27890 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
278a0 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
278b0 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70   no-op..*/./* Op
278c0 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32  code: Prev P1 P2
278d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
278e0 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
278f0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
27900 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
27910 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
27920 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
27930 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
27940 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
27950 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
27960 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
27970 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
27980 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
27990 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
279a0 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
279b0 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
279c0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
279d0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
279e0 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  **.** The Prev o
279f0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
27a00 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
27a10 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
27a20 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f   or.** OP_Last o
27a30 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
27a40 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
27a50 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20  r.  Prev is not 
27a60 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
27a70 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65  llow SeekGT, See
27a80 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e  kGE, or OP_Rewin
27a90 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  d..**.** The P1 
27aa0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
27ab0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
27ac0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
27ad0 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a  ble.  If P1 is.*
27ae0 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20  * not open then 
27af0 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
27b00 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
27b10 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
27b20 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
27b30 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
27b40 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
27b50 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
27b60 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
27b70 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
27b80 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
27b90 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
27ba0 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
27bb0 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
27bc0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
27bd0 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
27be0 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
27bf0 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
27c00 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
27c10 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
27c20 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
27c30 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
27c40 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
27c50 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
27c60 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
27c70 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
27c80 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
27c90 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
27ca0 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
27cb0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
27cc0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
27cd0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
27ce0 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32  PrevIfOpen P1 P2
27cf0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
27d00 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
27d10 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76  s just like Prev
27d20 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
27d30 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
27d40 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
27d50 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
27d60 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65  case OP_SorterNe
27d70 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a  xt: {  /* jump *
27d80 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
27d90 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  pC;.  int res;..
27da0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
27db0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
27dc0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
27dd0 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
27de0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
27df0 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20  eSorterNext(db, 
27e00 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74  pC, &res);.  got
27e10 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73  o next_tail;.cas
27e20 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a  e OP_PrevIfOpen:
27e30 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
27e40 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65  ase OP_NextIfOpe
27e50 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
27e60 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
27e70 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72  pOp->p1]==0 ) br
27e80 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
27e90 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f  hrough */.case O
27ea0 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
27eb0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
27ec0 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20   OP_Next:       
27ed0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
27ee0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27ef0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27f00 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
27f10 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72  sert( pOp->p5<Ar
27f20 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
27f30 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
27f40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
27f50 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70  ;.  res = pOp->p
27f60 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  3;.  assert( pC!
27f70 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27f80 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
27f90 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
27fa0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
27fb0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
27fc0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d  ;.  assert( res=
27fd0 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26  =0 || (res==1 &&
27fe0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29   pC->isTable==0)
27ff0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
28000 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65  res==1 );.  asse
28010 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
28020 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
28030 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
28040 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
28050 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28060 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
28070 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
28080 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
28090 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20  eePrevious );.  
280a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
280b0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
280c0 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
280d0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
280e0 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
280f0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
28100 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
28110 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
28120 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
28130 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20  eePrevious);..  
28140 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  /* The Next opco
28150 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
28160 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65  after SeekGT, Se
28170 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64  ekGE, and Rewind
28180 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20  ..  ** The Prev 
28190 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75  opcode is only u
281a0 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54  sed after SeekLT
281b0 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61  , SeekLE, and La
281c0 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  st. */.  assert(
281d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
281e0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Next || pOp->op
281f0 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f  code!=OP_NextIfO
28200 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  pen.       || pC
28210 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
28220 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
28230 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
28240 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
28250 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
28260 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
28270 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28  ound);.  assert(
28280 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
28290 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Prev || pOp->op
282a0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f  code!=OP_PrevIfO
282b0 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  pen.       || pC
282c0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
282d0 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kLT || pC->seekO
282e0 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20  p==OP_SeekLE.   
282f0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
28300 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20  p==OP_Last );.. 
28310 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41   rc = pOp->p4.xA
28320 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43  dvance(pC->uc.pC
28330 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65  ursor, &res);.ne
28340 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63  xt_tail:.  pC->c
28350 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
28360 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65  HE_STALE;.  Vdbe
28370 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d  BranchTaken(res=
28380 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
28390 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  ==0 ){.    pC->n
283a0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
283b0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
283c0 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
283d0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
283e0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
283f0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
28400 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
28410 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
28420 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c  interrupt;.  }el
28430 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  se{.    pC->null
28440 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67  Row = 1;.  }.  g
28450 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
28460 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
28470 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
28480 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
28490 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
284a0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
284b0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
284c0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
284d0 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
284e0 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
284f0 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
28500 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
28510 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
28520 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
28530 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
28540 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
28550 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
28560 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
28570 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
28580 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
28590 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
285a0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
285b0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
285c0 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
285d0 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
285e0 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
285f0 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
28600 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
28610 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
28620 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
28630 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
28640 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
28650 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
28660 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
28670 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
28680 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
28690 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74  ESULT bit set, t
286a0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
286b0 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74  ust have.** just
286c0 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20   done a seek to 
286d0 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74  the spot where t
286e0 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  he new entry is 
286f0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a  to be inserted..
28700 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f  ** This flag avo
28710 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74  ids doing an ext
28720 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54  ra seek..**.** T
28730 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
28740 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
28750 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
28760 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
28770 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
28780 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
28790 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
287a0 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
287b0 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
287c0 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
287d0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
287e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
287f0 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63  .  int nKey;.  c
28800 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
28810 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
28820 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
28830 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
28840 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
28850 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
28860 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
28870 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
28880 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
28890 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
288a0 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  rt) );.  pIn2 = 
288b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
288c0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
288d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
288e0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
288f0 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
28900 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
28910 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  +;.  assert( pC-
28920 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28930 50 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d  PE_BTREE || pOp-
28940 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
28950 65 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73  erInsert );.  as
28960 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
28970 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45  e==0 );.  rc = E
28980 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
28990 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
289a0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20  E_OK ){.    if( 
289b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
289c0 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a  SorterInsert ){.
289d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
289e0 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74  e3VdbeSorterWrit
289f0 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20  e(pC, pIn2);.   
28a00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b   }else{.      nK
28a10 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
28a20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d      zKey = pIn2-
28a30 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  >z;.      rc = s
28a40 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
28a50 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
28a60 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22  , zKey, nKey, ""
28a70 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c  , 0, 0, pOp->p3,
28a80 20 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f   .          ((pO
28a90 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
28aa0 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
28ab0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
28ac0 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b   0).          );
28ad0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
28ae0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
28af0 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43  o==0 );.      pC
28b00 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
28b10 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
28b20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
28b30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
28b40 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
28b50 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
28b60 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a  : key=r[P2@P3].*
28b70 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
28b80 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
28b90 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
28ba0 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
28bb0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
28bc0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
28bd0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
28be0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
28bf0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
28c00 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
28c10 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
28c20 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
28c30 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
28c40 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
28c50 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
28c60 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
28c70 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
28c80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
28c90 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
28ca0 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  2+pOp->p3<=(p->n
28cb0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
28cc0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
28cd0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28ce0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28cf0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28d00 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28d10 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
28d20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
28d30 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
28d40 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
28d50 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
28d60 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
28d70 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
28d80 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
28d90 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
28da0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
28db0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
28dc0 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66  pOp->p3;.  r.def
28dd0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72  ault_rc = 0;.  r
28de0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
28df0 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53  p->p2];.#ifdef S
28e00 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
28e10 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
28e20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
28e30 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
28e40 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
28e50 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63  ); }.#endif.  rc
28e60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
28e70 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
28e80 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
28e90 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  res);.  if( rc==
28ea0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
28eb0 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
28ec0 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
28ed0 74 65 28 70 43 72 73 72 2c 20 30 29 3b 0a 20 20  te(pCrsr, 0);.  
28ee0 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  }.  assert( pC->
28ef0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
28f00 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  0 );.  pC->cache
28f10 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
28f20 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
28f30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
28f40 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
28f50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
28f60 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
28f70 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
28f80 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
28f90 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
28fa0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
28fb0 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
28fc0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
28fd0 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
28fe0 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
28ff0 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
29000 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
29010 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
29020 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
29030 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
29040 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
29050 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
29060 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
29070 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
29080 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
29090 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42    /* out2 */.  B
290a0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
290b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
290c0 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a  ;.  i64 rowid;..
290d0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
290e0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
290f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29100 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
29110 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
29120 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
29130 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
29140 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
29150 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
29160 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
29170 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
29180 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
29190 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
291a0 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
291b0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
291c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
291d0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73  able==0 );.  ass
291e0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
291f0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20  dMoveto==0 );.. 
29200 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75   /* sqlite3VbeCu
29210 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61  rsorRestore() ca
29220 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74  n only fail if t
29230 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65  he record has be
29240 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20  en deleted.  ** 
29250 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74  out from under t
29260 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74  he cursor.  That
29270 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70   will never happ
29280 65 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52 6f  end for an IdxRo
29290 77 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c  wid.  ** opcode,
292a0 20 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45 52   hence the NEVER
292b0 28 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20 63  () arround the c
292c0 68 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74 75  heck of the retu
292d0 72 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20  rn value..  */. 
292e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
292f0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
29300 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  C);.  if( NEVER(
29310 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
29320 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
29330 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28  to_error;..  if(
29340 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b   !pC->nullRow ){
29350 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20  .    rowid = 0; 
29360 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
29370 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
29380 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
29390 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
293a0 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
293b0 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77  (db, pCrsr, &row
293c0 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  id);.    if( rc!
293d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
293e0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
293f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
29400 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
29410 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f   = rowid;.    pO
29420 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
29430 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  Int;.  }.  break
29440 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29450 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
29460 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
29470 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
29480 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
29490 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
294a0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
294b0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
294c0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
294d0 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
294e0 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
294f0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
29500 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
29510 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
29520 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
29530 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
29540 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
29550 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
29560 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
29570 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
29580 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
29590 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
295a0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
295b0 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
295c0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
295d0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
295e0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
295f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
29600 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54  /* Opcode: IdxGT
29610 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
29620 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
29630 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
29640 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
29650 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
29660 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
29670 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
29680 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
29690 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
296a0 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  EY.  Compare thi
296b0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
296c0 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
296d0 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
296e0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
296f0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
29700 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
29710 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73  ROWID .** fields
29720 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a   at the end..**.
29730 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
29740 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
29750 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
29760 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
29770 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
29780 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
29790 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
297a0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
297b0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
297c0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
297d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
297e0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
297f0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
29800 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
29810 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
29820 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
29830 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
29840 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
29850 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
29860 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
29870 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
29880 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
29890 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
298a0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
298b0 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
298c0 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
298d0 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
298e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
298f0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
29900 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
29910 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
29920 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
29930 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
29940 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
29950 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
29960 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20  * Opcode: IdxLE 
29970 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
29980 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
29990 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
299a0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
299b0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
299c0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
299d0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
299e0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
299f0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
29a00 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
29a10 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
29a20 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
29a30 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
29a40 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
29a50 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
29a60 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
29a70 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
29a80 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
29a90 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
29aa0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
29ab0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
29ac0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
29ad0 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a  lue then jump.**
29ae0 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
29af0 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
29b00 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
29b10 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
29b20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20  OP_IdxLE:       
29b30 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
29b40 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20  se OP_IdxGT:    
29b50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
29b60 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
29b70 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
29b80 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
29b90 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  E:  {       /* j
29ba0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
29bb0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
29bc0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
29bd0 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
29be0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
29bf0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
29c00 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
29c10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
29c20 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
29c30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
29c40 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
29c50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
29c60 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
29c70 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
29c80 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
29c90 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  !=0);.  assert( 
29ca0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
29cb0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
29cc0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
29cd0 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
29ce0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
29cf0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
29d00 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
29d10 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
29d20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
29d30 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66  )pOp->p4.i;.  if
29d40 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50  ( pOp->opcode<OP
29d50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73  _IdxLT ){.    as
29d60 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
29d70 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
29d80 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
29d90 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxGT );.    r.de
29da0 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
29db0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
29dc0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
29dd0 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
29de0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
29df0 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  LT );.    r.defa
29e00 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a  ult_rc = 0;.  }.
29e10 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
29e20 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
29e30 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
29e40 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
29e50 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
29e60 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
29e70 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
29e80 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
29e90 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   res = 0;  /* No
29ea0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
29eb0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
29ec0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
29ed0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
29ee0 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62  IdxKeyCompare(db
29ef0 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  , pC, &r, &res);
29f00 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49  .  assert( (OP_I
29f10 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxLE&1)==(OP_Idx
29f20 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78  LT&1) && (OP_Idx
29f30 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54  GE&1)==(OP_IdxGT
29f40 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f  &1) );.  if( (pO
29f50 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f  p->opcode&1)==(O
29f60 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20  P_IdxLT&1) ){.  
29f70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
29f80 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
29f90 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
29fa0 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
29fb0 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65  res = -res;.  }e
29fc0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
29fd0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
29fe0 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
29ff0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
2a000 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
2a010 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
2a020 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20  ken(res>0,2);.  
2a030 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f  if( res>0 ) goto
2a040 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
2a050 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a060 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
2a070 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
2a080 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
2a090 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
2a0a0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
2a0b0 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
2a0c0 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
2a0d0 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
2a0e0 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
2a0f0 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
2a100 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
2a110 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2a120 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
2a130 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
2a140 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
2a150 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
2a160 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2a170 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
2a180 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
2a190 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
2a1a0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
2a1b0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
2a1c0 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
2a1d0 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
2a1e0 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
2a1f0 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
2a200 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
2a210 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
2a220 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
2a230 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
2a240 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
2a250 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
2a260 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
2a270 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
2a280 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
2a290 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
2a2a0 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
2a2b0 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
2a2c0 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
2a2d0 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
2a2e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2a2f0 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
2a300 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
2a310 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
2a320 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
2a330 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
2a340 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
2a350 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
2a360 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
2a370 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
2a380 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2a390 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
2a3a0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
2a3b0 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
2a3c0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2a3d0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
2a3e0 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
2a3f0 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
2a400 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f  {     /* out2 */
2a410 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
2a420 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73   int iDb;..  ass
2a430 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2a440 3d 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  ==0 );.  pOut = 
2a450 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2a460 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
2a470 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2a480 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  ;.  if( db->nVdb
2a490 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65  eRead > db->nVDe
2a4a0 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72  stroy+1 ){.    r
2a4b0 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
2a4c0 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
2a4d0 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
2a4e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
2a4f0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
2a500 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2a510 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2a520 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69  k, iDb) );.    i
2a530 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  Moved = 0;  /* N
2a540 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
2a550 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2a560 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
2a570 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2a580 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
2a590 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
2a5a0 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
2a5b0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2a5c0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
2a5d0 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
2a5e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a5f0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
2a600 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2a610 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
2a620 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2a630 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2a640 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
2a650 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
2a660 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
2a670 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
2a680 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
2a690 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
2a6a0 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
2a6b0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
2a6c0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2a6d0 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
2a6e0 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
2a6f0 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
2a700 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
2a710 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2a720 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
2a730 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
2a740 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
2a750 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2a760 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2a770 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
2a780 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
2a790 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
2a7a0 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
2a7b0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
2a7c0 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
2a7d0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2a7e0 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
2a7f0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2a800 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
2a810 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2a820 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2a830 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
2a840 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
2a850 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2a860 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2a870 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2a880 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2a890 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2a8a0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2a8b0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2a8c0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2a8d0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
2a8e0 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
2a8f0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
2a900 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
2a910 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
2a920 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
2a930 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
2a940 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
2a950 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
2a960 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
2a970 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2a980 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2a990 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2a9a0 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
2a9b0 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
2a9c0 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
2a9d0 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
2a9e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
2a9f0 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
2aa00 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
2aa10 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2aa20 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2aa30 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
2aa40 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
2aa50 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
2aa60 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
2aa70 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
2aa80 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
2aa90 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2aaa0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2aab0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2aac0 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
2aad0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2aae0 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
2aaf0 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
2ab00 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
2ab10 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
2ab20 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
2ab30 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
2ab40 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
2ab50 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2ab60 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
2ab70 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2ab80 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
2ab90 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
2aba0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2abb0 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
2abc0 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
2abd0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
2abe0 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2abf0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
2ac00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
2ac10 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a  setSorter P1 * *
2ac20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
2ac30 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66  e all contents f
2ac40 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61  rom the ephemera
2ac50 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65  l table or sorte
2ac60 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65  r.** that is ope
2ac70 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a  n on cursor P1..
2ac80 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2ac90 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  e only works for
2aca0 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f   cursors used fo
2acb0 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a  r sorting and.**
2acc0 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f   opened with OP_
2acd0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72  OpenEphemeral or
2ace0 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a   OP_SorterOpen..
2acf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
2ad00 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65  Sorter: {.  Vdbe
2ad10 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20  Cursor *pC;. .  
2ad20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2ad30 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2ad40 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2ad50 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2ad60 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2ad70 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  pC!=0 );.  if( i
2ad80 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
2ad90 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f     sqlite3VdbeSo
2ada0 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43  rterReset(db, pC
2adb0 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20  ->uc.pSorter);. 
2adc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2add0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2ade0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2adf0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2ae00 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29  C->isEphemeral )
2ae10 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2ae20 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
2ae30 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  eOfCursor(pC->uc
2ae40 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  .pCursor);.  }. 
2ae50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2ae60 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
2ae70 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
2ae80 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2ae90 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
2aea0 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
2aeb0 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
2aec0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2aed0 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2aee0 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
2aef0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2af00 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
2af10 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2af20 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
2af30 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
2af40 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
2af50 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
2af60 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
2af70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
2af80 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
2af90 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
2afa0 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
2afb0 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
2afc0 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
2afd0 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
2afe0 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
2aff0 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
2b000 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
2b010 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
2b020 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
2b030 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
2b040 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
2b050 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
2b060 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b070 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
2b080 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
2b090 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69  te a new index i
2b0a0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2b0b0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2b0c0 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
2b0d0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2b0e0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
2b0f0 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
2b100 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
2b110 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
2b120 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2b130 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
2b140 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
2b150 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
2b160 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
2b170 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62   on OP_CreateTab
2b180 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
2b190 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
2b1a0 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2b1b0 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20  Index:          
2b1c0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73    /* out2 */.cas
2b1d0 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
2b1e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
2b1f0 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67  out2 */.  int pg
2b200 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b  no;.  int flags;
2b210 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70  .  Db *pDb;..  p
2b220 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
2b230 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
2b240 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
2b250 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2b260 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2b270 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
2b280 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
2b290 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
2b2a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
2b2b0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2b2c0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
2b2d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b2e0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
2b2f0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
2b300 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
2b310 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
2b320 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
2b330 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
2b340 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
2b350 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
2b360 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c  flags = BTREE_BL
2b370 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20  OBKEY;.  }.  rc 
2b380 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
2b390 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
2b3a0 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
2b3b0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
2b3c0 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
2b3d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
2b3e0 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a  rseSchema P1 * *
2b3f0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64   P4 *.**.** Read
2b400 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65   and parse all e
2b410 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
2b420 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61  SQLITE_MASTER ta
2b430 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ble of database 
2b440 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68  P1.** that match
2b450 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2b460 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  e P4. .**.** Thi
2b470 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2b480 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63   the parser to c
2b490 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
2b4a0 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20  ual machine,.** 
2b4b0 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65  then runs the ne
2b4c0 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
2b4d0 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61  e.  It is thus a
2b4e0 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f   re-entrant opco
2b4f0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  de..*/.case OP_P
2b500 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20  arseSchema: {.  
2b510 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74  int iDb;.  const
2b520 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
2b530 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
2b540 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
2b550 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65  a;..  /* Any pre
2b560 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2b570 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69  that invokes thi
2b580 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f  s opcode will ho
2b590 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20  ld mutexes.  ** 
2b5a0 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20  on every btree. 
2b5b0 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65   This is a prere
2b5c0 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f  quisite for invo
2b5d0 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74  king .  ** sqlit
2b5e0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29  e3InitCallback()
2b5f0 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ..  */.#ifdef SQ
2b600 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
2b610 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e  (iDb=0; iDb<db->
2b620 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20  nDb; iDb++){.   
2b630 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20   assert( iDb==1 
2b640 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48  || sqlite3BtreeH
2b650 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44  oldsMutex(db->aD
2b660 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20  b[iDb].pBt) );. 
2b670 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62   }.#endif..  iDb
2b680 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
2b690 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
2b6a0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
2b6b0 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72   assert( DbHasPr
2b6c0 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
2b6d0 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
2b6e0 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f   );.  /* Used to
2b6f0 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61   be a conditiona
2b700 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74  l */ {.    zMast
2b710 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c  er = SCHEMA_TABL
2b720 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74  E(iDb);.    init
2b730 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
2b740 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
2b750 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e   pOp->p1;.    in
2b760 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
2b770 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  = &p->zErrMsg;. 
2b780 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
2b790 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
2b7a0 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
2b7b0 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
2b7c0 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
2b7d0 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
2b7e0 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62  owid",.       db
2b7f0 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65  ->aDb[iDb].zName
2b800 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e  , zMaster, pOp->
2b810 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a  p4.z);.    if( z
2b820 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
2b830 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2b840 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  M;.    }else{.  
2b850 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
2b860 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a  init.busy==0 );.
2b870 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
2b880 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69  usy = 1;.      i
2b890 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c  nitData.rc = SQL
2b8a0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73  ITE_OK;.      as
2b8b0 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f  sert( !db->mallo
2b8c0 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20  cFailed );.     
2b8d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2b8e0 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c  ec(db, zSql, sql
2b8f0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
2b900 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
2b910 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2b920 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20  QLITE_OK ) rc = 
2b930 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20  initData.rc;.   
2b940 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
2b950 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  (db, zSql);.    
2b960 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2b970 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
2b980 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65   if( rc ) sqlite
2b990 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
2b9a0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
2b9b0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2b9c0 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
2b9d0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2b9e0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
2b9f0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2ba00 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2ba10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
2ba20 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
2ba30 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
2ba40 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
2ba50 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
2ba60 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
2ba70 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
2ba80 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
2ba90 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
2baa0 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
2bab0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
2bac0 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
2bad0 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
2bae0 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
2baf0 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
2bb00 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
2bb10 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
2bb20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bb30 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2bb40 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
2bb50 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
2bb60 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
2bb70 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
2bb80 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
2bb90 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
2bba0 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  ALYZE) */../* Op
2bbb0 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
2bbc0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2bbd0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2bbe0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2bbf0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2bc00 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2bc10 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
2bc20 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
2bc30 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
2bc40 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
2bc50 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
2bc60 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2bc70 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2bc80 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
2bc90 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
2bca0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2bcb0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2bcc0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2bcd0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2bce0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2bcf0 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
2bd00 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2bd10 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
2bd20 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2bd30 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2bd40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2bd50 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a  DropIndex P1 * *
2bd60 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2bd70 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2bd80 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2bd90 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2bda0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2bdb0 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20   index named P4 
2bdc0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2bdd0 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2bde0 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a  after an index.*
2bdf0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2be00 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2be10 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2be20 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f  ).** in order to
2be30 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
2be40 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2be50 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2be60 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2be70 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2be80 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2be90 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
2bea0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2beb0 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
2bec0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2bed0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2bee0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
2bef0 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
2bf00 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2bf10 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2bf20 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2bf30 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2bf40 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
2bf50 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
2bf60 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
2bf70 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
2bf80 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
2bf90 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2bfa0 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2bfb0 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2bfc0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2bfd0 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2bfe0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2bff0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2c000 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2c010 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2c020 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2c030 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20  ropTrigger: {.  
2c040 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2c050 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62  DeleteTrigger(db
2c060 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2c070 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
2c080 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
2c090 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
2c0a0 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64  Y_CHECK./* Opcod
2c0b0 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50  e: IntegrityCk P
2c0c0 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
2c0d0 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
2c0e0 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
2c0f0 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
2c100 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
2c110 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
2c120 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
2c130 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
2c140 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
2c150 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
2c160 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
2c170 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
2c180 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2c190 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
2c1a0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61   contains the ma
2c1b0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
2c1c0 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
2c1d0 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
2c1e0 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
2c1f0 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
2c200 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2c210 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
2c220 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
2c230 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
2c240 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
2c250 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
2c260 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
2c270 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2c280 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
2c290 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
2c2a0 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
2c2b0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
2c2c0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72   integer.** stor
2c2d0 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72  ed in reg(P1), r
2c2e0 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31  eg(P1+1), reg(P1
2c2f0 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65  +2), ....  There
2c300 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a   are P2 tables.*
2c310 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49  * total..**.** I
2c320 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
2c330 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
2c340 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
2c350 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
2c360 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
2c370 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2c380 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
2c390 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
2c3a0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
2c3b0 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
2c3c0 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
2c3d0 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
2c3e0 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
2c3f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
2c400 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
2c410 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
2c420 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
2c430 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
2c440 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
2c450 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
2c460 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
2c470 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20  ked */.  int j; 
2c480 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
2c490 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
2c4a0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a  t nErr;       /*
2c4b0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
2c4c0 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20  s reported */.  
2c4d0 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20  char *z;        
2c4e0 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65  /* Text of the e
2c4f0 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20  rror report */. 
2c500 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20   Mem *pnErr;    
2c510 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65   /* Register kee
2c520 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72  ping track of er
2c530 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a  rors remaining *
2c540 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2c550 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e  bIsReader );.  n
2c560 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
2c570 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
2c580 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
2c590 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
2c5a0 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  w(db, sizeof(int
2c5b0 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
2c5c0 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
2c5d0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
2c5e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2c5f0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2c600 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2c610 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  ) );.  pnErr = &
2c620 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2c630 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
2c640 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2c650 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
2c660 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2c670 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
2c680 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
2c690 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2c6a0 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
2c6b0 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
2c6c0 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
2c6d0 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
2c6e0 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
2c6f0 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
2c700 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2c710 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
2c720 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2c730 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2c740 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
2c750 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
2c760 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
2c770 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
2c780 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
2c790 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
2c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7b0 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
2c7c0 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
2c7d0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
2c7e0 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70  (db, aRoot);.  p
2c7f0 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
2c800 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  r;.  sqlite3Vdbe
2c810 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
2c820 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  ;.  if( nErr==0 
2c830 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a  ){.    assert( z
2c840 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ==0 );.  }else i
2c850 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67  f( z==0 ){.    g
2c860 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65  oto no_mem;.  }e
2c870 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
2c880 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
2c890 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
2c8a0 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
2c8b0 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
2c8c0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2c8d0 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
2c8e0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2c8f0 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
2c900 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
2c910 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2c920 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
2c930 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
2c940 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
2c950 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2c960 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28  nopsis:  rowset(
2c970 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2c980 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2c990 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2c9a0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2c9b0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
2c9c0 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
2c9d0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2c9e0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2c9f0 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2ca00 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2ca10 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2ca20 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2ca30 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2ca40 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2ca50 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2ca60 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2ca70 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2ca80 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2ca90 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2caa0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2cab0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2cac0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2cad0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2cae0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2caf0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2cb00 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2cb10 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2cb20 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2cb30 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2cb40 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2cb50 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2cb60 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2cb70 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2cb80 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73  sis:  r[P3]=rows
2cb90 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74  et(P1).**.** Ext
2cba0 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
2cbb0 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
2cbc0 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
2cbd0 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
2cbe0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
2cbf0 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
2cc00 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
2cc10 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
2cc20 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
2cc30 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
2cc40 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2cc50 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2cc60 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
2cc70 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2cc80 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
2cc90 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  val;..  pIn1 = &
2cca0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ccb0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2ccc0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2ccd0 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  =0 .   || sqlite
2cce0 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31  3RowSetNext(pIn1
2ccf0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61  ->u.pRowSet, &va
2cd00 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
2cd10 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
2cd20 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
2cd30 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2cd40 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2cd50 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2cd60 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67  aken(1,2);.    g
2cd70 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
2cd80 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
2cd90 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b  errupt;.  }else{
2cda0 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
2cdb0 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
2cdc0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
2cdd0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2cde0 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74  (0,2);.    sqlit
2cdf0 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2ce00 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
2ce10 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f  , val);.  }.  go
2ce20 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2ce30 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2ce40 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74  code: RowSetTest
2ce50 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
2ce60 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2ce70 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29  3] in rowset(P1)
2ce80 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2ce90 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
2cea0 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
2ceb0 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
2cec0 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
2ced0 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
2cee0 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
2cef0 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
2cf00 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
2cf10 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
2cf20 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
2cf30 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
2cf40 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
2cf50 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
2cf60 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
2cf70 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
2cf80 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
2cf90 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
2cfa0 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
2cfb0 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
2cfc0 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
2cfd0 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20  here successive 
2cfe0 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  sets.** of integ
2cff0 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20  ers, where each 
2d000 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
2d010 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68  duplicates. Each
2d020 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65   set.** of value
2d030 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  s is identified 
2d040 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
2d050 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
2d060 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
2d070 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
2d080 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34  l set P4=-1.  P4
2d090 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
2d0a0 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67  -1 or.** non-neg
2d0b0 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d  ative.  For non-
2d0c0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
2d0d0 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c  of P4 only the l
2d0e0 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61  ower 4.** bits a
2d0f0 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  re significant..
2d100 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
2d110 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
2d120 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
2d130 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2d140 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
2d150 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f  rowset object fo
2d160 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
2d170 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
2d180 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
2d190 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
2d1a0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2d1b0 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
2d1c0 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
2d1d0 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
2d1e0 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
2d1f0 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
2d200 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
2d210 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
2d220 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
2d230 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
2d240 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
2d250 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
2d260 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
2d270 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
2d280 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
2d290 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
2d2a0 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
2d2b0 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
2d2c0 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
2d2d0 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2d300 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
2d310 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
2d320 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  s;..  pIn1 = &aM
2d330 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
2d340 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
2d350 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70  >p3];.  iSet = p
2d360 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65  Op->p4.i;.  asse
2d370 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26  rt( pIn3->flags&
2d380 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a  MEM_Int );..  /*
2d390 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   If there is any
2d3a0 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e  thing other than
2d3b0 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74   a rowset object
2d3c0 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
2d3d0 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20  P1,.  ** delete 
2d3e0 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69  it now and initi
2d3f0 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e  alize P1 with an
2d400 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20   empty rowset.  
2d410 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
2d420 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2d430 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2d440 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2d450 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2d460 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2d470 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2d480 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2d490 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
2d4a0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2d4b0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
2d4c0 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20  rt( iSet==-1 || 
2d4d0 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28  iSet>=0 );.  if(
2d4e0 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69   iSet ){.    exi
2d4f0 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77  sts = sqlite3Row
2d500 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e  SetTest(pIn1->u.
2d510 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70  pRowSet, iSet, p
2d520 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56  In3->u.i);.    V
2d530 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65  dbeBranchTaken(e
2d540 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
2d550 20 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f   if( exists ) go
2d560 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2d570 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
2d580 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2d590 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2d5a0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2d5b0 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
2d5c0 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2d5d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2d5e0 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
2d5f0 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
2d600 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
2d610 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
2d620 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
2d630 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
2d640 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
2d650 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
2d660 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
2d670 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2d680 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
2d690 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
2d6a0 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
2d6b0 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
2d6c0 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
2d6d0 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
2d6e0 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
2d6f0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2d700 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
2d710 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
2d720 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
2d730 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
2d740 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
2d750 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
2d760 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2d770 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
2d780 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2d790 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
2d7a0 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
2d7b0 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
2d7c0 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
2d7d0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
2d7e0 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
2d7f0 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
2d800 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2d810 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
2d820 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2d830 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  am..**.** If P5 
2d840 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2d850 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67  n recursive prog
2d860 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69  ram invocation i
2d870 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61  s enabled..*/.ca
2d880 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b  se OP_Program: {
2d890 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2d8a0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
2d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2d8c0 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
2d8d0 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73   registers for s
2d8e0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2d8f0 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20  int nByte;      
2d900 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
2d910 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63   of runtime spac
2d920 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73  e required for s
2d930 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2d940 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20  Mem *pRt;       
2d950 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
2d960 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ter to allocate 
2d970 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f  runtime space */
2d980 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2d990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2d9a0 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
2d9b0 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c  rough memory cel
2d9c0 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e  ls */.  Mem *pEn
2d9d0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2d9e0 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63  /* Last memory c
2d9f0 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79  ell in new array
2da00 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2da10 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  *pFrame;      /*
2da20 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20   New vdbe frame 
2da30 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f  to execute in */
2da40 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
2da50 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75  Program;   /* Su
2da60 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  b-program to exe
2da70 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  cute */.  void *
2da80 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2da90 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74    /* Token ident
2daa0 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a  ifying trigger *
2dab0 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20  /..  pProgram = 
2dac0 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d  pOp->p4.pProgram
2dad0 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b  ;.  pRt = &aMem[
2dae0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
2daf0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  rt( pProgram->nO
2db00 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49  p>0 );.  .  /* I
2db10 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73  f the p5 flag is
2db20 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63   clear, then rec
2db30 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2db40 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73  n of triggers is
2db50 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20   .  ** disabled 
2db60 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  for backwards co
2db70 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20  mpatibility (p5 
2db80 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73  is set if this s
2db90 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  ub-program.  ** 
2dba0 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67  is really a trig
2dbb0 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69  ger, not a forei
2dbc0 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61  gn key action, a
2dbd0 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a  nd the flag set.
2dbe0 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64    ** and cleared
2dbf0 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20   by the "PRAGMA 
2dc00 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
2dc10 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63  rs" command is c
2dc20 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a  lear)..  ** .  *
2dc30 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
2dc40 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
2dc50 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
2dc60 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
2dc70 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2dc80 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
2dc90 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
2dca0 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
2dcb0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
2dcc0 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
2dcd0 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
2dce0 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
2dcf0 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
2dd00 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
2dd10 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
2dd20 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
2dd30 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
2dd40 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2dd50 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
2dd60 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
2dd70 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
2dd80 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
2dd90 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
2dda0 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28  iable.  */.  if(
2ddb0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
2ddc0 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  t = pProgram->to
2ddd0 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72  ken;.    for(pFr
2dde0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2ddf0 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d  Frame && pFrame-
2de00 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d  >token!=t; pFram
2de10 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2de20 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61  t);.    if( pFra
2de30 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  me ) break;.  }.
2de40 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65  .  if( p->nFrame
2de50 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  >=db->aLimit[SQL
2de60 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
2de70 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20  R_DEPTH] ){.    
2de80 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2de90 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  R;.    sqlite3Vd
2dea0 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20  beError(p, "too 
2deb0 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74  many levels of t
2dec0 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e  rigger recursion
2ded0 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ");.    break;. 
2dee0 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
2def0 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
2df00 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
2df10 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
2df20 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
2df30 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
2df40 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
2df50 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2df60 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
2df70 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
2df80 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2df90 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
2dfa0 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
2dfb0 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
2dfc0 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
2dfd0 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
2dfe0 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
2dff0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
2e000 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
2e010 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65  >flags&MEM_Frame
2e020 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53  )==0 ){.    /* S
2e030 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69  ubProgram.nMem i
2e040 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
2e050 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
2e060 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20  lls used by the 
2e070 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
2e080 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f  stored in SubPro
2e090 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c  gram.aOp. As wel
2e0a0 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20  l as these, one 
2e0b0 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65  memory.    ** ce
2e0c0 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ll is required f
2e0d0 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75  or each cursor u
2e0e0 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
2e0f0 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20  am. Set local.  
2e100 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d    ** variable nM
2e110 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56  em (and later, V
2e120 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d  dbeFrame.nChildM
2e130 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75  em) to this valu
2e140 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d  e..    */.    nM
2e150 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em = pProgram->n
2e160 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem + pProgram->
2e170 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20  nCsr;.    nByte 
2e180 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
2e190 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
2e1a0 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
2e1b0 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
2e1d0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
2e1e0 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2e1f0 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  r *).           
2e200 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2e210 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38  Once * sizeof(u8
2e220 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  );.    pFrame = 
2e230 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
2e240 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
2e250 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
2e260 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2e270 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2e280 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2e290 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
2e2a0 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
2e2b0 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
2e2c0 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
2e2d0 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
2e2e0 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
2e2f0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
2e300 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2e310 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
2e320 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2e330 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28    pFrame->pc = (
2e340 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
2e350 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
2e360 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
2e370 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
2e380 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
2e390 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
2e3a0 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
2e3b0 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
2e3c0 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
2e3d0 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
2e3e0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2e3f0 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
2e400 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
2e410 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2e420 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2e430 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e  nceFlag = p->aOn
2e440 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61  ceFlag;.    pFra
2e450 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20  me->nOnceFlag = 
2e460 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69  p->nOnceFlag;.#i
2e470 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2e480 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2e490 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  US.    pFrame->a
2e4a0 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65  nExec = p->anExe
2e4b0 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70  c;.#endif..    p
2e4c0 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
2e4d0 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
2e4e0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
2e4f0 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
2e500 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2e510 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
2e520 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
2e530 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
2e540 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20  Undefined;.     
2e550 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
2e560 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2e570 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d     pFrame = pRt-
2e580 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61  >u.pFrame;.    a
2e590 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2e5a0 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
2e5b0 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2e5c0 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61  hildMem );.    a
2e5d0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2e5e0 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2e5f0 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20  ChildCsr );.    
2e600 61 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f  assert( (int)(pO
2e610 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65  p - aOp)==pFrame
2e620 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
2e630 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
2e640 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
2e650 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
2e660 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
2e670 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46   lastRowid;.  pF
2e680 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
2e690 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46  p->nChange;.  pF
2e6a0 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20  rame->nDbChange 
2e6b0 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65  = p->db->nChange
2e6c0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
2e6d0 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
2e6e0 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
2e6f0 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64  Mem = aMem = &Vd
2e700 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2e710 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65  e)[-1];.  p->nMe
2e720 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2e730 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2e740 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2e750 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2e760 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2e770 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2e780 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d  p->nMem+1];.  p-
2e790 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
2e7a0 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
2e7b0 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
2e7c0 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65  >nOp;.  p->aOnce
2e7d0 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d  Flag = (u8 *)&p-
2e7e0 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f  >apCsr[p->nCurso
2e7f0 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c  r];.  p->nOnceFl
2e800 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ag = pProgram->n
2e810 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c  Once;.#ifdef SQL
2e820 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2e830 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e  SCANSTATUS.  p->
2e840 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64  anExec = 0;.#end
2e850 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  if.  pOp = &aOp[
2e860 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d  -1];.  memset(p-
2e870 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70  >aOnceFlag, 0, p
2e880 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20  ->nOnceFlag);.. 
2e890 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2e8a0 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
2e8b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2e8c0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
2e8d0 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
2e8e0 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
2e8f0 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
2e900 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
2e910 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
2e920 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
2e930 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
2e940 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
2e950 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
2e960 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
2e970 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
2e980 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
2e990 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
2e9a0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
2e9b0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
2e9c0 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
2e9d0 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
2e9e0 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
2e9f0 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
2ea00 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
2ea10 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
2ea20 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
2ea30 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
2ea40 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2ea50 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
2ea60 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2ea70 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
2ea80 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
2ea90 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2eaa0 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
2eab0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
2eac0 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ut2 */.  VdbeFra
2ead0 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65  me *pFrame;.  Me
2eae0 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d  m *pIn;.  pOut =
2eaf0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2eb00 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d  p, pOp);.  pFram
2eb10 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
2eb20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e   pIn = &pFrame->
2eb30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70  aMem[pOp->p1 + p
2eb40 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d  Frame->aOp[pFram
2eb50 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20  e->pc].p1];   . 
2eb60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2eb70 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
2eb80 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29   pIn, MEM_Ephem)
2eb90 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65  ;.  break;.}..#e
2eba0 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
2ebb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2ebc0 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  GER */..#ifndef 
2ebd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2ebe0 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64  IGN_KEY./* Opcod
2ebf0 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20  e: FkCounter P1 
2ec00 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2ec10 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b  psis: fkctr[P1]+
2ec20 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  =P2.**.** Increm
2ec30 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
2ec40 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
2ec50 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
2ec60 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
2ec70 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
2ec80 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
2ec90 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2eca0 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
2ecb0 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
2ecc0 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
2ecd0 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
2ece0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
2ecf0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
2ed00 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
2ed10 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2ed20 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
2ed30 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2ed40 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
2ed50 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
2ed60 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
2ed70 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  & SQLITE_DeferFK
2ed80 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  s ){.    db->nDe
2ed90 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d  ferredImmCons +=
2eda0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2edb0 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b  e if( pOp->p1 ){
2edc0 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2edd0 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
2ede0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
2edf0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2ee00 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2ee10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ee20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
2ee30 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2ee40 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63  Synopsis: if fkc
2ee50 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50  tr[P1]==0 goto P
2ee60 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
2ee70 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66  ode tests if a f
2ee80 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2ee90 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
2eea0 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e   currently zero.
2eeb0 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20  .** If so, jump 
2eec0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
2eed0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2eee0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2eef0 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72  e next .** instr
2ef00 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
2ef10 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2ef20 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69   then the jump i
2ef30 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64  s taken if the d
2ef40 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
2ef50 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73  nt-counter.** is
2ef60 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74   zero (the one t
2ef70 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72  hat counts defer
2ef80 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  red constraint v
2ef90 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50  iolations). If P
2efa0 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68  1 is.** zero, th
2efb0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2efc0 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  if the statement
2efd0 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2efe0 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28  ter is zero.** (
2eff0 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2f000 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2f010 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f   violations)..*/
2f020 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72  .case OP_FkIfZer
2f030 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  o: {         /* 
2f040 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f  jump */.  if( pO
2f050 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62  p->p1 ){.    Vdb
2f060 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d  eBranchTaken(db-
2f070 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2f080 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2f090 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
2f0a0 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  ;.    if( db->nD
2f0b0 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2f0c0 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2f0d0 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f  mmCons==0 ) goto
2f0e0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
2f0f0 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
2f100 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b  anchTaken(p->nFk
2f110 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
2f120 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2f130 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
2f140 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73    if( p->nFkCons
2f150 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d  traint==0 && db-
2f160 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2f170 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  s==0 ) goto jump
2f180 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
2f190 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2f1a0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2f1b0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2f1c0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2f1d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2f1e0 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
2f1f0 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
2f200 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2f210 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31  : r[P1]=max(r[P1
2f220 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50  ],r[P2]).**.** P
2f230 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
2f240 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
2f250 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
2f260 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
2f270 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
2f280 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
2f290 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
2f2a0 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
2f2b0 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
2f2c0 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
2f2d0 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
2f2e0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2f2f0 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
2f300 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
2f310 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
2f320 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2f330 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
2f340 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
2f350 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2f360 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2f370 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
2f380 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
2f390 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
2f3a0 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
2f3b0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  in2 */.  VdbeFra
2f3c0 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66  me *pFrame;.  if
2f3d0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
2f3e0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
2f3f0 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
2f400 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
2f410 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2f420 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70  );.    pIn1 = &p
2f430 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
2f440 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >p1];.  }else{. 
2f450 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b     pIn1 = &aMem[
2f460 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20  pOp->p1];.  }.  
2f470 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2f480 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71  id(pIn1) );.  sq
2f490 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2f4a0 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
2f4b0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2f4c0 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
2f4d0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
2f4e0 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70  y(pIn2);.  if( p
2f4f0 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75  In1->u.i<pIn2->u
2f500 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  .i){.    pIn1->u
2f510 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  .i = pIn2->u.i;.
2f520 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2f530 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2f540 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
2f550 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
2f560 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33  : IfPos P1 P2 P3
2f570 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2f580 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65  : if r[P1]>0 the
2f590 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74  n r[P1]-=P3, got
2f5a0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2f5b0 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2f5c0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
2f5d0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2f5e0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2f5f0 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2f600 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d  subtract P3 from
2f610 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
2f620 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20   P1 and jump to 
2f630 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
2f640 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
2f650 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2f660 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68   less than 1, th
2f670 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
2f680 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  is unchanged and
2f690 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20   control passes 
2f6a0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2f6b0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2f6c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2f6d0 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2f6e0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2f6f0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2f700 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2f710 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2f720 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2f730 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75  chTaken( pIn1->u
2f740 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i>0, 2);.  if( 
2f750 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
2f760 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20     pIn1->u.i -= 
2f770 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74  pOp->p3;.    got
2f780 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2f790 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2f7a0 20 4f 70 63 6f 64 65 3a 20 53 65 74 49 66 4e 6f   Opcode: SetIfNo
2f7b0 74 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20  tPos P1 P2 P3 * 
2f7c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2f7d0 66 20 72 5b 50 31 5d 3c 3d 30 20 74 68 65 6e 20  f r[P1]<=0 then 
2f7e0 72 5b 50 32 5d 3d 50 33 0a 2a 2a 0a 2a 2a 20 52  r[P2]=P3.**.** R
2f7f0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2f800 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2f810 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  er..** If the va
2f820 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2f830 50 31 20 69 73 20 6e 6f 74 20 70 6f 73 69 74 69  P1 is not positi
2f840 76 65 20 28 69 66 20 69 74 20 69 73 20 6c 65 73  ve (if it is les
2f850 73 20 74 68 61 6e 20 31 29 20 74 68 65 6e 0a 2a  s than 1) then.*
2f860 2a 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  * set the value 
2f870 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
2f880 6f 20 62 65 20 74 68 65 20 69 6e 74 65 67 65 72  o be the integer
2f890 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
2f8a0 53 65 74 49 66 4e 6f 74 50 6f 73 3a 20 7b 20 20  SetIfNotPos: {  
2f8b0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2f8c0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2f8d0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2f8e0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2f8f0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2f900 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d   if( pIn1->u.i<=
2f910 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  0 ){.    pOut = 
2f920 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2f930 2c 20 70 4f 70 29 3b 0a 20 20 20 20 70 4f 75 74  , pOp);.    pOut
2f940 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 3b  ->u.i = pOp->p3;
2f950 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2f960 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
2f970 74 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  tZero P1 P2 P3 *
2f980 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2f990 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e  if r[P1]!=0 then
2f9a0 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
2f9b0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
2f9c0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2f9d0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2f9e0 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
2f9f0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2fa00 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f  .** initially no
2fa10 6e 7a 65 72 6f 2c 20 74 68 65 6e 20 73 75 62 74  nzero, then subt
2fa20 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65  ract P3 from the
2fa30 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2fa40 65 72 20 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d  er P1 and.** jum
2fa50 70 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67  p to P2.  If reg
2fa60 69 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74  ister P1 is init
2fa70 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76  ially zero, leav
2fa80 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a  e it unchanged.*
2fa90 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  * and fall throu
2faa0 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  gh..*/.case OP_I
2fab0 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20  fNotZero: {     
2fac0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2fad0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2fae0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2faf0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2fb00 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2fb10 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2fb20 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
2fb30 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20    if( pIn1->u.i 
2fb40 29 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e  ){.     pIn1->u.
2fb50 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i -= pOp->p3;.  
2fb60 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2fb70 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2fb80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2fb90 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
2fba0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2fbb0 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
2fbc0 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
2fbd0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2fbe0 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
2fbf0 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
2fc00 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
2fc10 69 73 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e  ister P1.** then
2fc20 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   jump to P2 if t
2fc30 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
2fc40 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f  exactly zero..*/
2fc50 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d  .case OP_DecrJum
2fc60 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a  pZero: {      /*
2fc70 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2fc80 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2fc90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2fca0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2fcb0 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  _Int );.  pIn1->
2fcc0 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61  u.i--;.  VdbeBra
2fcd0 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2fce0 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
2fcf0 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20   pIn1->u.i==0 ) 
2fd00 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2fd10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
2fd20 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72   Opcode: JumpZer
2fd30 6f 49 6e 63 72 20 50 31 20 50 32 20 2a 20 2a 20  oIncr P1 P2 * * 
2fd40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2fd50 66 20 28 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29  f (r[P1]++)==0 )
2fd60 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
2fd70 68 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d  he register P1 m
2fd80 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
2fd90 6e 74 65 67 65 72 2e 20 20 49 66 20 72 65 67 69  nteger.  If regi
2fda0 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69  ster P1 is initi
2fdb0 61 6c 6c 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68  ally.** zero, th
2fdc0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2fdd0 49 6e 63 72 65 6d 65 6e 74 20 72 65 67 69 73 74  Increment regist
2fde0 65 72 20 50 31 20 72 65 67 61 72 64 6c 65 73 73  er P1 regardless
2fdf0 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 0a 2a   of whether or.*
2fe00 2a 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69  * not the jump i
2fe10 73 20 74 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65  s taken..*/.case
2fe20 20 4f 50 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72   OP_JumpZeroIncr
2fe30 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2fe40 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2fe50 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2fe60 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2fe70 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2fe80 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2fe90 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2fea0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
2feb0 70 49 6e 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20  pIn1->u.i++)==0 
2fec0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2fed0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2fee0 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
2fef0 70 30 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  p0 * P2 P3 P4 P5
2ff00 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
2ff10 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
2ff20 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
2ff30 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
2ff40 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2ff50 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
2ff60 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
2ff70 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
2ff80 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2ff90 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a  to the FuncDef.*
2ffa0 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  * structure that
2ffb0 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
2ffc0 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
2ffd0 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20  er P3 is the.** 
2ffe0 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
2fff0 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
30000 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
30010 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
30020 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
30030 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sors..*/./* Opco
30040 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
30050 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
30060 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
30070 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
30080 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
30090 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
300a0 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
300b0 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
300c0 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
300d0 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
300e0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
300f0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a  qlite3_context.*
30100 2a 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73  * object that is
30110 20 75 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65   used to run the
30120 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69   function.  Regi
30130 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73  ster P3 is.** as
30140 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
30150 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
30160 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
30170 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
30180 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
30190 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a  uccessors..**.**
301a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
301b0 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20  initially coded 
301c0 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20  as OP_AggStep0. 
301d0 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61   On first evalua
301e0 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e  tion,.** the Fun
301f0 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50  cDef stored in P
30200 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69  4 is converted i
30210 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63  nto an sqlite3_c
30220 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68  ontext and.** th
30230 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e  e opcode is chan
30240 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61  ged.  In this wa
30250 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  y, the initializ
30260 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
30270 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
30280 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63  only happens onc
30290 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e  e, instead of on
302a0 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68   each call to th
302b0 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69  e.** step functi
302c0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  on..*/.case OP_A
302d0 67 67 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74  ggStep0: {.  int
302e0 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   n;.  sqlite3_co
302f0 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20  ntext *pCtx;..  
30300 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
30310 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
30320 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  );.  n = pOp->p5
30330 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
30340 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
30350 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
30360 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
30370 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
30380 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
30390 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  2+n<=(p->nMem-p-
303a0 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
303b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
303c0 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
303d0 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
303e0 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69  );.  pCtx = sqli
303f0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
30400 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29  b, sizeof(*pCtx)
30410 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28   + (n-1)*sizeof(
30420 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29  sqlite3_value*))
30430 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20  ;.  if( pCtx==0 
30440 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
30450 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b   pCtx->pMem = 0;
30460 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d  .  pCtx->pFunc =
30470 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
30480 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69    pCtx->iOp = (i
30490 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
304a0 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20    pCtx->pVdbe = 
304b0 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20  p;.  pCtx->argc 
304c0 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79  = n;.  pOp->p4ty
304d0 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b  pe = P4_FUNCCTX;
304e0 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20  .  pOp->p4.pCtx 
304f0 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f  = pCtx;.  pOp->o
30500 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74  pcode = OP_AggSt
30510 65 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ep;.  /* Fall th
30520 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67  rough into OP_Ag
30530 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20  gStep */.}.case 
30540 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
30550 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33  int i;.  sqlite3
30560 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
30570 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
30580 65 6d 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  em t;..  assert(
30590 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
305a0 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
305b0 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
305c0 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65  x;.  pMem = &aMe
305d0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f  m[pOp->p3];..  /
305e0 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69  * If this functi
305f0 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20  on is inside of 
30600 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72  a trigger, the r
30610 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e  egister array in
30620 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67   aMem[].  ** mig
30630 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f  ht change from o
30640 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f  ne evaluation to
30650 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20   the next.  The 
30660 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  next block of co
30670 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74  de.  ** checks t
30680 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67  o see if the reg
30690 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20  ister array has 
306a0 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20  changed, and if 
306b0 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69  so it.  ** reini
306c0 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c  tializes the rel
306d0 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74  avant parts of t
306e0 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  he sqlite3_conte
306f0 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69  xt object */.  i
30700 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d  f( pCtx->pMem !=
30710 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74   pMem ){.    pCt
30720 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a  x->pMem = pMem;.
30730 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
30740 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
30750 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
30760 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
30770 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  +i];.  }..#ifdef
30780 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
30790 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d  for(i=0; i<pCtx-
307a0 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  >argc; i++){.   
307b0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
307c0 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69  lid(pCtx->argv[i
307d0 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
307e0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
307f0 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  +i, pCtx->argv[i
30800 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ]);.  }.#endif..
30810 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73    pMem->n++;.  s
30820 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69  qlite3VdbeMemIni
30830 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75  t(&t, db, MEM_Nu
30840 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75  ll);.  pCtx->pOu
30850 74 20 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e  t = &t;.  pCtx->
30860 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b  fErrorOrAux = 0;
30870 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  .  pCtx->skipFla
30880 67 20 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e  g = 0;.  (pCtx->
30890 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 70 43  pFunc->xStep)(pC
308a0 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43  tx,pCtx->argc,pC
308b0 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d  tx->argv); /* IM
308c0 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
308d0 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e   */.  if( pCtx->
308e0 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20  fErrorOrAux ){. 
308f0 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45     if( pCtx->isE
30900 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71  rror ){.      sq
30910 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
30920 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
30930 76 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b  value_text(&t));
30940 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78  .      rc = pCtx
30950 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d  ->isError;.    }
30960 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
30970 4d 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a  MemRelease(&t);.
30980 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
30990 65 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45  ert( t.flags==ME
309a0 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20  M_Null );.  }.  
309b0 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  if( pCtx->skipFl
309c0 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ag ){.    assert
309d0 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
309e0 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
309f0 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e      i = pOp[-1].
30a00 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20  p1;.    if( i ) 
30a10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
30a20 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
30a30 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   1);.  }.  break
30a40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
30a50 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
30a60 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
30a70 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e  s: accum=r[P1] N
30a80 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  =P2.**.** Execut
30a90 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
30aa0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
30ab0 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
30ac0 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
30ad0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
30ae0 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
30af0 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
30b00 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
30b10 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
30b20 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
30b30 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
30b40 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
30b50 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
30b60 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
30b70 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
30b80 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
30b90 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
30ba0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
30bb0 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
30bc0 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
30bd0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
30be0 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
30bf0 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
30c00 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
30c10 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
30c20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
30c30 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
30c40 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
30c50 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
30c60 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
30c70 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
30c80 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
30c90 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
30ca0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
30cb0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
30cc0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
30cd0 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  r) );.  pMem = &
30ce0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
30cf0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
30d00 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
30d10 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
30d20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
30d30 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
30d40 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
30d50 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
30d60 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
30d70 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
30d80 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
30d90 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
30da0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
30db0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
30dc0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
30dd0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
30de0 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
30df0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
30e00 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
30e10 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
30e20 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
30e30 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30e40 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
30e50 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
30e60 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
30e70 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
30e80 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
30e90 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
30ea0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
30eb0 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
30ec0 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
30ed0 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
30ee0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
30ef0 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41  , FULL,.** RESTA
30f00 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e  RT, or TRUNCATE.
30f10 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
30f20 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
30f30 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
30f40 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
30f50 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
30f60 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
30f70 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
30f80 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
30f90 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
30fa0 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
30fb0 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
30fc0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
30fd0 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
30fe0 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
30ff0 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
31000 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
31010 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
31020 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
31030 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
31040 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
31050 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
31060 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
31070 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
31080 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
31090 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
310b0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
310c0 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
310f0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31110 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
31120 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
31130 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
31140 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
31150 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
31160 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
31170 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
31180 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
31190 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
311a0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
311b0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
311c0 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
311d0 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
311e0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
311f0 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c  ESTART.       ||
31200 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
31210 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
31220 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d  CATE.  );.  rc =
31230 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
31240 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
31250 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
31260 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
31270 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
31280 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  USY ){.    rc = 
31290 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
312a0 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
312b0 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
312c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
312d0 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
312e0 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
312f0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
31300 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
31310 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
31320 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
31330 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
31340 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
31350 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
31360 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
31370 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  *.**.** Change t
31380 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
31390 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
313a0 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
313b0 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
313c0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
313d0 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
313e0 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
313f0 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
31400 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
31410 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
31420 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
31430 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
31440 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
31450 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
31460 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
31470 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
31480 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
31490 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
314a0 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
314b0 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
314c0 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
314d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
314e0 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
314f0 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
31500 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
31510 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
31520 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65  * out2 */.  Btre
31530 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
31540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
31550 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a  tree to change j
31560 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a  ournal mode of *
31570 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  /.  Pager *pPage
31580 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
31590 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73      /* Pager ass
315a0 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74  ociated with pBt
315b0 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20   */.  int eNew; 
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315d0 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75        /* New jou
315e0 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  rnal mode */.  i
315f0 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20  nt eOld;        
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31610 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61  * The old journa
31620 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65  l mode */.#ifnde
31630 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
31640 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  L.  const char *
31650 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20  zFilename;      
31660 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64      /* Name of d
31670 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
31680 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69   pPager */.#endi
31690 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  f..  pOut = out2
316a0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
316b0 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70  p);.  eNew = pOp
316c0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
316d0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
316e0 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a  NALMODE_DELETE .
316f0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
31700 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
31710 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20  E_TRUNCATE .    
31720 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
31730 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
31740 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c  RSIST .       ||
31750 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
31760 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20  RNALMODE_OFF.   
31770 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
31780 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
31790 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20  EMORY.       || 
317a0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
317b0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20  NALMODE_WAL.    
317c0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
317d0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
317e0 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ERY.  );.  asser
317f0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
31800 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
31810 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
31820 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
31830 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
31840 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
31850 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
31860 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
31870 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74  ;.  eOld = sqlit
31880 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61  e3PagerGetJourna
31890 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20  lMode(pPager);. 
318a0 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
318b0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
318c0 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  RY ) eNew = eOld
318d0 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  ;.  if( !sqlite3
318e0 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a  PagerOkToChangeJ
318f0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
31900 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  r) ) eNew = eOld
31910 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
31920 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69  E_OMIT_WAL.  zFi
31930 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  lename = sqlite3
31940 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50  PagerFilename(pP
31950 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20  ager, 1);..  /* 
31960 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
31970 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
31980 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
31990 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
319a0 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
319b0 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
319c0 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
319d0 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
319e0 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
319f0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
31a00 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
31a10 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  & (sqlite3Strlen
31a20 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30  30(zFilename)==0
31a30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
31a40 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
31a50 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
31a60 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
31a70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
31a80 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
31a90 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
31aa0 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
31ab0 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
31ac0 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
31ad0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
31ae0 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
31af0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
31b00 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
31b10 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
31b20 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56  Commit || db->nV
31b30 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20  dbeRead>1 ){.   
31b40 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
31b50 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69  RROR;.      sqli
31b60 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
31b70 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
31b80 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
31b90 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
31ba0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
31bb0 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
31bc0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
31bd0 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
31be0 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
31bf0 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61     );.      brea
31c00 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a  k;.    }else{. .
31c10 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d        if( eOld==
31c20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
31c30 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  E_WAL ){.       
31c40 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57   /* If leaving W
31c50 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74  AL mode, close t
31c60 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20  he log file. If 
31c70 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20  successful, the 
31c80 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  call.        ** 
31c90 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  to PagerCloseWal
31ca0 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61  () checkpoints a
31cb0 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77  nd deletes the w
31cc0 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a  rite-ahead-log .
31cd0 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
31ce0 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   An EXCLUSIVE lo
31cf0 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  ck may still be 
31d00 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61  held on the data
31d10 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20  base file .     
31d20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75     ** after a su
31d30 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e  ccessful return.
31d40 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20   .        */.   
31d50 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
31d60 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70  3PagerCloseWal(p
31d70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  Pager);.        
31d80 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
31d90 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
31da0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
31db0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
31dc0 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
31dd0 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
31de0 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
31df0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
31e00 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
31e10 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
31e20 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
31e30 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
31e40 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
31e50 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
31e60 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
31e70 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
31e80 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
31e90 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
31ea0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
31eb0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
31ec0 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
31ed0 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
31ee0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
31ef0 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
31f00 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
31f10 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
31f20 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
31f30 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
31f40 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
31f50 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
31f60 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
31f70 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
31f80 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
31f90 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
31fa0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
31fb0 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
31fc0 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
31fd0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
31fe0 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
31ff0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
32000 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
32010 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
32020 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  /..  if( rc ){. 
32030 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
32040 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c    }.  eNew = sql
32050 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
32060 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
32070 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e  eNew);..  pOut->
32080 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
32090 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
320a0 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
320b0 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
320c0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
320d0 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
320e0 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
320f0 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
32100 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
32110 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
32120 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
32130 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
32140 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ng);.  break;.};
32150 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
32160 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
32170 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
32180 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
32190 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
321a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
321b0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
321c0 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
321d0 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
321e0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
321f0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
32200 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
32210 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
32220 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
32230 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
32240 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
32250 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
32260 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
32270 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
32280 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   {.  assert( p->
32290 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
322a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
322b0 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
322c0 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
322d0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
322e0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
322f0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
32300 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
32310 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
32320 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
32330 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
32340 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
32350 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
32360 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
32370 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
32380 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
32390 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
323a0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
323b0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
323c0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
323d0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
323e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
323f0 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
32400 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
32410 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
32420 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
32430 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
32440 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
32450 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
32460 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
32470 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
32480 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
32490 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
324a0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
324b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
324c0 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
324d0 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  t);.  VdbeBranch
324e0 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
324f0 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20  _DONE,2);.  if( 
32500 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
32510 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
32520 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20  TE_OK;.    goto 
32530 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
32540 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
32550 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78  f../* Opcode: Ex
32560 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  pire P1 * * * *.
32570 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63  **.** Cause prec
32580 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
32590 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57  ts to expire.  W
325a0 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73  hen an expired s
325b0 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65  tatement.** is e
325c0 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71  xecuted using sq
325d0 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20  lite3_step() it 
325e0 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f  will either auto
325f0 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70  matically.** rep
32600 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69  repare itself (i
32610 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61  f it was origina
32620 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e  lly created usin
32630 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
32640 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74  e_v2()).** or it
32650 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
32660 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a  SQLITE_SCHEMA..*
32670 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
32680 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
32690 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
326a0 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
326b0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
326c0 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
326d0 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
326e0 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  g statement is e
326f0 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  xpired..*/.case 
32700 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
32710 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
32720 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
32730 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
32740 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
32750 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
32760 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
32770 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
32780 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
32790 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
327a0 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
327b0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
327c0 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f  psis: iDb=P1 roo
327d0 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a  t=P2 write=P3.**
327e0 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
327f0 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
32800 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
32810 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
32820 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
32830 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
32840 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
32850 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
32860 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
32870 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
32880 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
32890 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
328a0 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
328b0 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
328c0 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
328d0 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
328e0 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
328f0 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
32900 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
32910 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
32920 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
32930 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
32940 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
32950 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
32960 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
32970 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
32980 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
32990 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
329a0 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
329b0 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
329c0 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
329d0 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
329e0 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
329f0 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 23  = (u8)pOp->p3;.#
32a00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
32a10 49 54 5f 43 4f 4e 43 55 52 52 45 4e 54 0a 20 20  IT_CONCURRENT.  
32a20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
32a30 26 26 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65  && db->bConcurre
32a40 6e 74 20 26 26 20 70 4f 70 2d 3e 70 32 3d 3d 31  nt && pOp->p2==1
32a50 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
32a60 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
32a70 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
32a80 70 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e  p, .        "can
32a90 6e 6f 74 20 6d 6f 64 69 66 79 20 64 61 74 61 62  not modify datab
32aa0 61 73 65 20 73 63 68 65 6d 61 20 77 69 74 68 69  ase schema withi
32ab0 6e 20 43 4f 4e 43 55 52 52 45 4e 54 20 74 72 61  n CONCURRENT tra
32ac0 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20  nsaction");.    
32ad0 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
32ae0 66 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c  f.  if( isWriteL
32af0 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66  ock || 0==(db->f
32b00 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64  lags&SQLITE_Read
32b10 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a  Uncommitted) ){.
32b20 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70      int p1 = pOp
32b30 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72  ->p1; .    asser
32b40 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64  t( p1>=0 && p1<d
32b50 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73  b->nDb );.    as
32b60 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
32b70 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
32b80 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  1) );.    assert
32b90 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
32ba0 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
32bb0 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
32bc0 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
32bd0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
32be0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
32bf0 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
32c00 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
32c10 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
32c20 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
32c30 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
32c40 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
32c50 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64 61 74  dbeError(p, "dat
32c60 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
32c70 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
32c80 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
32c90 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
32ca0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
32cb0 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
32cc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
32cd0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
32ce0 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
32cf0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
32d00 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
32d10 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
32d20 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
32d30 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
32d40 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
32d50 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
32d60 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
32d70 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
32d80 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
32d90 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
32da0 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
32db0 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
32dc0 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
32dd0 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
32de0 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
32df0 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
32e00 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
32e10 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
32e20 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
32e30 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
32e40 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
32e50 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
32e60 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
32e70 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
32e80 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
32e90 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
32ea0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
32eb0 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
32ec0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
32ed0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
32ee0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
32ef0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
32f00 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
32f10 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
32f20 72 65 61 74 65 20 50 31 20 50 32 20 2a 20 2a 20  reate P1 P2 * * 
32f30 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20  *.**.** P2 is a 
32f40 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f  register that ho
32f50 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  lds the name of 
32f60 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
32f70 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  in database .** 
32f80 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
32f90 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f 72 20  eate method for 
32fa0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
32fb0 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
32fc0 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  {.  Mem sMem;   
32fd0 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
32fe0 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
32ff0 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
33000 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
33010 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  zTab;  /* Name o
33020 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
33030 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74  ble */..  memset
33040 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
33050 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d  f(sMem));.  sMem
33060 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42  .db = db;.  /* B
33070 65 63 61 75 73 65 20 50 32 20 69 73 20 61 6c 77  ecause P2 is alw
33080 61 79 73 20 61 20 73 74 61 74 69 63 20 73 74 72  ays a static str
33090 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70 6f 73  ing, it is impos
330a0 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a 20 20  sible for the.  
330b0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
330c0 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69 6c 20  mCopy() to fail 
330d0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d  */.  assert( (aM
330e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67  em[pOp->p2].flag
330f0 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20  s & MEM_Str)!=0 
33100 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d  );.  assert( (aM
33110 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67  em[pOp->p2].flag
33120 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 29 21  s & MEM_Static)!
33130 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
33140 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
33150 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70  &sMem, &aMem[pOp
33160 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65 72 74  ->p2]);.  assert
33170 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
33180 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e  );.  zTab = (con
33190 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
331a0 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73 4d 65  _value_text(&sMe
331b0 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 54  m);.  assert( zT
331c0 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  ab || db->malloc
331d0 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20  Failed );.  if( 
331e0 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63 20 3d  zTab ){.    rc =
331f0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
33200 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e  Create(db, pOp->
33210 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45  p1, zTab, &p->zE
33220 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71  rrMsg);.  }.  sq
33230 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
33240 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 62 72  ase(&sMem);.  br
33250 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
33260 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
33270 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
33280 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33290 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
332a0 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
332b0 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
332c0 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
332d0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
332e0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
332f0 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
33300 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
33310 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
33320 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
33330 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e  estroy: {.  db->
33340 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72  nVDestroy++;.  r
33350 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
33360 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
33370 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
33380 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  z);.  db->nVDest
33390 72 6f 79 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a  roy--;.  break;.
333a0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
333b0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
333c0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
333d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
333e0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
333f0 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
33400 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
33410 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
33420 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
33430 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
33440 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
33450 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
33460 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
33470 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
33480 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
33490 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
334a0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
334b0 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
334c0 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
334d0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
334e0 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
334f0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
33500 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
33510 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
33520 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
33530 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
33540 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
33550 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
33560 20 30 3b 0a 20 20 70 56 43 75 72 20 3d 20 30 3b   0;.  pVCur = 0;
33570 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
33580 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
33590 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20  .  if( pVtab==0 
335a0 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e  || NEVER(pVtab->
335b0 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20  pModule==0) ){. 
335c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
335d0 4f 43 4b 45 44 3b 0a 20 20 20 20 62 72 65 61 6b  OCKED;.    break
335e0 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20  ;.  }.  pModule 
335f0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
33600 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
33610 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
33620 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65  pVCur);.  sqlite
33630 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
33640 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
33650 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63  f( SQLITE_OK==rc
33660 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69   ){.    /* Initi
33670 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74  alize sqlite3_vt
33680 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63  ab_cursor base c
33690 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 43 75  lass */.    pVCu
336a0 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
336b0 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
336c0 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72  lize vdbe cursor
336d0 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
336e0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
336f0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
33700 20 30 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f   0, -1, CURTYPE_
33710 56 54 41 42 29 3b 0a 20 20 20 20 69 66 28 20 70  VTAB);.    if( p
33720 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
33730 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56  r->uc.pVCur = pV
33740 43 75 72 3b 0a 20 20 20 20 20 20 70 56 74 61 62  Cur;.      pVtab
33750 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 20 20 7d 65  ->nRef++;.    }e
33760 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
33770 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  t( db->mallocFai
33780 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 70 4d 6f  led );.      pMo
33790 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 43  dule->xClose(pVC
337a0 75 72 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ur);.      goto 
337b0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
337c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
337d0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
337e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
337f0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
33800 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
33810 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
33820 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
33830 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
33840 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
33850 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
33860 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
33870 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
33880 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
33890 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
338a0 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
338b0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
338c0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
338d0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
338e0 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
338f0 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
33900 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
33910 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
33920 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
33930 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
33940 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
33950 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
33960 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
33970 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
33980 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
33990 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
339a0 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
339b0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
339c0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
339d0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
339e0 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
339f0 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
33a00 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
33a10 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
33a20 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
33a30 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
33a40 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
33a50 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
33a60 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
33a70 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
33a80 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
33a90 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
33aa0 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
33ab0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
33ac0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
33ad0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
33ae0 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
33af0 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
33b00 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
33b10 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
33b20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
33b30 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
33b40 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
33b50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
33b60 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
33b70 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
33b80 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
33b90 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
33ba0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
33bb0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
33bc0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
33bd0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
33be0 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c  or *pVCur;.  sql
33bf0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
33c00 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
33c10 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
33c20 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
33c30 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
33c40 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
33c50 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
33c60 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
33c70 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
33c80 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
33c90 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
33ca0 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
33cb0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
33cc0 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
33cd0 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
33ce0 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
33cf0 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20 70 43   );.  pVCur = pC
33d00 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20  ur->uc.pVCur;.  
33d10 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d 3e 70  pVtab = pVCur->p
33d20 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
33d30 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
33d40 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65  ;..  /* Grab the
33d50 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e   index number an
33d60 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  d argc parameter
33d70 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  s */.  assert( (
33d80 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45  pQuery->flags&ME
33d90 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72  M_Int)!=0 && pAr
33da0 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  gc->flags==MEM_I
33db0 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28  nt );.  nArg = (
33dc0 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a  int)pArgc->u.i;.
33dd0 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29    iQuery = (int)
33de0 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
33df0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
33e00 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
33e10 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41    res = 0;.  apA
33e20 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
33e30 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
33e40 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70  rg; i++){.    ap
33e50 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
33e60 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  i+1];.  }.  rc =
33e70 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
33e80 72 28 70 56 43 75 72 2c 20 69 51 75 65 72 79 2c  r(pVCur, iQuery,
33e90 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
33ea0 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69  , apArg);.  sqli
33eb0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
33ec0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
33ed0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
33ee0 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20  OK ){.    res = 
33ef0 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56  pModule->xEof(pV
33f00 43 75 72 29 3b 0a 20 20 7d 0a 20 20 70 43 75 72  Cur);.  }.  pCur
33f10 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
33f20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
33f30 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
33f40 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
33f50 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
33f60 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
33f70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
33f80 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
33f90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
33fa0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
33fb0 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50  pcode: VColumn P
33fc0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
33fd0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76  ynopsis: r[P3]=v
33fe0 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a  column(P2).**.**
33ff0 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
34000 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
34010 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
34020 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
34030 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
34040 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
34050 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
34060 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
34070 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
34080 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
34090 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
340a0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
340b0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
340c0 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
340d0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
340e0 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
340f0 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
34100 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
34110 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
34120 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
34130 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
34140 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
34150 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
34160 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
34170 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
34180 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
34190 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
341a0 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28  p, pDest);.  if(
341b0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
341c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
341d0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
341e0 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
341f0 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
34200 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74  r->uc.pVCur->pVt
34210 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
34220 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
34230 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
34240 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
34250 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
34260 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
34270 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65  text));.  sConte
34280 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b  xt.pOut = pDest;
34290 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
342a0 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
342b0 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  l);.  rc = pModu
342c0 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72  le->xColumn(pCur
342d0 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 73 43 6f  ->uc.pVCur, &sCo
342e0 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  ntext, pOp->p2);
342f0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
34300 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
34310 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e  tab);.  if( sCon
34320 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a  text.isError ){.
34330 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78      rc = sContex
34340 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  t.isError;.  }. 
34350 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
34360 67 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74  geEncoding(pDest
34370 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52  , encoding);.  R
34380 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
34390 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
343a0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
343b0 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20  SIZE(pDest);..  
343c0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
343d0 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20  emTooBig(pDest) 
343e0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
343f0 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
34400 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
34410 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34420 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
34430 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
34440 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
34450 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20  pcode: VNext P1 
34460 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
34470 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74  dvance virtual t
34480 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e  able P1 to the n
34490 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72  ext row in its r
344a0 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a  esult set and.**
344b0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
344c0 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66  tion P2.  Or, if
344d0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
344e0 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a  le has reached.*
344f0 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73  * the end of its
34500 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65   result set, the
34510 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  n fall through t
34520 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
34530 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
34540 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a  OP_VNext: {   /*
34550 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74   jump */.  sqlit
34560 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
34570 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
34580 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
34590 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64  .  int res;.  Vd
345a0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
345b0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43  .  res = 0;.  pC
345c0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
345d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
345e0 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
345f0 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
34600 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
34610 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65  llRow ){.    bre
34620 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
34630 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  = pCur->uc.pVCur
34640 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
34650 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
34660 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
34670 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b  Module->xNext );
34680 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
34690 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64  e xNext() method
346a0 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
346b0 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20  There is no way 
346c0 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64  for the.  ** und
346d0 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e  erlying implemen
346e0 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e  tation to return
346f0 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65   an error if one
34700 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20   occurs during. 
34710 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73   ** xNext(). Ins
34720 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f  tead, if an erro
34730 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69  r occurs, true i
34740 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69  s returned (indi
34750 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a  cating that .  *
34760 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  * data is availa
34770 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72  ble) and the err
34780 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  or code returned
34790 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72   when xColumn or
347a0 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72  .  ** some other
347b0 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20   method is next 
347c0 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73  invoked on the s
347d0 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ave virtual tabl
347e0 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
347f0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
34800 4e 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70 56  Next(pCur->uc.pV
34810 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Cur);.  sqlite3V
34820 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
34830 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
34840 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
34850 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
34860 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
34870 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 7d 0a 20  uc.pVCur);.  }. 
34880 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
34890 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20  (!res,2);.  if( 
348a0 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
348b0 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
348c0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
348d0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
348e0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
348f0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a  _interrupt;.  }.
34900 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
34910 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65  _interrupt;.}.#e
34920 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
34930 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
34940 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
34950 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
34960 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
34970 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20   VRename P1 * * 
34980 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
34990 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
349a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
349b0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
349c0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
349d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
349e0 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
349f0 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d  esponding xRenam
34a00 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61  e method. The va
34a10 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74  lue.** in regist
34a20 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20  er P1 is passed 
34a30 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67  as the zName arg
34a40 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65  ument to the xRe
34a50 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a  name method..*/.
34a60 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a  case OP_VRename:
34a70 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
34a80 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20  b *pVtab;.  Mem 
34a90 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62  *pName;..  pVtab
34aa0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
34ab0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65  ->pVtab;.  pName
34ac0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
34ad0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74  ];.  assert( pVt
34ae0 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
34af0 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74  name );.  assert
34b00 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61  ( memIsValid(pNa
34b10 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  me) );.  assert(
34b20 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
34b30 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
34b40 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61  ACE(pOp->p1, pNa
34b50 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  me);.  assert( p
34b60 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Name->flags & ME
34b70 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63  M_Str );.  testc
34b80 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
34b90 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a  =SQLITE_UTF8 );.
34ba0 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
34bb0 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
34bc0 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74  TF16BE );.  test
34bd0 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
34be0 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  ==SQLITE_UTF16LE
34bf0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
34c00 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
34c10 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49  ding(pName, SQLI
34c20 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20  TE_UTF8);.  if( 
34c30 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
34c40 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d  .    rc = pVtab-
34c50 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
34c60 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e  e(pVtab, pName->
34c70 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  z);.    sqlite3V
34c80 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
34c90 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70  p, pVtab);.    p
34ca0 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
34cb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
34cc0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
34cd0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34ce0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
34cf0 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20  : VUpdate P1 P2 
34d00 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
34d10 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40  psis: data=r[P3@
34d20 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P2].**.** P4 is 
34d30 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
34d40 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
34d50 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
34d60 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
34d70 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
34d80 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
34d90 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
34da0 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
34db0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
34dc0 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
34dd0 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
34de0 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
34df0 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
34e00 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
34e10 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
34e20 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
34e30 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
34e40 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
34e50 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
34e60 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
34e70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
34e80 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
34e90 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
34ea0 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
34eb0 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
34ec0 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
34ed0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
34ee0 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
34ef0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
34f00 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
34f10 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
34f20 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
34f30 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
34f40 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
34f50 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
34f60 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
34f70 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
34f80 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
34f90 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
34fa0 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
34fb0 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
34fc0 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
34fd0 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
34fe0 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
34ff0 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
35000 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
35010 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
35020 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
35030 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
35040 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
35050 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
35060 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
35070 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
35080 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
35090 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
350a0 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
350b0 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
350c0 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
350d0 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
350e0 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
350f0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
35100 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
35110 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
35120 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
35130 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
35140 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  rted..**.** P5 i
35150 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74 69  s the error acti
35160 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c  ons (OE_Replace,
35170 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e   OE_Fail, OE_Ign
35180 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20  ore, etc) to.** 
35190 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73  apply in the cas
351a0 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e  e of a constrain
351b0 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20  t failure on an 
351c0 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65  insert or update
351d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
351e0 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
351f0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
35200 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
35210 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
35220 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
35230 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
35240 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
35250 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
35260 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pX;..  assert( 
35270 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20  pOp->p2==1      
35280 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
35290 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e  _Fail   || pOp->
352a0 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  p5==OE_Rollback 
352b0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
352c0 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20  p5==OE_Abort || 
352d0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
352e0 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  re || pOp->p5==O
352f0 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20  E_Replace.  );. 
35300 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
35310 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74  Only==0 );.  pVt
35320 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
35330 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28  ab->pVtab;.  if(
35340 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56   pVtab==0 || NEV
35350 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  ER(pVtab->pModul
35360 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  e==0) ){.    rc 
35370 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
35380 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
35390 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
353a0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41  b->pModule;.  nA
353b0 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
353c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
353d0 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
353e0 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f    if( ALWAYS(pMo
353f0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29  dule->xUpdate) )
35400 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43  {.    u8 vtabOnC
35410 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74  onflict = db->vt
35420 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20  abOnConflict;.  
35430 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
35440 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d  rg;.    pX = &aM
35450 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
35460 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
35470 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73  ; i++){.      as
35480 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
35490 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  (pX) );.      me
354a0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
354b0 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41  , pX);.      apA
354c0 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20  rg[i] = pX;.    
354d0 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20    pX++;.    }.  
354e0 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
354f0 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  lict = pOp->p5;.
35500 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
35510 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c  ->xUpdate(pVtab,
35520 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72   nArg, apArg, &r
35530 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76  owid);.    db->v
35540 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
35550 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
35560 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
35570 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
35580 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
35590 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
355a0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20  pOp->p1 ){.     
355b0 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20   assert( nArg>1 
355c0 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28  && apArg[0] && (
355d0 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26  apArg[0]->flags&
355e0 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20  MEM_Null) );.   
355f0 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64     db->lastRowid
35600 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72   = lastRowid = r
35610 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20  owid;.    }.    
35620 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
35630 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
35640 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61   && pOp->p4.pVta
35650 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29  b->bConstraint )
35660 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
35670 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p5==OE_Ignore )
35680 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
35690 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
356a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
356b0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
356c0 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  ((pOp->p5==OE_Re
356d0 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72  place) ? OE_Abor
356e0 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  t : pOp->p5);.  
356f0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
35700 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  .      p->nChang
35710 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e++;.    }.  }. 
35720 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
35730 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
35740 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
35750 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
35760 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
35770 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
35780 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
35790 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
357a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
357b0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
357c0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
357d0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
357e0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
357f0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
35800 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
35810 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
35820 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
35830 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
35840 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
35850 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
35860 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
35870 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
35880 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
35890 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
358a0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
358b0 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
358c0 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
358d0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
358e0 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
358f0 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
35900 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
35910 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
35920 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
35930 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
35940 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
35950 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
35960 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
35970 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
35980 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
35990 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
359a0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
359b0 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
359c0 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
359d0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
359e0 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
359f0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
35a00 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
35a10 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a  ewMax;.  Btree *
35a20 70 42 74 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  pBt;..  pOut = o
35a30 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
35a40 20 70 4f 70 29 3b 0a 20 20 70 42 74 20 3d 20 64   pOp);.  pBt = d
35a50 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
35a60 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20  pBt;.  newMax = 
35a70 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  0;.  if( pOp->p3
35a80 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d   ){.    newMax =
35a90 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
35aa0 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20  tPage(pBt);.    
35ab0 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e  if( newMax < (un
35ac0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29  signed)pOp->p3 )
35ad0 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67   newMax = (unsig
35ae0 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  ned)pOp->p3;.  }
35af0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
35b00 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61  qlite3BtreeMaxPa
35b10 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77  geCount(pBt, new
35b20 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Max);.  break;.}
35b30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63  .#endif.../* Opc
35b40 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a  ode: Init * P2 *
35b50 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
35b60 73 3a 20 20 53 74 61 72 74 20 61 74 20 50 32 0a  s:  Start at P2.
35b70 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63  **.** Programs c
35b80 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
35b90 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
35ba0 20 6f 70 63 6f 64 65 20 61 73 20 74 68 65 20 76   opcode as the v
35bb0 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63  ery first.** opc
35bc0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72  ode..**.** If tr
35bd0 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  acing is enabled
35be0 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33   (by the sqlite3
35bf0 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66  _trace()) interf
35c00 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ace, then.** the
35c10 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f   UTF-8 string co
35c20 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73  ntained in P4 is
35c30 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20   emitted on the 
35c40 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a  trace callback..
35c50 2a 2a 20 4f 72 20 69 66 20 50 34 20 69 73 20 62  ** Or if P4 is b
35c60 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65 20 73 74  lank, use the st
35c70 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
35c80 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a   sqlite3_sql()..
35c90 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
35ca0 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  ot zero, jump to
35cb0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
35cc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74  .*/.case OP_Init
35cd0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
35ce0 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a  jump */.  char *
35cf0 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a  zTrace;.  char *
35d00 7a 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  z;..#ifndef SQLI
35d10 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
35d20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20  if( db->xTrace. 
35d30 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65    && !p->doingRe
35d40 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63  run.   && (zTrac
35d50 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
35d60 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
35d70 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
35d80 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64     z = sqlite3Vd
35d90 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a  beExpandSql(p, z
35da0 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e  Trace);.    db->
35db0 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
35dc0 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71  eArg, z);.    sq
35dd0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
35de0 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53  z);.  }.#ifdef S
35df0 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f  QLITE_USE_FCNTL_
35e00 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d  TRACE.  zTrace =
35e10 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
35e20 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
35e30 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65  l);.  if( zTrace
35e40 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
35e50 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
35e60 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
35e70 20 20 20 69 66 28 20 44 62 4d 61 73 6b 54 65 73     if( DbMaskTes
35e80 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
35e90 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  i)==0 ) continue
35ea0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
35eb0 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
35ec0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
35ed0 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
35ee0 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a  TRACE, zTrace);.
35ef0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
35f00 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46   /* SQLITE_USE_F
35f10 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69  CNTL_TRACE */.#i
35f20 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
35f30 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61  G.  if( (db->fla
35f40 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54  gs & SQLITE_SqlT
35f50 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28  race)!=0.   && (
35f60 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
35f70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
35f80 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
35f90 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
35fa0 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d  ebugPrintf("SQL-
35fb0 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54  trace: %s\n", zT
35fc0 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  race);.  }.#endi
35fd0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
35fe0 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  G */.#endif /* S
35ff0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
36000 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
36010 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2 ) goto jump_to
36020 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
36030 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
36040 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
36050 54 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 75  TS./* Opcode: Cu
36060 72 73 6f 72 48 69 6e 74 20 50 31 20 2a 20 2a 20  rsorHint P1 * * 
36070 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 72 6f 76 69  P4 *.**.** Provi
36080 64 65 20 61 20 68 69 6e 74 20 74 6f 20 63 75 72  de a hint to cur
36090 73 6f 72 20 50 31 20 74 68 61 74 20 69 74 20 6f  sor P1 that it o
360a0 6e 6c 79 20 6e 65 65 64 73 20 74 6f 20 72 65 74  nly needs to ret
360b0 75 72 6e 20 72 6f 77 73 20 74 68 61 74 0a 2a 2a  urn rows that.**
360c0 20 73 61 74 69 73 66 79 20 74 68 65 20 45 78 70   satisfy the Exp
360d0 72 20 69 6e 20 50 34 2e 20 20 54 4b 5f 52 45 47  r in P4.  TK_REG
360e0 49 53 54 45 52 20 74 65 72 6d 73 20 69 6e 20 74  ISTER terms in t
360f0 68 65 20 50 34 20 65 78 70 72 65 73 73 69 6f 6e  he P4 expression
36100 20 72 65 66 65 72 0a 2a 2a 20 74 6f 20 76 61 6c   refer.** to val
36110 75 65 73 20 63 75 72 72 65 6e 74 6c 79 20 68 65  ues currently he
36120 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 73 2e  ld in registers.
36130 20 20 54 4b 5f 43 4f 4c 55 4d 4e 20 74 65 72 6d    TK_COLUMN term
36140 73 20 69 6e 20 74 68 65 20 50 34 0a 2a 2a 20 65  s in the P4.** e
36150 78 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72 20  xpression refer 
36160 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  to columns in th
36170 65 20 62 2d 74 72 65 65 20 74 6f 20 77 68 69 63  e b-tree to whic
36180 68 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 70  h cursor P1 is p
36190 6f 69 6e 74 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65  ointing..*/.case
361a0 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 3a 20   OP_CursorHint: 
361b0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
361c0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
361d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
361e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
361f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
36200 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 45 58 50  ->p4type==P4_EXP
36210 52 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  R );.  pC = p->a
36220 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
36230 20 69 66 28 20 70 43 20 29 7b 0a 20 20 20 20 61   if( pC ){.    a
36240 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
36250 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
36260 45 45 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  EE );.    sqlite
36270 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
36280 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
36290 20 42 54 52 45 45 5f 48 49 4e 54 5f 52 41 4e 47   BTREE_HINT_RANG
362a0 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E,.             
362b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
362c0 70 2d 3e 70 34 2e 70 45 78 70 72 2c 20 61 4d 65  p->p4.pExpr, aMe
362d0 6d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  m);.  }.  break;
362e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
362f0 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
36300 52 5f 48 49 4e 54 53 20 2a 2f 0a 0a 2f 2a 20 4f  R_HINTS */../* O
36310 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20  pcode: Noop * * 
36320 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e  * * *.**.** Do n
36330 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e  othing.  This in
36340 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74  struction is oft
36350 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a  en useful as a j
36360 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69  ump.** destinati
36370 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65  on..*/./*.** The
36380 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f   magic Explain o
36390 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69  pcode are only i
363a0 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70  nserted when exp
363b0 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a  lain==2 (which.*
363c0 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e  * is to say when
363d0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
363e0 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69  RY PLAN syntax i
363f0 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73  s used.).** This
36400 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20   opcode records 
36410 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
36420 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20   the optimizer. 
36430 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68   It is the.** th
36440 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f  e same as a no-o
36450 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73  p.  This opcodes
36460 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e  never appears in
36470 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72   a real VM progr
36480 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20  am..*/.default: 
36490 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  {          /* Th
364a0 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f  is is really OP_
364b0 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c  Noop and OP_Expl
364c0 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ain */.  assert(
364d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
364e0 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Noop || pOp->op
364f0 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
36500 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
36510 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
36520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
36560 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74  * The cases of t
36570 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
36580 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c  ent above this l
36590 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62  ine should all b
365a0 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79  e indented.** by
365b0 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20   6 spaces.  But 
365c0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20  the left-most 6 
365d0 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e  spaces have been
365e0 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72   removed to impr
365f0 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61  ove the.** reada
36600 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68  bility.  From th
36610 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e  is point on down
36620 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64  , the normal ind
36630 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61  entation rules a
36640 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a  re.** restored..
36650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20  *************/. 
366a0 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42     }..#ifdef VDB
366b0 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a  E_PROFILE.    {.
366c0 20 20 20 20 20 20 75 36 34 20 65 6e 64 54 69 6d        u64 endTim
366d0 65 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  e = sqlite3Hwtim
366e0 65 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 65  e();.      if( e
366f0 6e 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20 70  ndTime>start ) p
36700 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65 73 20 2b  OrigOp->cycles +
36710 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61 72  = endTime - star
36720 74 3b 0a 20 20 20 20 20 20 70 4f 72 69 67 4f 70  t;.      pOrigOp
36730 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23  ->cnt++;.    }.#
36740 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68  endif..    /* Th
36750 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65  e following code
36760 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f   adds nothing to
36770 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63   the actual func
36780 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a  tionality.    **
36790 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   of the program.
367a0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72    It is only her
367b0 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e  e for testing an
367c0 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20  d debugging..   
367d0 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72   ** On the other
367e0 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62   hand, it does b
367f0 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65  urn CPU cycles e
36800 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67  very time throug
36810 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61  h.    ** the eva
36820 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f  luator loop.  So
36830 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74   we can leave it
36840 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47   out when NDEBUG
36850 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
36860 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42   */.#ifndef NDEB
36870 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  UG.    assert( p
36880 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20 26 26 20  Op>=&aOp[-1] && 
36890 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 2d  pOp<&aOp[p->nOp-
368a0 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  1] );..#ifdef SQ
368b0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
368c0 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
368d0 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
368e0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  ){.      if( rc!
368f0 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72 63 3d  =0 ) printf("rc=
36900 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20  %d\n",rc);.     
36910 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70   if( pOrigOp->op
36920 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f  flags & (OPFLG_O
36930 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20  UT2) ){.        
36940 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f  registerTrace(pO
36950 72 69 67 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  rigOp->p2, &aMem
36960 5b 70 4f 72 69 67 4f 70 2d 3e 70 32 5d 29 3b 0a  [pOrigOp->p2]);.
36970 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
36980 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c 61  ( pOrigOp->opfla
36990 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20  gs & OPFLG_OUT3 
369a0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
369b0 74 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f 70  terTrace(pOrigOp
369c0 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 72 69  ->p3, &aMem[pOri
369d0 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  gOp->p3]);.     
369e0 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
369f0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
36a00 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
36a10 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
36a20 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
36a30 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
36a40 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
36a50 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
36a60 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
36a70 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
36a80 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
36a90 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
36aa0 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
36ab0 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
36ac0 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
36ad0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
36ae0 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
36af0 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c  .  testcase( sql
36b00 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
36b10 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71  .xLog!=0 );.  sq
36b20 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73  lite3_log(rc, "s
36b30 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20  tatement aborts 
36b40 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c  at %d: [%s] %s",
36b50 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
36b60 20 20 20 20 20 28 69 6e 74 29 28 70 4f 70 20 2d       (int)(pOp -
36b70 20 61 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c 2c 20   aOp), p->zSql, 
36b80 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73  p->zErrMsg);.  s
36b90 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
36ba0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
36bb0 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
36bc0 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ) db->mallocFail
36bd0 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53  ed = 1;.  rc = S
36be0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69  QLITE_ERROR;.  i
36bf0 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  f( resetSchemaOn
36c00 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73  Fault>0 ){.    s
36c10 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
36c20 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63  hema(db, resetSc
36c30 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a  hemaOnFault-1);.
36c40 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69    }..  /* This i
36c50 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f  s the only way o
36c60 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65  ut of this proce
36c70 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74  dure.  We have t
36c80 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74  o.  ** release t
36c90 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74  he mutexes on bt
36ca0 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61  rees that were a
36cb0 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20  cquired at the. 
36cc0 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65   ** top. */.vdbe
36cd0 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c  _return:.  db->l
36ce0 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
36cf0 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73 65  owid;.  testcase
36d00 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a 20  ( nVmStep>0 );. 
36d10 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
36d20 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56  ITE_STMTSTATUS_V
36d30 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74 29  M_STEP] += (int)
36d40 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74  nVmStep;.  sqlit
36d50 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a  e3VdbeLeave(p);.
36d60 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20    return rc;..  
36d70 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
36d80 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  if a string or b
36d90 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20  lob larger than 
36da0 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
36db0 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e  H.  ** is encoun
36dc0 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f  tered..  */.too_
36dd0 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  big:.  sqlite3Vd
36de0 62 65 45 72 72 6f 72 28 70 2c 20 22 73 74 72 69  beError(p, "stri
36df0 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
36e00 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
36e10 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
36e20 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
36e30 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
36e40 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c  o here if a mall
36e50 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f  oc() fails..  */
36e60 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d  .no_mem:.  db->m
36e70 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
36e80 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72  .  sqlite3VdbeEr
36e90 72 6f 72 28 70 2c 20 22 6f 75 74 20 6f 66 20 6d  ror(p, "out of m
36ea0 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
36eb0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
36ec0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
36ed0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
36ee0 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
36ef0 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
36f00 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
36f10 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
36f20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
36f30 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
36f40 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
36f50 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
36f60 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
36f70 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
36f80 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
36f90 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
36fa0 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
36fb0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
36fc0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
36fd0 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
36fe0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
36ff0 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
37000 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
37010 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
37020 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
37030 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
37040 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
37050 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
37060 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
37070 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
37080 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
37090 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
370a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
370b0 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
370c0 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56  = rc;.  sqlite3V
370d0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
370e0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
370f0 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62  rc));.  goto vdb
37100 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a  e_error_halt;.}.