/ Hex Artifact Content
Login

Artifact f84d2241bfe4f3a8f1a335055f2591552df7c0e0:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2b00: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2b10: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2b20: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2b30: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2b40: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2b50: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2b60: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2b70: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2b80: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2b90: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2ba0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2bb0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2bc0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2bd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2be0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2bf0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2c00: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2c10: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2c20: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2c30: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2c40: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2c50: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2c60: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2c70: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
2c80: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2c90: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
2ca0: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
2cb0: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
2cc0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2cd0: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2ce0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2cf0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
2d00: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2d10: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
2d20: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
2d30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2d40: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2d50: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2d60: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2d70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2d80: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2d90: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2da0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2db0: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2dc0: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2dd0: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2de0: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2df0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2e00: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2e10: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2e20: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
2e30: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
2e40: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
2e50: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
2e60: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
2e70: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
2e80: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
2e90: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
2ea0: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
2eb0: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
2ec0: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
2ed0: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
2ee0: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
2ef0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
2f00: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
2f10: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
2f20: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
2f30: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
2f40: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
2f50: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2f60: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
2f70: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
2f80: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
2f90: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2fa0: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
2fb0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2fc0: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
2fd0: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
2fe0: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
2ff0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
3000: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
3010: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
3020: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
3030: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
3040: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3050: 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b   return MEM_Int;
3060: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45  .  }.  return ME
3070: 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  M_Real;.}../*.**
3080: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65   Return the nume
3090: 72 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65  ric type for pMe
30a0: 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e  m, either MEM_In
30b0: 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72  t or MEM_Real or
30c0: 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65   both or.** none
30d0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65  .  .**.** Unlike
30e0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
30f0: 69 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f  inity(), this ro
3100: 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d  utine does not m
3110: 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67  odify pMem->flag
3120: 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65  s..** But it doe
3130: 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75 2e 72 20  s set pMem->u.r 
3140: 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70  and pMem->u.i ap
3150: 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a  propriately..*/.
3160: 73 74 61 74 69 63 20 75 31 36 20 6e 75 6d 65 72  static u16 numer
3170: 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d  icType(Mem *pMem
3180: 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  ){.  if( pMem->f
3190: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
31a0: 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20  MEM_Real) ){.   
31b0: 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c   return pMem->fl
31c0: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
31d0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20  EM_Real);.  }.  
31e0: 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  if( pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
3200: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  lob) ){.    retu
3210: 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69  rn computeNumeri
3220: 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d  cType(pMem);.  }
3230: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
3240: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3250: 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20  BUG./*.** Write 
3260: 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65  a nice string re
3270: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3280: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
3290: 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74  cell pMem.** int
32a0: 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c  o buffer zBuf, l
32b0: 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76  ength nBuf..*/.v
32c0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
32d0: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65  emPrettyPrint(Me
32e0: 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a  m *pMem, char *z
32f0: 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43  Buf){.  char *zC
3300: 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74  sr = zBuf;.  int
3310: 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   f = pMem->flags
3320: 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
3330: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e  t char *const en
3340: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29  cnames[] = {"(X)
3350: 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45  ", "(8)", "(16LE
3360: 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a  )", "(16BE)"};..
3370: 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62    if( f&MEM_Blob
3380: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
3390: 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69     char c;.    i
33a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
33b0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b  {.      c = 'z';
33c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
33d0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
33e0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
33f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3400: 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29  f & MEM_Static )
3410: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b  {.      c = 't';
3420: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3430: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3440: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3450: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3460: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3470: 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20      c = 'e';.   
3480: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3490: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
34a0: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
34b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d  }else{.      c =
34c0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   's';.    }..   
34d0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
34e0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63  f(100, zCsr, "%c
34f0: 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20  ", c);.    zCsr 
3500: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3510: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  30(zCsr);.    sq
3520: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3530: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3540: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3550: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3560: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3570: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3580: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
3590: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
35a0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
35b0: 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28  zCsr, "%02X", ((
35c0: 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26  int)pMem->z[i] &
35d0: 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a   0xFF));.      z
35e0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
35f0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3600: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b    }.    for(i=0;
3610: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
3620: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3630: 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  char z = pMem->z
3640: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
3650: 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a  <32 || z>126 ) *
3660: 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20  zCsr++ = '.';.  
3670: 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b      else *zCsr++
3680: 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = z;.    }..   
3690: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
36a0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25  f(100, zCsr, "]%
36b0: 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  s", encnames[pMe
36c0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43  m->enc]);.    zC
36d0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
36e0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
36f0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
3700: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
3710: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3720: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
3730: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
3740: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3750: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3760: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
3770: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
3780: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3790: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
37a0: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
37b0: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
37c0: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
37d0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
37e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
37f0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3800: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3810: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3820: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
3830: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3840: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3850: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3860: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3870: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3880: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
3890: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
38a0: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
38b0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
38c0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
38d0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
38e0: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
38f0: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
3900: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
3910: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3920: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
3930: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
3940: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3950: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3960: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3970: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
3980: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
3990: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
39a0: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
39b0: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
39c0: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
39d0: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
39e0: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
39f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3a00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
3a10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
3a20: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3a30: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
3a40: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
3a50: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
3a60: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3a70: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3a80: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3a90: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3aa0: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
3ab0: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3ac0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
3ad0: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
3ae0: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
3af0: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
3b00: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3b10: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65  memTracePrint(Me
3b20: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3b30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65  flags & MEM_Unde
3b40: 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69  fined ){.    pri
3b50: 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22  ntf(" undefined"
3b60: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3b70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
3b80: 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ll ){.    printf
3b90: 28 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c  (" NULL");.  }el
3ba0: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
3bb0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3bc0: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
3bd0: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
3be0: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
3bf0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
3c00: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3c10: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
3c20: 20 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c    printf(" i:%ll
3c30: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3c40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3c50: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3c60: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3c70: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3c80: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3c90: 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  r:%g", p->u.r);.
3ca0: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
3cb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3cc0: 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20  M_RowSet ){.    
3cd0: 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65 74  printf(" (rowset
3ce0: 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  )");.  }else{.  
3cf0: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
3d00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3d10: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
3d20: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70 72  p, zBuf);.    pr
3d30: 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75 66  intf(" %s", zBuf
3d40: 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20  );.  }.}.static 
3d50: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
3d60: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
3d70: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
3d80: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
3d90: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
3da0: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
3db0: 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66  ("\n");.}.#endif
3dc0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3dd0: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3de0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
3df0: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
3e00: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
3e10: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3e20: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
3e30: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3e40: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
3e50: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
3e60: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
3e70: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
3e80: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
3e90: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
3ea0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
3eb0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
3ec0: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
3ed0: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
3ee0: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
3ef0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
3f00: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3f10: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
3f20: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
3f30: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
3f40: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
3f50: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
3f60: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
3f70: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
3f80: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
3f90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
3fa0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
3fb0: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
3fc0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
3fd0: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
3fe0: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
3ff0: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4000: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4010: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4020: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4030: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4040: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
4050: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
4060: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
4070: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
4080: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
4090: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
40a0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
40b0: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
40c0: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
40d0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
40e0: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
40f0: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4100: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4110: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
4120: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
4130: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
4140: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
4150: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
4160: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  er value..*/.sta
4170: 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  tic SQLITE_NOINL
4180: 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65  INE Mem *out2Pre
4190: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
41a0: 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73  (Mem *pOut){.  s
41b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
41c0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f  Null(pOut);.  pO
41d0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
41e0: 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Int;.  return pO
41f0: 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d  ut;.}.static Mem
4200: 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65   *out2Prerelease
4210: 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70  (Vdbe *p, VdbeOp
4220: 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70   *pOp){.  Mem *p
4230: 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Out;.  assert( p
4240: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
4250: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
4260: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
4270: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
4280: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
4290: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
42a0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
42b0: 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
42c0: 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 0a 20 20  amic(pOut) ){.  
42d0: 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65    return out2Pre
42e0: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
42f0: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
4300: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
4310: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
4320: 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d  return pOut;.  }
4330: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  .}.../*.** Execu
4340: 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20  te as much of a 
4350: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20  VDBE program as 
4360: 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20  we can..** This 
4370: 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73  is the core of s
4380: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20  qlite3_step().  
4390: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
43a0: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
43b0: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
43c0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
43d0: 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f  E */.){.  Op *aO
43e0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20  p = p->aOp;     
43f0: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4400: 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a  p->aOp */.  Op *
4410: 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20  pOp = aOp;      
4420: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
4430: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23  t operation */.#
4440: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4450: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
4460: 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45  ned(VDBE_PROFILE
4470: 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b  ).  Op *pOrigOp;
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4490: 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61  * Value of pOp a
44a0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
44b0: 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a   loop */.#endif.
44c0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
44d0: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
44e0: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
44f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4500: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4510: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4520: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4530: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4540: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4550: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4560: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
4570: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
4580: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
4590: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
45a0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
45b0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
45c0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
45d0: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
45e0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
45f0: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4600: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4610: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4620: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
4630: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4640: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4650: 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65  LLBACK.  unsigne
4660: 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  d nProgressLimit
4670: 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78   = 0;/* Invoke x
4680: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4690: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
46a0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
46b0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
46c0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
46d0: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
46e0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
46f0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4700: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4710: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4720: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4730: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4740: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4750: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4760: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4770: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4780: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4790: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
47a0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
47b0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
47c0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
47d0: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
47e0: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
47f0: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36  _Compare */.  i6
4800: 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  4 lastRowid = db
4810: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
4820: 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66 20   Saved value of 
4830: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
4840: 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66 20  ROWID */.#ifdef 
4850: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
4860: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
4870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
4880: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4890: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
48a0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
48b0: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
48c0: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
48d0: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
48e0: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
48f0: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4900: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4910: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4920: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4930: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4940: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4950: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4960: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4970: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4980: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4990: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
49a0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
49b0: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
49c0: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
49d0: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
49e0: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
49f0: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
4a00: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
4a10: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4a20: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4a30: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4a40: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4a50: 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  _OK;.  p->iCurre
4a60: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4a70: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4a80: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4a90: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4aa0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4ab0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4ac0: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4ad0: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4ae0: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4af0: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4b00: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4b10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4b20: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4b30: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4b40: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4b50: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4b60: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4b70: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4b80: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4b90: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4ba0: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4bb0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4bc0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4bd0: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4be0: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4bf0: 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
4c00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4c10: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4c20: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4c30: 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20   p->pc==0.   && 
4c40: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4c50: 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74  (SQLITE_VdbeList
4c60: 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45  ing|SQLITE_VdbeE
4c70: 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72  QP|SQLITE_VdbeTr
4c80: 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  ace))!=0.  ){.  
4c90: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
4ca0: 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73   once = 1;.    s
4cb0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4cc0: 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70  ql(p);.    if( p
4cd0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4ce0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4cf0: 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66   ){.      printf
4d00: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
4d10: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
4d20: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
4d30: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
4d40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4d50: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
4d60: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
4d70: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4d80: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4d90: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
4da0: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ){.      for(i=0
4db0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4dc0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
4dd0: 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[i].opcode==OP_
4de0: 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
4df0: 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20       if( once ) 
4e00: 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65  printf("VDBE Que
4e10: 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20  ry Plan:\n");.  
4e20: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
4e30: 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34  %s\n", aOp[i].p4
4e40: 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  .z);.          o
4e50: 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nce = 0;.       
4e60: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
4e70: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4e80: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4e90: 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e  dbeTrace )  prin
4ea0: 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c  tf("VDBE Trace:\
4eb0: 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n");.  }.  sqlit
4ec0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4ed0: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4ee0: 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63  r(pOp=&aOp[p->pc
4ef0: 5d 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  ]; rc==SQLITE_OK
4f00: 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 61 73  ; pOp++){.    as
4f10: 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26  sert( pOp>=aOp &
4f20: 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f  & pOp<&aOp[p->nO
4f30: 70 5d 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  p]);.    if( db-
4f40: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
4f50: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66  goto no_mem;.#if
4f60: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
4f70: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
4f80: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
4f90: 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70  ndif.    nVmStep
4fa0: 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
4fb0: 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
4fc0: 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66 28  ANSTATUS.    if(
4fd0: 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e   p->anExec ) p->
4fe0: 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70  anExec[(int)(pOp
4ff0: 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66  -aOp)]++;.#endif
5000: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
5010: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
5020: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
5030: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
5040: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5050: 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
5060: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5070: 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
5080: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
5090: 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74  tOp(stdout, (int
50a0: 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f  )(pOp - aOp), pO
50b0: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
50c0: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
50d0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
50e0: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
50f0: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
5100: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
5110: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
5120: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
5130: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
5140: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5150: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
5160: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5170: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
5180: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5190: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
51a0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
51b0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
51c0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
51d0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
51e0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
51f0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
5200: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67   Sanity checking
5210: 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e   on other operan
5220: 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ds */.#ifdef SQL
5230: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 61 73  ITE_DEBUG.    as
5240: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
5250: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
5260: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5270: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
5280: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5290: 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20  & OPFLG_IN1)!=0 
52a0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
52b0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
52c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
52d0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
52e0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
52f0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5300: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5310: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p1]) );.      a
5320: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5330: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5340: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5350: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p1]) );.      RE
5360: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5370: 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p1, &aMem[pOp-
5380: 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p1]);.    }.   
5390: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
53a0: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21  gs & OPFLG_IN2)!
53b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
53c0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
53d0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
53e0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
53f0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
5400: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5410: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5420: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5430: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5440: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5450: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5460: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5470: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5480: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
5490: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
54a0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
54b0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
54c0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
54d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
54e0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
54f0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
5500: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
5510: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5520: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
5530: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5540: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5550: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5560: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5570: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5580: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5590: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
55a0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
55b0: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
55c0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
55d0: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
55e0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
55f0: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5600: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5610: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5620: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5630: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5640: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5650: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5660: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5670: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5680: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5690: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
56a0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
56b0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
56c0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
56d0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
56e0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
56f0: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  >p3]);.    }.#en
5700: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
5710: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
5720: 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52   defined(VDBE_PR
5730: 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67  OFILE).    pOrig
5740: 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66  Op = pOp;.#endif
5750: 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20  .  .    switch( 
5760: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
5770: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
5780: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5790: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 0a 2a  **************.*
57c0: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
57d0: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
57e0: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
57f0: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
5800: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
5810: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
5820: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
5830: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
5840: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
5850: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
5860: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
5870: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
5880: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
5890: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
58a0: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
58b0: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
58c0: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
58d0: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
58e0: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
58f0: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
5900: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
5910: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
5920: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
5930: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
5940: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
5950: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
5960: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
5970: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
5980: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
5990: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
59a0: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
59b0: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
59c0: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
59d0: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
59e0: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
59f0: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
5a00: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
5a10: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
5a20: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
5a30: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
5a40: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
5a50: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
5a60: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
5a70: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
5a80: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
5a90: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
5aa0: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
5ab0: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
5ac0: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
5ad0: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
5ae0: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
5af0: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
5b00: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
5b10: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
5b20: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
5b30: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
5b40: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
5b50: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
5b60: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
5b70: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
5b80: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
5b90: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
5ba0: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
5bb0: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
5bc0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
5bd0: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
5be0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
5bf0: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  code..**.** Othe
5c00: 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68  r keywords in th
5c10: 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66  e comment that f
5c20: 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65  ollows each case
5c30: 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20   are used to.** 
5c40: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50  construct the OP
5c50: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
5c60: 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69  value that initi
5c70: 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f  alizes opcodePro
5c80: 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77  perty[]..** Keyw
5c90: 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e  ords include: in
5ca0: 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74  1, in2, in3, out
5cb0: 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a  2, out3.  See.**
5cc0: 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61   the mkopcodeh.a
5cd0: 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64  wk script for ad
5ce0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
5cf0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75  tion..**.** Docu
5d00: 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20  mentation about 
5d10: 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20  VDBE opcodes is 
5d20: 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61  generated by sca
5d30: 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a  nning this file.
5d40: 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20  ** for lines of 
5d50: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70  that contain "Op
5d60: 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69  code:".  That li
5d70: 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65  ne and all subse
5d80: 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74  quent.** comment
5d90: 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20   lines are used 
5da0: 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
5db0: 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  n of the opcode.
5dc0: 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69  html documentati
5dd0: 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  on.** file..**.*
5de0: 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a  * SUMMARY:.**.**
5df0: 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20       Formatting 
5e00: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
5e10: 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61  scripts that sca
5e20: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20  n this file..** 
5e30: 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61      Do not devia
5e40: 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d  te from the form
5e50: 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72  atting style cur
5e60: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a  rently in use..*
5e70: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *.**************
5e80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 2f  ***************/
5ec0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
5ed0: 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  to * P2 * * *.**
5ee0: 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69  .** An unconditi
5ef0: 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64  onal jump to add
5f00: 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ress P2..** The 
5f10: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
5f20: 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62   executed will b
5f30: 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74  e .** the one at
5f40: 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74   index P2 from t
5f50: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a  he beginning of.
5f60: 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  ** the program..
5f70: 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72  **.** The P1 par
5f80: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63  ameter is not ac
5f90: 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74  tually used by t
5fa0: 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77  his opcode.  How
5fb0: 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73  ever, it.** is s
5fc0: 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20  ometimes set to 
5fd0: 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61  1 instead of 0 a
5fe0: 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
5ff0: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
6000: 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  ll.** that this 
6010: 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74  Goto is the bott
6020: 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64  om of a loop and
6030: 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20   that the lines 
6040: 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20  from P2 down.** 
6050: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  to the current l
6060: 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ine should be in
6070: 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41  dented for EXPLA
6080: 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  IN output..*/.ca
6090: 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20  se OP_Goto: {   
60a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
60b0: 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f  p */.jump_to_p2_
60c0: 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
60d0: 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d  terrupt:.  pOp =
60e0: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
60f0: 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65  1];..  /* Opcode
6100: 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  s that are used 
6110: 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66  as the bottom of
6120: 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74   a loop (OP_Next
6130: 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20  , OP_Prev,.  ** 
6140: 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77  OP_VNext, OP_Row
6150: 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53  SetNext, or OP_S
6160: 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a  orterNext) all j
6170: 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20  ump here upon.  
6180: 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20  ** completion.  
6190: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
61a0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
61b0: 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
61c0: 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74  led.  ** or if t
61d0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
61e0: 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65  back needs to be
61f0: 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a   invoked. .  **.
6200: 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75    ** This code u
6210: 73 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64  ses unstructured
6220: 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e   "goto" statemen
6230: 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ts and does not 
6240: 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a  look clean..  **
6250: 20 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74   But that is not
6260: 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63   due to sloppy c
6270: 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68  oding habits. Th
6280: 65 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65  e code is writte
6290: 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20  n this.  ** way 
62a0: 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  for performance,
62b0: 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67   to avoid having
62c0: 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65   to run the inte
62d0: 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65  rrupt and progre
62e0: 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f  ss.  ** checks o
62f0: 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20  n every opcode. 
6300: 20 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69   This helps sqli
6310: 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75  te3_step() to ru
6320: 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a  n about 1.5%.  *
6330: 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69  * faster accordi
6340: 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20  ng to "valgrind 
6350: 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e  --tool=cachegrin
6360: 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f  d" */.check_for_
6370: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28  interrupt:.  if(
6380: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
6390: 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f  upted ) goto abo
63a0: 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
63b0: 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  upt;.#ifndef SQL
63c0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
63d0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20  S_CALLBACK.  /* 
63e0: 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73  Call the progres
63f0: 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74  s callback if it
6400: 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61   is configured a
6410: 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20  nd the required 
6420: 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56  number.  ** of V
6430: 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65  DBE ops have bee
6440: 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68  n executed (eith
6450: 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e  er since this in
6460: 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a  vocation of.  **
6470: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
6480: 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74  () or since last
6490: 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65   time the progre
64a0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20  ss callback was 
64b0: 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66  called)..  ** If
64c0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
64d0: 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e  llback returns n
64e0: 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68  on-zero, exit th
64f0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
6500: 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65  e with.  ** a re
6510: 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45  turn code SQLITE
6520: 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69  _ABORT..  */.  i
6530: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
6540: 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d  !=0 && nVmStep>=
6550: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29  nProgressLimit )
6560: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
6570: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d  ->nProgressOps!=
6580: 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  0 );.    nProgre
6590: 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65  ssLimit = nVmSte
65a0: 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  p + db->nProgres
65b0: 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25  sOps - (nVmStep%
65c0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
65d0: 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  );.    if( db->x
65e0: 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72  Progress(db->pPr
65f0: 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20  ogressArg) ){.  
6600: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
6610: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20  INTERRUPT;.     
6620: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
6630: 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  _halt;.    }.  }
6640: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65  .#endif.  .  bre
6650: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6660: 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a  :  Gosub P1 P2 *
6670: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
6680: 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64   the current add
6690: 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74  ress onto regist
66a0: 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65  er P1.** and the
66b0: 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  n jump to addres
66c0: 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  s P2..*/.case OP
66d0: 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20  _Gosub: {       
66e0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
66f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6700: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
6710: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
6720: 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d  sor) );.  pIn1 =
6730: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6740: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6750: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6760: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
6770: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
6780: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6790: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
67a0: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
67b0: 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49  pOp-aOp);.  REGI
67c0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
67d0: 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a  p1, pIn1);..  /*
67e0: 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61   Most jump opera
67f0: 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20  tions do a goto 
6800: 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20  to this spot in 
6810: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a  order to update.
6820: 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69    ** the pOp poi
6830: 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f  nter. */.jump_to
6840: 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  _p2:.  pOp = &aO
6850: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6860: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6870: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
6880: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6890: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
68a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
68b0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
68c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
68d0: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
68e0: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
68f0: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
6900: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
6910: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
6920: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
6930: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6940: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6950: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6960: 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  nt );.  pOp = &a
6970: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
6980: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6990: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
69a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
69b0: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
69c0: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
69d0: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
69e0: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
69f0: 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74   it will Yield t
6a00: 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a  o the coroutine.
6a10: 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64  ** located at ad
6a20: 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  dress P3..**.** 
6a30: 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68  If P2!=0 then th
6a40: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6a50: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64  ementation immed
6a60: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a  iately follows.*
6a70: 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
6a80: 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65  So jump over the
6a90: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
6aa0: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  mentation to.** 
6ab0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a  address P2..**.*
6ac0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43  * See also: EndC
6ad0: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6ae0: 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e   OP_InitCoroutin
6af0: 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
6b00: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6b10: 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d  p->p1>0 &&  pOp-
6b20: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
6b30: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
6b40: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
6b50: 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
6b60: 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nOp );.  assert(
6b70: 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70   pOp->p3>=0 && p
6b80: 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p3<p->nOp );
6b90: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
6ba0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6bb0: 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61  rt( !VdbeMemDyna
6bc0: 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70  mic(pOut) );.  p
6bd0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
6be0: 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e  p3 - 1;.  pOut->
6bf0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6c00: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29  .  if( pOp->p2 )
6c10: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
6c20: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6c30: 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72   Opcode:  EndCor
6c40: 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20  outine P1 * * * 
6c50: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74  *.**.** The inst
6c60: 72 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61  ruction at the a
6c70: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
6c80: 65 72 20 50 31 20 69 73 20 61 20 59 69 65 6c 64  er P1 is a Yield
6c90: 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  ..** Jump to the
6ca0: 20 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66   P2 parameter of
6cb0: 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20   that Yield..** 
6cc0: 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20  After the jump, 
6cd0: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f  register P1 beco
6ce0: 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a  mes undefined..*
6cf0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
6d00: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
6d10: 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75  case OP_EndCorou
6d20: 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20  tine: {         
6d30: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64    /* in1 */.  Vd
6d40: 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20  beOp *pCaller;. 
6d50: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6d60: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6d70: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
6d80: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
6d90: 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30  rt( pIn1->u.i>=0
6da0: 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d   && pIn1->u.i<p-
6db0: 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65  >nOp );.  pCalle
6dc0: 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  r = &aOp[pIn1->u
6dd0: 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  .i];.  assert( p
6de0: 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d  Caller->opcode==
6df0: 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73  OP_Yield );.  as
6e00: 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70  sert( pCaller->p
6e10: 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d  2>=0 && pCaller-
6e20: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
6e30: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c  pOp = &aOp[pCall
6e40: 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70  er->p2 - 1];.  p
6e50: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6e60: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
6e70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6e80: 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20  e:  Yield P1 P2 
6e90: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
6ea0: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
6eb0: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
6ec0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
6ed0: 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73  P1.  This.** has
6ee0: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79   the effect of y
6ef0: 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72  ielding to a cor
6f00: 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  outine..**.** If
6f10: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74   the coroutine t
6f20: 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20  hat is launched 
6f30: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
6f40: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
6f50: 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e   Yield or Return
6f60: 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74   then continue t
6f70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6f80: 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a  uction.  But if.
6f90: 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  ** the coroutine
6fa0: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
6fb0: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
6fc0: 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f  ds with.** EndCo
6fd0: 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75  routine, then ju
6fe0: 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20  mp to P2 rather 
6ff0: 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20  than continuing 
7000: 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74  with the.** next
7010: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
7020: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
7030: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
7040: 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20  ase OP_Yield: { 
7050: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
7060: 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  1, jump */.  int
7070: 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20   pcDest;.  pIn1 
7080: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7090: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
70a0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
70b0: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
70c0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
70d0: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
70e0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
70f0: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
7100: 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47  Op - aOp);.  REG
7110: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
7120: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f  >p1, pIn1);.  pO
7130: 70 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d  p = &aOp[pcDest]
7140: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7150: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66   Opcode:  HaltIf
7160: 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50  Null  P1 P2 P3 P
7170: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
7180: 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c  :  if r[P3]=null
7190: 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63   halt.**.** Chec
71a0: 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  k the value in r
71b0: 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20  egister P3.  If 
71c0: 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  it is NULL then 
71d0: 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61  Halt using.** pa
71e0: 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20  rameter P1, P2, 
71f0: 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69  and P4 as if thi
7200: 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e  s were a Halt in
7210: 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
7220: 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72  he.** value in r
7230: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f  egister P3 is no
7240: 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69  t NULL, then thi
7250: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e  s routine is a n
7260: 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20  o-op..** The P5 
7270: 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64  parameter should
7280: 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f   be 1..*/.case O
7290: 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20  P_HaltIfNull: { 
72a0: 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
72b0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
72c0: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
72d0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
72e0: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
72f0: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
7300: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
7310: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
7320: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
7330: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69   P4 P5.**.** Exi
7340: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  t immediately.  
7350: 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  All open cursors
7360: 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64  , etc are closed
7370: 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  .** automaticall
7380: 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  y..**.** P1 is t
7390: 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  he result code r
73a0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
73b0: 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74  e3_exec(), sqlit
73c0: 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f  e3_reset(),.** o
73d0: 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  r sqlite3_finali
73e0: 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72  ze().  For a nor
73f0: 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73  mal halt, this s
7400: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
7410: 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65  OK (0)..** For e
7420: 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65  rrors, it can be
7430: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
7440: 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65  e.  If P1!=0 the
7450: 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d  n P2 will determ
7460: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f  ine.** whether o
7470: 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63  r not to rollbac
7480: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
7490: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e  ansaction.  Do n
74a0: 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69  ot rollback.** i
74b0: 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44  f P2==OE_Fail. D
74c0: 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69  o the rollback i
74d0: 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  f P2==OE_Rollbac
74e0: 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62  k.  If P2==OE_Ab
74f0: 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63  ort,.** then bac
7500: 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65  k out all change
7510: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
7520: 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73  rred during this
7530: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   execution of th
7540: 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64  e.** VDBE, but d
7550: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  o not rollback t
7560: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
7570: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
7580: 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74  not null then it
7590: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   is an error mes
75a0: 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  sage string..**.
75b0: 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75 65  ** P5 is a value
75c0: 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34   between 0 and 4
75d0: 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61  , inclusive, tha
75e0: 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50  t modifies the P
75f0: 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  4 string..**.** 
7600: 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67     0:  (no chang
7610: 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54  e).**    1:  NOT
7620: 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20   NULL contraint 
7630: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7640: 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73   2:  UNIQUE cons
7650: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7660: 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43  4.**    3:  CHEC
7670: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  K constraint fai
7680: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a  led: P4.**    4:
7690: 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f    FOREIGN KEY 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 0a 2a 2a 20 49 66 20 50 35 20   P4.**.** If P5 
76c0: 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20  is not zero and 
76d0: 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  P4 is NULL, then
76e0: 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74 65   everything afte
76f0: 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20  r the ":" is.** 
7700: 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  omitted..**.** T
7710: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
7720: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
7730: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
7740: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
7750: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
7760: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
7770: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
7780: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
7790: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
77a0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
77b0: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
77c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
77d0: 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
77e0: 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20  *zType;.  const 
77f0: 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20  char *zLogFmt;. 
7800: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
7810: 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a  me;.  int pcx;..
7820: 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f    pcx = (int)(pO
7830: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28 20  p - aOp);.  if( 
7840: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
7850: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
7860: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
7870: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
7880: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7890: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
78a0: 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d  me. */.    pFram
78b0: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
78c0: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
78d0: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
78e0: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
78f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7900: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
7910: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
7920: 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62  pcx = sqlite3Vdb
7930: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
7940: 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52  rame);.    lastR
7950: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
7960: 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f  owid;.    if( pO
7970: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
7980: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
7990: 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20  truction pcx is 
79a0: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
79b0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
79c0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
79d0: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
79e0: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
79f0: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
7a00: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
7a10: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
7a20: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
7a30: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
7a40: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
7a50: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
7a60: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
7a70: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
7a80: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
7a90: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
7aa0: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
7ab0: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
7ac0: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
7ad0: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
7ae0: 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78  pcx = p->aOp[pcx
7af0: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
7b00: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
7b10: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
7b20: 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  em;.    pOp = &a
7b30: 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65  Op[pcx];.    bre
7b40: 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20  ak;.  }.  p->rc 
7b50: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
7b60: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
7b70: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
7b80: 70 63 20 3d 20 70 63 78 3b 0a 20 20 69 66 28 20  pc = pcx;.  if( 
7b90: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28  p->rc ){.    if(
7ba0: 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
7bb0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
7bc0: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79  har * const azTy
7bd0: 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55  pe[] = { "NOT NU
7be0: 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22  LL", "UNIQUE", "
7bf0: 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20  CHECK",.        
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45       "FOREIGN KE
7c30: 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65  Y" };.      asse
7c40: 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26  rt( pOp->p5>=1 &
7c50: 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a  & pOp->p5<=4 );.
7c60: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7c70: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
7c80: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7c90: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
7ca0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7cb0: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
7cc0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7cd0: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54  5==4 );.      zT
7ce0: 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70  ype = azType[pOp
7cf0: 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c  ->p5-1];.    }el
7d00: 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20  se{.      zType 
7d10: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  = 0;.    }.    a
7d20: 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20  ssert( zType!=0 
7d30: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  || pOp->p4.z!=0 
7d40: 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d  );.    zLogFmt =
7d50: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
7d60: 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20   [%s]: %s";.    
7d70: 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70  if( zType && pOp
7d80: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
7d90: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
7da0: 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  (p, "%s constrai
7db0: 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20  nt failed: %s", 
7dc0: 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a  zType, pOp->p4.z
7dd0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
7de0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
7df0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
7e00: 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f  rror(p, "%s", pO
7e10: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
7e20: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
7e30: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
7e40: 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  %s constraint fa
7e50: 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20  iled", zType);. 
7e60: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
7e70: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c  _log(pOp->p1, zL
7e80: 6f 67 46 6d 74 2c 20 70 63 78 2c 20 70 2d 3e 7a  ogFmt, pcx, p->z
7e90: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
7ea0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
7eb0: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
7ec0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
7ed0: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
7ee0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
7ef0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
7f00: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7f10: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
7f20: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
7f30: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
7f40: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
7f50: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7f60: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
7f70: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
7f80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
7f90: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7fa0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
7fb0: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
7fc0: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
7fd0: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
7fe0: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
7ff0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
8000: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
8010: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
8020: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
8030: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
8040: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
8050: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
8060: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
8070: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
8080: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8090: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
80a0: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
80b0: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
80c0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
80d0: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
80e0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
80f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8100: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
8110: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8120: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8130: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8140: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
8150: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
8160: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
8170: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
8180: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
8190: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
81a0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
81b0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
81c0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
81d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
81e0: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
81f0: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
8200: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
8210: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
8220: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
8230: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
8240: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
8250: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8260: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8270: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8280: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
8290: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
82a0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
82b0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
82c0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
82d0: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
82e0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
82f0: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a  TK_FLOAT, out2 *
8300: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
8310: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8320: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8330: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
8340: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
8350: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
8360: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
8370: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
8380: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
8390: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
83a0: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
83b0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
83c0: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
83d0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
83e0: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
83f0: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8400: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8410: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8420: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8430: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
8440: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
8450: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
8460: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
8470: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
8480: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
8490: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
84a0: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
84b0: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
84c0: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
84d0: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
84e0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
84f0: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20  TK_STRING, out2 
8500: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8510: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
8520: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8530: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8540: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
8550: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
8560: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
8570: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
8580: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8590: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
85a0: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
85b0: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
85c0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
85d0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
85e0: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
85f0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
8600: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
8610: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  f( rc==SQLITE_TO
8620: 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f  OBIG ) goto too_
8630: 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  big;.    if( SQL
8640: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
8650: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
8660: 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
8670: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
8680: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
8690: 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26  t->szMalloc>0 &&
86a0: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d   pOut->zMalloc==
86b0: 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61  pOut->z );.    a
86c0: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
86d0: 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29  namic(pOut)==0 )
86e0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61  ;.    pOut->szMa
86f0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
8700: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
8710: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28  _Static;.    if(
8720: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
8730: 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20  _DYNAMIC ){.    
8740: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
8750: 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  db, pOp->p4.z);.
8760: 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70      }.    pOp->p
8770: 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d  4type = P4_DYNAM
8780: 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  IC;.    pOp->p4.
8790: 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20  z = pOut->z;.   
87a0: 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d   pOp->p1 = pOut-
87b0: 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  >n;.  }.#endif. 
87c0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
87d0: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
87e0: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
87f0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
8800: 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
8810: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
8820: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
8830: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
8840: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
8850: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
8860: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8870: 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  'P4' (len=P1).**
8880: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
8890: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
88a0: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
88b0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
88c0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
88d0: 50 35 21 3d 30 20 61 6e 64 20 74 68 65 20 63 6f  P5!=0 and the co
88e0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
88f0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
8900: 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 0a  than zero, then.
8910: 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ** the datatype 
8920: 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  of the register 
8930: 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  P2 is converted 
8940: 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f  to BLOB.  The co
8950: 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20  ntent is.** the 
8960: 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f 66  same sequence of
8970: 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d 65   bytes, it is me
8980: 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  rely interpreted
8990: 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
89a0: 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e  ad.** of a strin
89b0: 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64 20  g, as if it had 
89c0: 62 65 65 6e 20 43 41 53 54 2e 0a 2a 2f 0a 63 61  been CAST..*/.ca
89d0: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
89e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
89f0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8a00: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
8a10: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8a20: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8a30: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8a40: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
8a50: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
8a60: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
8a70: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
8a80: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
8a90: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
8aa0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
8ab0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 69  BSIZE(pOut);.  i
8ac0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
8ad0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8ae0: 33 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  3>0 );.    asser
8af0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
8b00: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
8b10: 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   );.    pIn3 = &
8b20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
8b30: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
8b40: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
8b50: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33   );.    if( pIn3
8b60: 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d 3e 66 6c  ->u.i ) pOut->fl
8b70: 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d  ags = MEM_Blob|M
8b80: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
8b90: 72 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  rm;.  }.  break;
8ba0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
8bb0: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
8bc0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
8bd0: 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a  [P2..P3]=NULL.**
8be0: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
8bf0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
8c00: 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74  P2.  If P3 great
8c10: 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e  er than P2, then
8c20: 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e   also write.** N
8c30: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
8c40: 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72  r P3 and every r
8c50: 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65  egister in betwe
8c60: 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49  en P2 and P3.  I
8c70: 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20  f P3.** is less 
8c80: 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c  than P2 (typical
8c90: 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74  ly P3 is zero) t
8ca0: 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65  hen only registe
8cb0: 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74  r P2 is.** set t
8cc0: 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66  o NULL..**.** If
8cd0: 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73   the P1 value is
8ce0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
8cf0: 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d  also set the MEM
8d00: 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f  _Cleared flag so
8d10: 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61   that.** NULL va
8d20: 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f  lues will not co
8d30: 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e  mpare equal even
8d40: 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   if SQLITE_NULLE
8d50: 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f  Q is set on.** O
8d60: 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a  P_Ne or OP_Eq..*
8d70: 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20  /.case OP_Null: 
8d80: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
8d90: 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  ut2 */.  int cnt
8da0: 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67  ;.  u16 nullFlag
8db0: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
8dc0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8dd0: 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e  );.  cnt = pOp->
8de0: 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73  p3-pOp->p2;.  as
8df0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
8e00: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8e10: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  or) );.  pOut->f
8e20: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20  lags = nullFlag 
8e30: 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d  = pOp->p1 ? (MEM
8e40: 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65  _Null|MEM_Cleare
8e50: 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  d) : MEM_Null;. 
8e60: 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b   while( cnt>0 ){
8e70: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
8e80: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
8e90: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
8ea0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8eb0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
8ec0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
8ed0: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
8ee0: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
8ef0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8f00: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
8f10: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8f20: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
8f30: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
8f40: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
8f50: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
8f60: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
8f70: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
8f80: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
8f90: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
8fa0: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
8fb0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
8fc0: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
8fd0: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
8fe0: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
8ff0: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
9000: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
9010: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
9020: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
9030: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
9040: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
9050: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
9060: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
9070: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
9080: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
9090: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
90a0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
90b0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p1];.  pOut->f
90c0: 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c  lags = (pOut->fl
90d0: 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d  ags|MEM_Null)&~M
90e0: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
90f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9100: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
9110: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
9120: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65  is: r[P2]=P4 (le
9130: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70  n=P1).**.** P4 p
9140: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
9150: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
9160: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
9170: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
9180: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
9190: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
91b0: 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
91c0: 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c  ( pOp->p1 <= SQL
91d0: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29  ITE_MAX_LENGTH )
91e0: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
91f0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
9200: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
9210: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
9220: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e  pOp->p4.z, pOp->
9230: 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75  p1, 0, 0);.  pOu
9240: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
9250: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
9260: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
9270: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9280: 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20  pcode: Variable 
9290: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
92a0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
92b0: 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29  parameter(P1,P4)
92c0: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
92d0: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
92e0: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31  und parameter P1
92f0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9300: 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70  2.**.** If the p
9310: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65  arameter is name
9320: 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65  d, then its name
9330: 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a   appears in P4..
9340: 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
9350: 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  is used by sqlit
9360: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
9370: 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73  r_name()..*/.cas
9380: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
9390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
93a0: 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56  ut2 */.  Mem *pV
93b0: 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  ar;       /* Val
93c0: 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65  ue being transfe
93d0: 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72  rred */..  asser
93e0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
93f0: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72  pOp->p1<=p->nVar
9400: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
9410: 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f  p->p4.z==0 || pO
9420: 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61  p->p4.z==p->azVa
9430: 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a  r[pOp->p1-1] );.
9440: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
9450: 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  r[pOp->p1 - 1];.
9460: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
9470: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
9480: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
9490: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _big;.  }.  pOut
94a0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
94b0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c  e(p, pOp);.  sql
94c0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
94d0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61  owCopy(pOut, pVa
94e0: 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  r, MEM_Static);.
94f0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
9500: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
9510: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9520: 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50  de: Move P1 P2 P
9530: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
9540: 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50  s:  r[P2@P3]=r[P
9550: 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  1@P3].**.** Move
9560: 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69   the P3 values i
9570: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50  n register P1..P
9580: 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f  1+P3-1 over into
9590: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
95a0: 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69  ..P2+P3-1.  Regi
95b0: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d  sters P1..P1+P3-
95c0: 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f  1 are.** left ho
95d0: 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49  lding a NULL.  I
95e0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
95f0: 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65  r register range
9600: 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31  s.** P1..P1+P3-1
9610: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31   and P2..P2+P3-1
9620: 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74   to overlap.  It
9630: 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20   is an error.** 
9640: 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73  for P3 to be les
9650: 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73  s than 1..*/.cas
9660: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69  e OP_Move: {.  i
9670: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
9680: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
9690: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
96a0: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
96b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
96c0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
96d0: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
96e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
96f0: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
9700: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
9710: 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  3;.  p1 = pOp->p
9720: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
9730: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
9740: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
9750: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
9760: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
9770: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
9780: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
9790: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
97a0: 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
97b0: 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pOut<=&aMem[(p-
97c0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
97d0: 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
97e0: 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70  ( pIn1<=&aMem[(p
97f0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
9800: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
9810: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
9820: 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62  n1) );.    memAb
9830: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
9840: 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Out);.    sqlite
9850: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
9860: 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66  t, pIn1);.#ifdef
9870: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9880: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
9890: 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31  pyFrom>=&aMem[p1
98a0: 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70  ] && pOut->pScop
98b0: 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20  yFrom<pOut ){.  
98c0: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
98d0: 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20  From += pOp->p2 
98e0: 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  - p1;.    }.#end
98f0: 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  if.    Deephemer
9900: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20  alize(pOut);.   
9910: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9920: 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p2++, pOut);.   
9930: 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75   pIn1++;.    pOu
9940: 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d  t++;.  }while( -
9950: 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  -n );.  break;.}
9960: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70  ../* Opcode: Cop
9970: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
9980: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9990: 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31  @P3+1]=r[P1@P3+1
99a0: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ].**.** Make a c
99b0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73  opy of registers
99c0: 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20   P1..P1+P3 into 
99d0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
99e0: 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  +P3..**.** This 
99f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
9a00: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
9a10: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
9a20: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
9a30: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
9a40: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
9a50: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
9a60: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
9a70: 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74  OP_Copy: {.  int
9a80: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
9a90: 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p3;.  pIn1 = &aM
9aa0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9ab0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9ac0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
9ad0: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
9ae0: 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20  while( 1 ){.    
9af0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
9b00: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9b10: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
9b20: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
9b30: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64  lize(pOut);.#ifd
9b40: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9b50: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
9b60: 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66  From = 0;.#endif
9b70: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9b80: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d  ACE(pOp->p2+pOp-
9b90: 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20  >p3-n, pOut);.  
9ba0: 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29    if( (n--)==0 )
9bb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74   break;.    pOut
9bc0: 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  ++;.    pIn1++;.
9bd0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
9be0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79  /* Opcode: SCopy
9bf0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
9c00: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9c10: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  r[P1].**.** Make
9c20: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
9c30: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
9c40: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
9c50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
9c60: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
9c70: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
9c80: 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74  the value.  If t
9c90: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61  he value.** is a
9ca0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c   string or blob,
9cb0: 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69   then the copy i
9cc0: 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72  s only a pointer
9cd0: 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69   to the.** origi
9ce0: 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66  nal and hence if
9cf0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68   the original ch
9d00: 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68  anges so will th
9d10: 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65  e copy..** Worse
9d20: 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  , if the origina
9d30: 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64  l is deallocated
9d40: 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d  , the copy becom
9d50: 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54  es invalid..** T
9d60: 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20  hus the program 
9d70: 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74  must guarantee t
9d80: 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  hat the original
9d90: 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65   will not change
9da0: 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c  .** during the l
9db0: 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63  ifetime of the c
9dc0: 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70  opy.  Use OP_Cop
9dd0: 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70  y to make a comp
9de0: 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f  lete.** copy..*/
9df0: 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20  .case OP_SCopy: 
9e00: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9e10: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
9e20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9e30: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9e40: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
9e50: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
9e60: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
9e70: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
9e80: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
9e90: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
9ea0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
9eb0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9ec0: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
9ed0: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
9ee0: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
9ef0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
9f00: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
9f10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9f20: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
9f30: 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74  Transfer the int
9f40: 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
9f50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
9f60: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
9f70: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
9f80: 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73  n optimized vers
9f90: 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61  ion of SCopy tha
9fa0: 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72  t works only for
9fb0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75   integer.** valu
9fc0: 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  es..*/.case OP_I
9fd0: 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  ntCopy: {       
9fe0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9ff0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a000: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
a010: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
a020: 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
a030: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
a040: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
a050: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
a060: 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75  64(pOut, pIn1->u
a070: 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
a080: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
a090: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
a0a0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
a0b0: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
a0c0: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
a0d0: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
a0e0: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
a0f0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
a100: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
a110: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
a120: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
a130: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
a140: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
a150: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
a160: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
a170: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
a180: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
a190: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
a1a0: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
a1b0: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
a1c0: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
a1d0: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
a1e0: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
a1f0: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
a200: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
a210: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
a220: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
a230: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
a240: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a250: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
a260: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
a270: 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66  r)+1 );..#ifndef
a280: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
a290: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
a2a0: 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67   /* Run the prog
a2b0: 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73  ress counter jus
a2c0: 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  t before returni
a2d0: 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ng..  */.  if( d
a2e0: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a  b->xProgress!=0.
a2f0: 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e     && nVmStep>=n
a300: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20  ProgressLimit.  
a310: 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73   && db->xProgres
a320: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
a330: 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  rg)!=0.  ){.    
a340: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
a350: 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  RRUPT;.    goto 
a360: 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
a370: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
a380: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
a390: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
a3a0: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
a3b0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a3c0: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
a3d0: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
a3e0: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
a3f0: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
a400: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
a410: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
a420: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
a430: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
a440: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
a450: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
a460: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
a470: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
a480: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
a490: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
a4a0: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
a4b0: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
a4c0: 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b  nal );.    break
a4d0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
a4e0: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
a4f0: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
a500: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
a510: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
a520: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
a530: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
a540: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
a550: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
a560: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
a570: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
a580: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
a590: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
a5a0: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
a5b0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a5c0: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
a5d0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
a5e0: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
a5f0: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
a600: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
a610: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
a620: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
a630: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
a640: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
a650: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
a660: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
a670: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
a680: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a690: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
a6a0: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
a6b0: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
a6c0: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
a6d0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a6e0: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
a6f0: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
a700: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
a710: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
a720: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
a730: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a740: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
a750: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
a760: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
a770: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
a780: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
a790: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a7a0: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
a7b0: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
a7c0: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
a7d0: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
a7e0: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
a7f0: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
a800: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
a810: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
a820: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
a830: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
a840: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
a850: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
a860: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
a870: 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  E);.  if( NEVER(
a880: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
a890: 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
a8a0: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
a8b0: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
a8c0: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
a8d0: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
a8e0: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
a8f0: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
a900: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
a910: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
a920: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
a930: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
a940: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
a950: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
a960: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
a970: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
a980: 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66  s.  ** a side ef
a990: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
a9a0: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
a9b0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a9c0: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
a9d0: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
a9e0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
a9f0: 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29  sValid(&pMem[i])
aa00: 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65   );.    Deepheme
aa10: 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29  ralize(&pMem[i])
aa20: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
aa30: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mem[i].flags & M
aa40: 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20  EM_Ephem)==0.   
aa50: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65           || (pMe
aa60: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45  m[i].flags & (ME
aa70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
aa80: 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
aa90: 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d  e3VdbeMemNulTerm
aaa0: 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  inate(&pMem[i]);
aab0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
aac0: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
aad0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
aae0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
aaf0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
ab00: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
ab10: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
ab20: 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29  .  p->pc = (int)
ab30: 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b  (pOp - aOp) + 1;
ab40: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
ab50: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
ab60: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
ab70: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
ab80: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ab90: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
aba0: 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41  2]+r[P1].**.** A
abb0: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
abc0: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
abd0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
abe0: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
abf0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
ac00: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
ac10: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
ac20: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
ac30: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
ac40: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
ac50: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
ac60: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
ac70: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
ac80: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
ac90: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
aca0: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
acb0: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
acc0: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
acd0: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
ace0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
acf0: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
ad00: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
ad10: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
ad20: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
ad30: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
ad40: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
ad50: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
ad60: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
ad70: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
ad80: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
ad90: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
ada0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
adb0: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
adc0: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
add0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
ade0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
adf0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
ae00: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
ae10: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
ae20: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
ae30: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
ae40: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
ae50: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
ae60: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
ae70: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
ae80: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
ae90: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
aea0: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
aeb0: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
aec0: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
aed0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
aee0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
aef0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
af00: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
af10: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
af20: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
af30: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
af40: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
af50: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
af60: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
af70: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
af80: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
af90: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
afa0: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
afb0: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
afc0: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
afd0: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
afe0: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a  ut->z[nByte]=0;.
aff0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
b000: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
b010: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
b020: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
b030: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
b040: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
b050: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
b060: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
b070: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b080: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
b090: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b0a0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
b0b0: 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P2].**.** Ad
b0c0: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
b0d0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
b0e0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b0f0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b100: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b110: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b120: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b130: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b140: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b150: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
b160: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
b170: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b180: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
b190: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
b1a0: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
b1b0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
b1c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b1d0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b1e0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b1f0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b200: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b210: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b220: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b230: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b240: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
b250: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b260: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d  s:  r[P3]=r[P2]-
b270: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74  r[P1].**.** Subt
b280: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
b290: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
b2a0: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
b2b0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b2c0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b2d0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b2e0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b2f0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b300: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b310: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b320: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
b330: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b340: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  s:  r[P3]=r[P2]/
b350: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b360: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b370: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b380: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b390: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b3a0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b3b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b3c0: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b3d0: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b3e0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b3f0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b400: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b410: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b420: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b430: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b440: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b450: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b460: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b470: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
b480: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
b490: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
b4a0: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
b4b0: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
b4c0: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
b4d0: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
b4e0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b4f0: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
b500: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b510: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b520: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
b530: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
b540: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
b550: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b560: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b570: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b590: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
b5a0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b5b0: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
b5c0: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
b5d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
b5e0: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
b5f0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b600: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
b610: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b620: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
b630: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b640: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
b650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b660: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
b670: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b680: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
b690: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
b6a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b6b0: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
b6c0: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
b6d0: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
b6e0: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
b6f0: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
b700: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
b710: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
b720: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
b730: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
b740: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
b750: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
b760: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
b770: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
b780: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
b790: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
b7a0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
b7b0: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
b7c0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
b7d0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
b7e0: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
b7f0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
b800: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
b810: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
b820: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
b830: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
b840: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
b850: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
b860: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
b870: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
b880: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
b890: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
b8a0: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
b8b0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
b8c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b8d0: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
b8e0: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
b8f0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b900: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
b910: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b920: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
b930: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
b940: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
b950: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
b960: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
b970: 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20  type1 & type2 & 
b980: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
b990: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
b9a0: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
b9b0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
b9c0: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
b9d0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
b9e0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
b9f0: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
ba00: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
ba10: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
ba20: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
ba30: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
ba40: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
ba50: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
ba60: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
ba70: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
ba80: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
ba90: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
baa0: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
bab0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
bac0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bad0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
bae0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
baf0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
bb00: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bb10: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
bb20: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
bb30: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
bb40: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
bb50: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
bb60: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
bb70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
bb80: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
bb90: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
bba0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
bbb0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
bbc0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
bbd0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
bbe0: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
bbf0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bc00: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
bc10: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
bc20: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
bc30: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
bc40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
bc50: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
bc60: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
bc70: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
bc80: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
bc90: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
bca0: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
bcb0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
bcc0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
bcd0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
bce0: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
bcf0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bd00: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
bd10: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
bd20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bd30: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
bd40: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
bd50: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
bd60: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
bd70: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
bd80: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
bd90: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
bda0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
bdb0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
bdc0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
bdd0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
bde0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
bdf0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
be00: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
be10: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
be20: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
be30: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
be40: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
be50: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
be60: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
be70: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
be80: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
be90: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
bea0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
beb0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
bec0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
bed0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
bee0: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
bef0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
bf00: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
bf10: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
bf20: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
bf30: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
bf40: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
bf50: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
bf60: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
bf70: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
bf80: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
bf90: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42    pOut->u.r = rB
bfa0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
bfb0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
bfc0: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28  eal);.    if( ((
bfd0: 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d  type1|type2)&MEM
bfe0: 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49  _Real)==0 && !bI
bff0: 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  ntint ){.      s
c000: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
c010: 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b  rAffinity(pOut);
c020: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
c030: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
c040: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c050: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
c060: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
c070: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
c080: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
c090: 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a  lSeq P1 * * P4.*
c0a0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
c0b0: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
c0c0: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
c0d0: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
c0e0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
c0f0: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
c100: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
c110: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
c120: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
c130: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
c140: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
c150: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
c160: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
c170: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
c180: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
c190: 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
c1a0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  t zero, then it 
c1b0: 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
c1c0: 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  at a subsequent 
c1d0: 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28  min() or.** max(
c1e0: 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c  ) aggregate will
c1f0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65   set to 1 if the
c200: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20   current row is 
c210: 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  not the minimum 
c220: 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20  or.** maximum.  
c230: 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20  The P1 register 
c240: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  is initialized t
c250: 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74  o 0 by this inst
c260: 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
c270: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
c280: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
c290: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
c2a0: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
c2b0: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
c2c0: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
c2d0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
c2e0: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
c2f0: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
c300: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20  e.** publicly.  
c310: 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75  Only built-in fu
c320: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63  nctions have acc
c330: 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74  ess to this feat
c340: 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
c350: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
c360: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
c370: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
c380: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
c390: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c3a0: 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
c3b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a  m[pOp->p1], 0);.
c3c0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
c3d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
c3e0: 69 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34  ion0 P1 P2 P3 P4
c3f0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
c400: 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32   r[P3]=func(r[P2
c410: 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  @P5]).**.** Invo
c420: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
c430: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
c440: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66  ter to a FuncDef
c450: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
c460: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
c470: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
c480: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
c490: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
c4a0: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
c4b0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
c4c0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
c4d0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
c4e0: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
c4f0: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
c500: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
c510: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
c520: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
c530: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
c540: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
c550: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
c560: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
c570: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
c580: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
c590: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
c5a0: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
c5b0: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
c5c0: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
c5d0: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
c5e0: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
c5f0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
c600: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
c610: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
c620: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
c630: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
c640: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
c650: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
c660: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
c670: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
c680: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
c690: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
c6a0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
c6b0: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
c6c0: 6e 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46  n, AggStep, AggF
c6d0: 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  inal.*/./* Opcod
c6e0: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
c6f0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
c700: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
c710: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
c720: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
c730: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
c740: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
c750: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
c760: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
c770: 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
c780: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  er to the functi
c790: 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69  on to be run) wi
c7a0: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
c7b0: 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65  taken.** from re
c7c0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75  gister P2 and su
c7d0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
c7e0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
c7f0: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a  ction is stored.
c800: 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
c810: 33 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  3.  Register P3 
c820: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
c830: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
c840: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
c850: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
c860: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
c870: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
c880: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
c890: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
c8a0: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
c8b0: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
c8c0: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
c8d0: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
c8e0: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
c8f0: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
c900: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
c910: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
c920: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
c930: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
c940: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
c950: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
c960: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
c970: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
c980: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
c990: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
c9a0: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
c9b0: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
c9c0: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
c9d0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63  ..**.** SQL func
c9e0: 74 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61  tions are initia
c9f0: 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
ca00: 46 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50  Function0 with P
ca10: 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f  4 pointing.** to
ca20: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
ca30: 74 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74  t.  But on first
ca40: 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65   evaluation, the
ca50: 20 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a   P4 operand is.*
ca60: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
ca70: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
ca80: 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
ca90: 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  t object and the
caa0: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68   operation.** ch
cab0: 61 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50  anged to this OP
cac0: 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65  _Function opcode
cad0: 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
cae0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
caf0: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c  on of.** the sql
cb00: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
cb10: 65 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20  ect occurs only 
cb20: 6f 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61  once, rather tha
cb30: 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a  n once for each.
cb40: 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  ** evaluation of
cb50: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
cb60: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
cb70: 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65  unction0, AggSte
cb80: 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  p, AggFinal.*/.c
cb90: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30  ase OP_Function0
cba0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
cbb0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
cbc0: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cbd0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
cbe0: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
cbf0: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
cc00: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
cc10: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
cc20: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
cc30: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  );.  assert( n==
cc40: 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
cc50: 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70  && pOp->p2+n<=(p
cc60: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
cc70: 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  r)+1) );.  asser
cc80: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
cc90: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
cca0: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43  Op->p2+n );.  pC
ccb0: 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  tx = sqlite3DbMa
ccc0: 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
ccd0: 6f 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31  of(*pCtx) + (n-1
cce0: 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33  )*sizeof(sqlite3
ccf0: 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28  _value*));.  if(
cd00: 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20   pCtx==0 ) goto 
cd10: 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e  no_mem;.  pCtx->
cd20: 70 4f 75 74 20 3d 20 30 3b 0a 20 20 70 43 74 78  pOut = 0;.  pCtx
cd30: 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  ->pFunc = pOp->p
cd40: 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d  4.pFunc;.  pCtx-
cd50: 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70  >iOp = (int)(pOp
cd60: 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d   - aOp);.  pCtx-
cd70: 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43  >pVdbe = p;.  pC
cd80: 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20  tx->argc = n;.  
cd90: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
cda0: 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d  _FUNCCTX;.  pOp-
cdb0: 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b  >p4.pCtx = pCtx;
cdc0: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
cdd0: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20   OP_Function;.  
cde0: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
cdf0: 69 6e 74 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  into OP_Function
ce00: 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75   */.}.case OP_Fu
ce10: 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20  nction: {.  int 
ce20: 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  i;.  sqlite3_con
ce30: 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61  text *pCtx;..  a
ce40: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
ce50: 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29  pe==P4_FUNCCTX )
ce60: 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e  ;.  pCtx = pOp->
ce70: 70 34 2e 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49  p4.pCtx;..  /* I
ce80: 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  f this function 
ce90: 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74  is inside of a t
cea0: 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69  rigger, the regi
ceb0: 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d  ster array in aM
cec0: 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20  em[].  ** might 
ced0: 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20  change from one 
cee0: 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68  evaluation to th
cef0: 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78  e next.  The nex
cf00: 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a  t block of code.
cf10: 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73    ** checks to s
cf20: 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74  ee if the regist
cf30: 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61  er array has cha
cf40: 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20  nged, and if so 
cf50: 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61  it.  ** reinitia
cf60: 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61  lizes the relava
cf70: 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  nt parts of the 
cf80: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cf90: 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74  object */.  pOut
cfa0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
cfb0: 5d 3b 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70  ];.  if( pCtx->p
cfc0: 4f 75 74 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20  Out != pOut ){. 
cfd0: 20 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20     pCtx->pOut = 
cfe0: 70 4f 75 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d  pOut;.    for(i=
cff0: 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e  pCtx->argc-1; i>
d000: 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61  =0; i--) pCtx->a
d010: 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70  rgv[i] = &aMem[p
d020: 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a  Op->p2+i];.  }..
d030: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
d040: 67 65 28 70 2c 20 70 43 74 78 2d 3e 70 4f 75 74  ge(p, pCtx->pOut
d050: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
d060: 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30  _DEBUG.  for(i=0
d070: 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20  ; i<pCtx->argc; 
d080: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
d090: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74  ( memIsValid(pCt
d0a0: 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20  x->argv[i]) );. 
d0b0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
d0c0: 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74  E(pOp->p2+i, pCt
d0d0: 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d  x->argv[i]);.  }
d0e0: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74  .#endif.  MemSet
d0f0: 54 79 70 65 46 6c 61 67 28 70 43 74 78 2d 3e 70  TypeFlag(pCtx->p
d100: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
d110: 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72    pCtx->fErrorOr
d120: 41 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c  Aux = 0;.  db->l
d130: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
d140: 6f 77 69 64 3b 0a 20 20 28 2a 70 43 74 78 2d 3e  owid;.  (*pCtx->
d150: 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 70 43  pFunc->xFunc)(pC
d160: 74 78 2c 20 70 43 74 78 2d 3e 61 72 67 63 2c 20  tx, pCtx->argc, 
d170: 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20  pCtx->argv); /* 
d180: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
d190: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
d1a0: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
d1b0: 64 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20  d;  /* Remember 
d1c0: 72 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61  rowid changes ma
d1d0: 64 65 20 62 79 20 78 46 75 6e 63 20 2a 2f 0a 0a  de by xFunc */..
d1e0: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
d1f0: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
d200: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
d210: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
d220: 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  if( pCtx->fError
d230: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
d240: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
d250: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
d260: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
d270: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
d280: 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29  text(pCtx->pOut)
d290: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
d2a0: 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
d2b0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
d2c0: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
d2d0: 70 2c 20 70 43 74 78 2d 3e 69 4f 70 2c 20 70 4f  p, pCtx->iOp, pO
d2e0: 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  p->p1);.  }..  /
d2f0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
d300: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
d310: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
d320: 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74  P3 */.  if( pOut
d330: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
d340: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
d350: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d360: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d370: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d380: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ng);.    if( sql
d390: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
d3a0: 67 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20  g(pCtx->pOut) ) 
d3b0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
d3c0: 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  }..  REGISTER_TR
d3d0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74  ACE(pOp->p3, pCt
d3e0: 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  x->pOut);.  UPDA
d3f0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d400: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62  pCtx->pOut);.  b
d410: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d420: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d430: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d440: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
d450: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
d460: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d470: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
d480: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d490: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d4a0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d4b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d4c0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d4d0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d4e0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d4f0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d500: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d510: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d520: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d530: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d540: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d550: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d560: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d570: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d580: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d590: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d5a0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d5b0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d5c0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
d5d0: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
d5e0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d5f0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d600: 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a  =r[P2]<<r[P1].**
d610: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
d620: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
d630: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
d640: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
d650: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
d660: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
d670: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
d680: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
d690: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
d6a0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
d6b0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
d6c0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
d6d0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
d6e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
d6f0: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
d700: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d710: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
d720: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
d730: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
d740: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
d750: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
d760: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
d770: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
d780: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
d790: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d7a0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
d7b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d7c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d7d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d7e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d7f0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
d800: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
d810: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d820: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
d830: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
d840: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d860: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
d870: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
d880: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
d890: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
d8a0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d8b0: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
d8c0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
d8d0: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
d8e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
d8f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
d900: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
d910: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
d920: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
d930: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
d940: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d950: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
d960: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
d970: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
d980: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
d990: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
d9a0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
d9b0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
d9c0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
d9d0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
d9e0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
d9f0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
da00: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
da10: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
da20: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
da30: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
da40: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
da50: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
da60: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
da70: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
da80: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
da90: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
daa0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
dab0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
dac0: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
dad0: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
dae0: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
daf0: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
db00: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
db10: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
db20: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
db30: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
db40: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
db50: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
db60: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
db70: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
db80: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
db90: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
dba0: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
dbb0: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
dbc0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
dbd0: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
dbe0: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
dbf0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
dc00: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
dc10: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
dc20: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
dc30: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
dc40: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
dc50: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
dc60: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
dc70: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
dc80: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
dc90: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
dca0: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
dcb0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
dcc0: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
dcd0: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
dce0: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
dcf0: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
dd00: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
dd10: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
dd20: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
dd30: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
dd40: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
dd50: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
dd60: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
dd70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
dd80: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
dd90: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
dda0: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
ddb0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
ddc0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
ddd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
dde0: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
ddf0: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
de00: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
de10: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
de20: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
de30: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
de40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
de50: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
de60: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
de70: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
de80: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
de90: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
dea0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
deb0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
dec0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
ded0: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
dee0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
def0: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
df00: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
df10: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
df20: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
df30: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
df40: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
df50: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
df60: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
df70: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
df80: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
df90: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
dfa0: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
dfb0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
dfc0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
dfd0: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
dfe0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
dff0: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e000: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e020: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e030: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e040: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e050: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e060: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e070: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e080: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e090: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e0a0: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e0b0: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e0c0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e0d0: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e0e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e0f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e100: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e110: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e120: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e130: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e140: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e150: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e160: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e170: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e180: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e190: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e1a0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e1b0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e1c0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e1d0: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e1e0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e1f0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e200: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e210: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e220: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e230: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e240: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e250: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e260: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e270: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e280: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e290: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e2a0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e2b0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e2c0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e2d0: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e2e0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e2f0: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e300: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e310: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e320: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e330: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e340: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e350: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e360: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e370: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e380: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e390: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e3a0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e3b0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e3c0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e3d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e3e0: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e3f0: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e400: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e410: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e420: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e430: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e440: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e450: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e460: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e470: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e480: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e490: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e4a0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e4b0: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e4c0: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e4d0: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e4e0: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e4f0: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e500: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e510: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e520: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e530: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e540: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e560: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
e570: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
e580: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
e590: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
e5a0: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
e5b0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e5c0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
e5d0: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
e5e0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
e5f0: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
e600: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e610: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
e620: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
e630: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e640: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
e650: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
e660: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
e670: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
e680: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e690: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
e6a0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
e6b0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
e6c0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
e6d0: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
e6e0: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
e6f0: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
e700: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
e710: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
e720: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
e730: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
e740: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
e750: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e760: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e770: 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  1]<r[P3] goto P2
e780: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
e790: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
e7a0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
e7b0: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
e7c0: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
e7d0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
e7e0: 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20    .**.** If the 
e7f0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e800: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
e810: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
e820: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
e830: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
e840: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
e850: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
e860: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
e870: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
e880: 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20  fall through if 
e890: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e8a0: 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
e8b0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e8c0: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
e8d0: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
e8e0: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
e8f0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
e900: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
e910: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
e920: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
e930: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
e940: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
e950: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
e960: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
e970: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
e980: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
e990: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
e9a0: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
e9b0: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
e9c0: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
e9d0: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
e9e0: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
e9f0: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
ea00: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
ea10: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
ea20: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
ea30: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
ea40: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
ea50: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
ea60: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
ea70: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
ea80: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
ea90: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
eaa0: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
eab0: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
eac0: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
ead0: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
eae0: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
eaf0: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
eb00: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
eb10: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
eb20: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
eb30: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
eb40: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
eb50: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
eb60: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
eb70: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
eb80: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
eb90: 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  s  used to do th
eba0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
ebb0: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
ebc0: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
ebd0: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
ebe0: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
ebf0: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
ec00: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
ec10: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
ec20: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
ec30: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
ec40: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
ec50: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
ec60: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
ec70: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
ec80: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
ec90: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
eca0: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
ecb0: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
ecc0: 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  bs..**.** If the
ecd0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
ece0: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
ecf0: 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75  , then do not ju
ed00: 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a  mp.  Instead,.**
ed10: 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e   store a boolean
ed20: 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20   result (either 
ed30: 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c  0, or 1, or NULL
ed40: 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  ) in register P2
ed50: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
ed60: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74  QLITE_NULLEQ bit
ed70: 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74   is set in P5, t
ed80: 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  hen NULL values 
ed90: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a  are considered.*
eda0: 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  * equal to one a
edb0: 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64  nother, provided
edc0: 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f   that they do no
edd0: 74 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d  t have their MEM
ede0: 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20  _Cleared.** bit 
edf0: 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  set..*/./* Opcod
ee00: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50  e: Ne P1 P2 P3 P
ee10: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
ee20: 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33  : if r[P1]!=r[P3
ee30: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
ee40: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
ee50: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
ee60: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
ee70: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
ee80: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
ee90: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
eea0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
eeb0: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
eec0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
eed0: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
eee0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
eef0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
ef00: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
ef10: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
ef20: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
ef30: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
ef40: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
ef50: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
ef60: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
ef70: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
ef80: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
ef90: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
efa0: 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74  s false.  If eit
efb0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
efc0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
efd0: 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20  ult is true..** 
efe0: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
eff0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
f000: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
f010: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
f020: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
f030: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
f040: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
f050: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
f060: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
f070: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
f080: 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d   if r[P1]==r[P3]
f090: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
f0a0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f0b0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
f0c0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f0d0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f0e0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
f0f0: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
f100: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71  P1 and P3 are eq
f110: 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ual..** See the 
f120: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f130: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f140: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
f150: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f160: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
f170: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
f180: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
f190: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
f1a0: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
f1b0: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
f1c0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f1d0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
f1e0: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
f1f0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
f200: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
f210: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f220: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f230: 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69  false..** If nei
f240: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f250: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
f260: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
f270: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
f280: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
f290: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
f2a0: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
f2b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
f2c0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f2d0: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f2e0: 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]<=r[P3] goto 
f2f0: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
f300: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f310: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f320: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f330: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f340: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f350: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
f360: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
f370: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
f380: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
f390: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
f3a0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
f3b0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f3c0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f3d0: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
f3e0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
f3f0: 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f  f r[P1]>r[P3] go
f400: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
f410: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
f420: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
f430: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
f440: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
f450: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
f460: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
f470: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
f480: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f490: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f4a0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f4b0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f4c0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
f4d0: 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20  * Opcode: Ge P1 
f4e0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f4f0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
f500: 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]>=r[P3] goto P2
f510: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
f520: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
f530: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
f540: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
f550: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
f560: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
f570: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
f580: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
f590: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
f5a0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
f5b0: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
f5c0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f5d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f5e0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71  n..*/.case OP_Eq
f5f0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f600: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51  /* same as TK_EQ
f610: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f620: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20   */.case OP_Ne: 
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f640: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20   same as TK_NE, 
f650: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f660: 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20  /.case OP_Lt:   
f670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f680: 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75  ame as TK_LT, ju
f690: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f6a0: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20  case OP_Le:     
f6b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f6c0: 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70  e as TK_LE, jump
f6d0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f6e0: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20  se OP_Gt:       
f6f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f700: 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20  as TK_GT, jump, 
f710: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f720: 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20   OP_Ge: {       
f730: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f740: 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GE, jump, in
f750: 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
f760: 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
f770: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65  /* Result of the
f780: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70   comparison of p
f790: 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33  In1 against pIn3
f7a0: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
f7b0: 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  ity;      /* Aff
f7c0: 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72  inity to use for
f7d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
f7e0: 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20   u16 flags1;    
f7f0: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
f800: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
f810: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn1->flags */.
f820: 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20    u16 flags3;   
f830: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
f840: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
f850: 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn3->flags */
f860: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
f870: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
f880: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
f890: 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70  3];.  flags1 = p
f8a0: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c  In1->flags;.  fl
f8b0: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
f8c0: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
f8d0: 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
f8e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  Null ){.    /* O
f8f0: 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61  ne or both opera
f900: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a  nds are NULL */.
f910: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f920: 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  & SQLITE_NULLEQ 
f930: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53  ){.      /* If S
f940: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f950: 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20  set (which will 
f960: 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74  only happen if t
f970: 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20  he operator is. 
f980: 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72       ** OP_Eq or
f990: 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b   OP_Ne) then tak
f9a0: 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f  e the jump or no
f9b0: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
f9c0: 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20  hether.      ** 
f9d0: 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72  or not both oper
f9e0: 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20  ands are null.. 
f9f0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
fa00: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
fa10: 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d  e==OP_Eq || pOp-
fa20: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
fa30: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
fa40: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c  (flags1 & MEM_Cl
fa50: 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20  eared)==0 );.   
fa60: 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d     assert( (pOp-
fa70: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
fa80: 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20  PIFNULL)==0 );. 
fa90: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
faa0: 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20  &MEM_Null)!=0.  
fab0: 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26       && (flags3&
fac0: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
fad0: 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
fae0: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20  EM_Cleared)==0. 
faf0: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
fb00: 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73  res = 0;  /* Res
fb10: 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a  ults are equal *
fb20: 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
fb30: 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20         res = 1; 
fb40: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
fb50: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fb60: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
fb70: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
fb80: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
fb90: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
fba0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
fbb0: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
fbc0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
fbd0: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
fbe0: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
fbf0: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
fc00: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
fc10: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
fc20: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
fc30: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
fc40: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
fc50: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
fc60: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
fc70: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
fc80: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
fc90: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
fca0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
fcb0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
fcc0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62  lse{.        Vdb
fcd0: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
fce0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
fcf0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
fd00: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
fd10: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
fd20: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
fd30: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
fd40: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
fd50: 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
fd60: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
fd70: 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
fd80: 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
fd90: 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
fda0: 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
fdb0: 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
fdc0: 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41  finity>=SQLITE_A
fdd0: 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20  FF_NUMERIC ){.  
fde0: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
fdf0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
fe00: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
fe10: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
fe20: 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
fe30: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
fe40: 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ,0);.      }.   
fe50: 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
fe60: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
fe70: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
fe80: 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
fe90: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
fea0: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
feb0: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
fec0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
fed0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
fee0: 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28  EXT ){.      if(
fef0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
ff00: 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
ff10: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn1->flags & (M
ff20: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
ff30: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
ff40: 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e  testcase( pIn1->
ff50: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
ff60: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
ff70: 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
ff80: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
ff90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ffa0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
ffb0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In1, encoding, 1
ffc0: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
ffd0: 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d  ase( (flags1&MEM
ffe0: 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e  _Dyn) != (pIn1->
fff0: 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
10000 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 31  ;.        flags1
10010 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20   = (pIn1->flags 
10020 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
10030 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d   | (flags1 & MEM
10040 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
10050 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 70    }.      if( (p
10060 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
10070 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70 49 6e  _Str)==0 && (pIn
10080 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
10090 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
100a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
100b0 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
100c0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
100d0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
100e0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
100f0 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
10100 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10110 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33  emStringify(pIn3
10120 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
10130 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10140 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79  ( (flags3&MEM_Dy
10150 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  n) != (pIn3->fla
10160 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
10170 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20         flags3 = 
10180 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn3->flags & ~
10190 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
101a0 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79  (flags3 & MEM_Ty
101b0 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d  peMask);.      }
101c0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
101d0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
101e0 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
101f0 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
10200 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e  ;.    if( pIn1->
10210 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
10220 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10230 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
10240 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20  ob(pIn1);.      
10250 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a  flags1 &= ~MEM_Z
10260 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ero;.    }.    i
10270 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  f( pIn3->flags &
10280 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
10290 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
102a0 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33  mExpandBlob(pIn3
102b0 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 33 20  );.      flags3 
102c0 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20  &= ~MEM_Zero;.  
102d0 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e    }.    if( db->
102e0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
102f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
10300 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
10310 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
10320 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
10330 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68  l);.  }.  switch
10340 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
10350 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
10360 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
10370 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10380 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
10390 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
103a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
103b0 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
103c0 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
103d0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
103e0 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
103f0 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
10400 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
10410 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
10420 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
10430 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
10440 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
10450 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
10460 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
10470 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
10480 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
10490 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
104a0 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  rs. */.  assert(
104b0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
104c0 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
104d0 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs1 & MEM_Dyn) )
104e0 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
104f0 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65  = flags1;.  asse
10500 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
10510 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
10520 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e  flags3 & MEM_Dyn
10530 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61  ) );.  pIn3->fla
10540 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20  gs = flags3;..  
10550 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
10560 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
10570 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
10580 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d  [pOp->p2];.    m
10590 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
105a0 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65  p, pOut);.    Me
105b0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
105c0 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
105d0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
105e0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
105f0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
10600 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
10610 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
10620 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e  n(res!=0, (pOp->
10630 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
10640 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66  EQ)?2:3);.    if
10650 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 67  ( res ){.      g
10660 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
10670 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
10680 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10690 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
106a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
106b0 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
106c0 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
106d0 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
106e0 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
106f0 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
10700 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
10710 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
10720 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
10730 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
10740 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
10750 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
10760 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
10770 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
10780 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
10790 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
107a0 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
107b0 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
107c0 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  mpare..*/.case O
107d0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
107e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
107f0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
10800 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
10810 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
10820 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
10830 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b  >p4.ai;.  break;
10840 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
10850 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
10860 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
10870 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20  s: r[P1@P3] <-> 
10880 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43  r[P2@P3].**.** C
10890 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f  ompare two vecto
108a0 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
108b0 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
108c0 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74  P1+P3-1) (call t
108d0 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41  his.** vector "A
108e0 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
108f0 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
10900 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
10910 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
10920 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
10930 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
10940 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
10950 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  t..**.** If P5 h
10960 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45  as the OPFLAG_PE
10970 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74  RMUTE bit set, t
10980 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66  hen the order of
10990 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a   comparison is.*
109a0 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
109b0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
109c0 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  OP_Permutation o
109d0 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65  perator.  If the
109e0 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  .** OPFLAG_PERMU
109f0 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  TE bit is clear,
10a00 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61   then register a
10a10 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73  re compared in s
10a20 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64  equential.** ord
10a30 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  er..**.** P4 is 
10a40 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
10a50 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
10a60 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10a70 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
10a80 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
10a90 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
10aa0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
10ab0 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
10ac0 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
10ad0 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
10ae0 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
10af0 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
10b00 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
10b10 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
10b20 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
10b30 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
10b40 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
10b50 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
10b60 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
10b70 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
10b80 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
10b90 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
10ba0 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
10bb0 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
10bc0 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a  nt i;.  int p1;.
10bd0 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73    int p2;.  cons
10be0 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49  t KeyInfo *pKeyI
10bf0 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  nfo;.  int idx;.
10c00 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
10c10 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  ;    /* Collatin
10c20 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  g sequence to us
10c30 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a  e on this term *
10c40 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20  /.  int bRev;   
10c50 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
10c60 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
10c70 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69  rt order */..  i
10c80 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  f( (pOp->p5 & OP
10c90 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30  FLAG_PERMUTE)==0
10ca0 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b   ) aPermute = 0;
10cb0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
10cc0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
10cd0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
10ce0 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
10cf0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
10d00 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
10d10 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
10d20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c  pOp->p2;.#if SQL
10d30 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
10d40 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20  aPermute ){.    
10d50 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20  int k, mx = 0;. 
10d60 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b     for(k=0; k<n;
10d70 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75   k++) if( aPermu
10d80 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20  te[k]>mx ) mx = 
10d90 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20  aPermute[k];.   
10da0 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
10db0 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p1+mx<=(p->nMem
10dc0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
10dd0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
10de0 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d  >0 && p2+mx<=(p-
10df0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
10e00 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
10e10 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
10e20 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
10e30 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
10e40 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
10e50 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
10e60 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
10e70 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  r)+1 );.  }.#end
10e80 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
10e90 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b  UG */.  for(i=0;
10ea0 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
10eb0 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f  idx = aPermute ?
10ec0 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69   aPermute[i] : i
10ed0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
10ee0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
10ef0 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61  1+idx]) );.    a
10f00 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
10f10 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  d(&aMem[p2+idx])
10f20 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
10f30 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
10f40 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20  aMem[p1+idx]);. 
10f50 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10f60 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p2+idx, &aMem[
10f70 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73  p2+idx]);.    as
10f80 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f  sert( i<pKeyInfo
10f90 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20  ->nField );.    
10fa0 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f  pColl = pKeyInfo
10fb0 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20  ->aColl[i];.    
10fc0 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  bRev = pKeyInfo-
10fd0 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a  >aSortOrder[i];.
10fe0 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
10ff0 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
11000 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
11010 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
11020 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
11030 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
11040 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
11050 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
11060 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
11070 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
11080 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
11090 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
110a0 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
110b0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
110c0 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
110d0 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
110e0 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
110f0 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
11100 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
11110 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
11120 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
11130 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
11140 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
11150 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
11160 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
11170 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
11180 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
11190 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
111a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
111b0 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
111c0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
111d0 65 6e 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(0,3); pOp = &
111e0 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  aOp[pOp->p1 - 1]
111f0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
11200 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
11210 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11220 28 31 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (1,3); pOp = &aO
11230 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
11240 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
11250 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
11260 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
11270 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a  p->p3 - 1];.  }.
11280 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11290 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32  pcode: And P1 P2
112a0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
112b0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
112c0 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] && r[P2]).**.*
112d0 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
112e0 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
112f0 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
11300 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
11310 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
11320 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
11330 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
11340 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
11350 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
11360 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
11370 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
11380 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
11390 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
113a0 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
113b0 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
113c0 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
113d0 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
113e0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
113f0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
11400 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] || r[P2]).**.*
11410 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
11420 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
11430 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
11440 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
11450 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
11460 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
11470 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
11480 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
11490 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
114a0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
114b0 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
114c0 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
114d0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
114e0 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
114f0 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
11500 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
11510 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
11520 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
11530 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
11540 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
11550 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
11560 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
11570 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
11580 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
11590 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20  */.  int v1;    
115a0 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a  /* Left operand:
115b0 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54    0==FALSE, 1==T
115c0 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
115d0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
115e0 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74   v2;    /* Right
115f0 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c   operand: 0==FAL
11600 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
11610 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
11620 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
11630 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
11640 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
11650 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
11660 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v1 = 2;.  }else
11670 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74  {.    v1 = sqlit
11680 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11690 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70  In1)!=0;.  }.  p
116a0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
116b0 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32  >p2];.  if( pIn2
116c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
116d0 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
116e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
116f0 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
11700 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
11710 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
11720 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
11730 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
11740 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
11750 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
11760 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
11770 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
11780 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
11790 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
117a0 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
117b0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
117c0 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
117d0 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
117e0 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
117f0 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
11800 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
11810 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
11820 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
11830 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
11840 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
11850 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
11860 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
11870 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
11880 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
11890 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
118a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
118b0 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32  pcode: Not P1 P2
118c0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
118d0 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31  is: r[P2]= !r[P1
118e0 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
118f0 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
11900 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20  egister P1 as a 
11910 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20  boolean value.  
11920 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f  Store the.** boo
11930 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  lean complement 
11940 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
11950 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
11960 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
11970 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61  .** NULL, then a
11980 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20   NULL is stored 
11990 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
119a0 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  P_Not: {        
119b0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
119c0 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20  as TK_NOT, in1, 
119d0 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
119e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
119f0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
11a00 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
11a10 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
11a20 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28  l(pOut);.  if( (
11a30 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11a40 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
11a50 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
11a60 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
11a70 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65  t->u.i = !sqlite
11a80 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11a90 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
11aa0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11ab0 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  BitNot P1 P2 * *
11ac0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11ad0 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a  r[P1]= ~r[P1].**
11ae0 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
11af0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
11b00 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69  ister P1 as an i
11b10 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74  nteger.  Store t
11b20 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c  he.** ones-compl
11b30 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20  ement of the P1 
11b40 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
11b50 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68  ter P2.  If P1 h
11b60 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74  olds.** a NULL t
11b70 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  hen store a NULL
11b80 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
11b90 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20  OP_BitNot: {    
11ba0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
11bb0 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69   as TK_BITNOT, i
11bc0 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
11bd0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
11be0 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
11bf0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
11c00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
11c10 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
11c20 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
11c30 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
11c40 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
11c50 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
11c60 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71   pOut->u.i = ~sq
11c70 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
11c80 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
11c90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11ca0 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a  de: Once P1 P2 *
11cb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
11cc0 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67   the "once" flag
11cd0 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69   number P1. If i
11ce0 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74  t is set, jump t
11cf0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
11d00 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  . .** Otherwise,
11d10 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e   set the flag an
11d20 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
11d30 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
11d40 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74  uction..** In ot
11d50 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20  her words, this 
11d60 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c  opcode causes al
11d70 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f  l following opco
11d80 64 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50  des up through P
11d90 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e  2.** (but not in
11da0 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72  cluding P2) to r
11db0 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64  un just once and
11dc0 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f   to be skipped o
11dd0 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  n subsequent.** 
11de0 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68  times through th
11df0 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c  e loop..**.** Al
11e00 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61  l "once" flags a
11e10 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65  re initially cle
11e20 61 72 65 64 20 77 68 65 6e 65 76 65 72 20 61 20  ared whenever a 
11e30 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
11e40 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69  nt.** first begi
11e50 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61  ns to run..*/.ca
11e60 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
11e70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
11e80 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
11e90 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
11ea0 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61  lag );.  VdbeBra
11eb0 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63  nchTaken(p->aOnc
11ec0 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d  eFlag[pOp->p1]!=
11ed0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e  0, 2);.  if( p->
11ee0 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
11ef0 31 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  1] ){.    goto j
11f00 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
11f10 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65  se{.    p->aOnce
11f20 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  Flag[pOp->p1] = 
11f30 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
11f40 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
11f50 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11f60 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
11f70 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11f80 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
11f90 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
11fa0 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
11fb0 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
11fc0 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
11fd0 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
11fe0 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
11ff0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
12000 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
12010 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
12020 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ero..*/./* Opcod
12030 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
12040 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12050 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12060 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12070 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
12080 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
12090 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69  nsidered false i
120a0 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72  f it has a numer
120b0 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f  ic value of zero
120c0 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
120d0 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
120e0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
120f0 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
12100 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
12110 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  o..*/.case OP_If
12120 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
12130 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
12140 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
12150 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
12160 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12170 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20  int c;.  pIn1 = 
12180 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12190 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
121a0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
121b0 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b      c = pOp->p3;
121c0 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66  .  }else{.#ifdef
121d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
121e0 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
121f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
12200 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
12210 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20  ;.#else.    c = 
12220 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
12230 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b  alue(pIn1)!=0.0;
12240 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
12250 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12260 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a  IfNot ) c = !c;.
12270 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
12280 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a  Taken(c!=0, 2);.
12290 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67    if( c ){.    g
122a0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
122b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
122c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
122d0 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
122e0 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
122f0 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
12300 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
12310 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
12320 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12330 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
12340 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
12350 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12360 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
12370 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
12380 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12390 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
123a0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
123b0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
123c0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
123d0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
123e0 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
123f0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
12400 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
12410 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
12420 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  tNull P1 P2 * * 
12430 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
12440 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f  f r[P1]!=NULL go
12450 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
12460 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12470 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12480 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P1 is not NULL. 
12490 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74   .*/.case OP_Not
124a0 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
124b0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
124c0 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  _NOTNULL, jump, 
124d0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
124e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
124f0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12500 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
12510 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20  & MEM_Null)==0, 
12520 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
12530 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12540 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)==0 ){.    got
12550 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
12560 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12570 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
12580 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
12590 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
125a0 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  3]=PX.**.** Inte
125b0 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
125c0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
125d0 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
125e0 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
125f0 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
12600 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
12610 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
12620 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
12630 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
12640 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
12650 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
12660 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
12670 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
12680 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
12690 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
126a0 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
126b0 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
126c0 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
126d0 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
126e0 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
126f0 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
12700 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
12710 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
12720 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
12730 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
12740 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
12750 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
12760 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
12770 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
12780 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
12790 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
127a0 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
127b0 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
127c0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
127d0 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
127e0 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
127f0 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
12800 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
12810 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
12820 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
12830 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
12840 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
12850 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
12860 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
12870 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
12880 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
12890 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
128a0 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
128b0 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
128c0 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
128d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
128e0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
128f0 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
12900 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
12910 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20  t on P5 when.** 
12920 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
12930 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
12940 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
12950 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
12960 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
12970 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
12980 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
12990 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
129a0 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
129b0 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
129c0 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
129d0 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
129e0 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
129f0 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
12a00 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
12a10 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64   {.  i64 payload
12a20 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
12a30 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
12a40 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
12a50 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
12a60 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
12a70 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
12a80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
12a90 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
12aa0 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
12ab0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
12ac0 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
12ad0 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
12ae0 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
12af0 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
12b00 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
12b10 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
12b20 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
12b30 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
12b40 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
12b50 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
12b60 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
12b70 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
12b80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
12b90 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
12ba0 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
12bb0 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
12bc0 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
12bd0 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
12be0 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
12bf0 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
12c00 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
12c10 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
12c20 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
12c30 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
12c40 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
12c50 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
12c60 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
12c70 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
12c80 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
12c90 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
12ca0 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
12cb0 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
12cc0 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
12cd0 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
12ce0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
12cf0 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
12d00 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  a */.  u64 offse
12d10 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
12d20 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20  bit offset */.  
12d30 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20  u32 avail;      
12d40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12d50 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
12d60 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
12d70 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
12d80 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
12d90 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
12da0 65 61 64 65 72 20 2a 2f 0a 20 20 75 31 36 20 66  eader */.  u16 f
12db0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
12dc0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 76 61   pDest->flags va
12dd0 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  lue */.  Mem *pR
12de0 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
12df0 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
12e00 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20   register */..  
12e10 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
12e20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
12e30 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
12e40 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
12e50 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
12e60 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
12e70 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
12e80 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
12e90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
12ea0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
12eb0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
12ec0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
12ed0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
12ee0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
12ef0 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
12f00 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
12f10 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66  pC->aOffset;.#if
12f20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12f30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
12f40 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61  assert( pC->pVta
12f50 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a  bCursor==0 ); /*
12f60 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72   OP_Column never
12f70 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75   called on virtu
12f80 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  al table */.#end
12f90 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  if.  pCrsr = pC-
12fa0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
12fb0 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20  rt( pCrsr!=0 || 
12fc0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
12fd0 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72  eg>0 ); /* pCrsr
12fe0 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54   NULL on PseudoT
12ff0 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72  ables */.  asser
13000 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
13010 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20  C->nullRow );   
13020 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75         /* pC->nu
13030 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54  llRow on PseudoT
13040 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
13050 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
13060 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69  he is stale, bri
13070 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
13080 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
13090 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
130a0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
130b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
130c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
130d0 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
130e0 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s!=p->cacheCtr )
130f0 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  {.    if( pC->nu
13100 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69  llRow ){.      i
13110 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20  f( pCrsr==0 ){. 
13120 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
13130 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
13140 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70  g>0 );.        p
13150 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
13160 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
13170 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13180 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
13190 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
131a0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
131b0 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
131c0 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
131d0 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
131e0 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
131f0 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
13200 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
13210 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
13220 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
13230 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13240 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
13250 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13260 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
13270 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
13280 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
13290 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
132a0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
132b0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
132c0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
132d0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
132e0 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
132f0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
13300 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
13310 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
13320 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
13330 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
13340 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61   ); /* True beca
13350 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
13360 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
13370 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73   */.        /* s
13380 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
13390 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
133a0 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
133b0 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
133c0 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
133d0 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
133e0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
133f0 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
13400 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  .        ** larg
13410 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e  er than 32 bits.
13420 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
13430 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65  rt( (payloadSize
13440 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f  64 & SQLITE_MAX_
13450 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f  U32)==(u64)paylo
13460 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20  adSize64 );.    
13470 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
13480 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
13490 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
134a0 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  l);.        pC->
134b0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75  payloadSize = (u
134c0 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  32)payloadSize64
134d0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
134e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
134f0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
13500 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
13510 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f  );.        VVA_O
13520 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
13530 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
13540 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f  Crsr, &pC->paylo
13550 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20  adSize);.       
13560 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
13570 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44  ITE_OK );   /* D
13580 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
13590 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20   fail */.       
135a0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
135b0 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
135c0 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
135d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
135e0 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
135f0 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
13600 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
13610 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
13620 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
13630 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
13640 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
13650 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
13660 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
13670 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
13680 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
13690 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
136a0 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
136b0 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
136c0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
136d0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
136e0 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
136f0 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ig;.      }.    
13700 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  }.    pC->cacheS
13710 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65  tatus = p->cache
13720 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64  Ctr;.    pC->iHd
13730 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72  rOffset = getVar
13740 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20  int32(pC->aRow, 
13750 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d  offset);.    pC-
13760 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b  >nHdrParsed = 0;
13770 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20  .    aOffset[0] 
13780 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20  = offset;...    
13790 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74  if( avail<offset
137a0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d   ){.      /* pC-
137b0 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68  >aRow does not h
137c0 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ave to hold the 
137d0 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20  entire row, but 
137e0 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74  it does at least
137f0 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74  .      ** need t
13800 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64  o cover the head
13810 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  er of the record
13820 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64  .  If pC->aRow d
13830 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a  oes not contain.
13840 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d        ** the com
13850 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68  plete header, th
13860 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72  en set it to zer
13870 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68  o, forcing the h
13880 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20  eader to be.    
13890 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
138a0 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20   allocated. */. 
138b0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
138c0 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  0;.      pC->szR
138d0 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f  ow = 0;..      /
138e0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
138f0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
13900 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
13910 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
13920 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20  er..      ** Do 
13930 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69  this now to avoi
13940 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65  d an oversize me
13950 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
13960 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
13970 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
13980 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
13990 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
139a0 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
139b0 62 79 74 65 0a 20 20 20 20 20 20 2a 2a 20 74 79  byte.      ** ty
139c0 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20  pes use so much 
139d0 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20  data space that 
139e0 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
139f0 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66  e 4096 and 32 of
13a00 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  .      ** them, 
13a10 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
13a20 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
13a30 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
13a40 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 20  lts from a.     
13a50 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20   ** 3-byte type 
13a60 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20  for each of the 
13a70 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38  maximum of 32768
13a80 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68   columns plus th
13a90 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 65 78 74  ree.      ** ext
13aa0 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
13ab0 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
13ac0 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
13ad0 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
13ae0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
13af0 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c  offset > 98307 |
13b00 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70  | offset > pC->p
13b10 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
13b20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
13b30 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
13b40 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
13b50 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
13b60 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
13b70 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
13b80 67 20 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74  g goto is an opt
13b90 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63  imization.  It c
13ba0 61 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e  an be omitted an
13bb0 64 0a 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68  d.    ** everyth
13bc0 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77  ing will still w
13bd0 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c  ork.  But OP_Col
13be0 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c  umn is measurabl
13bf0 79 20 66 61 73 74 65 72 0a 20 20 20 20 2a 2a 20  y faster.    ** 
13c00 62 79 20 73 6b 69 70 70 69 6e 67 20 74 68 65 20  by skipping the 
13c10 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 64 69  subsequent condi
13c20 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20 69 73  tional, which is
13c30 20 61 6c 77 61 79 73 20 74 72 75 65 2e 0a 20 20   always true..  
13c40 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
13c50 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
13c60 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f  =p2 );         /
13c70 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b  * Conditional sk
13c80 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 67 6f 74  ipped */.    got
13c90 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64  o op_column_read
13ca0 5f 68 65 61 64 65 72 3b 0a 20 20 7d 0a 0a 20 20  _header;.  }..  
13cb0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20  /* Make sure at 
13cc0 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20  least the first 
13cd0 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20  p2+1 entries of 
13ce0 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20  the header have 
13cf0 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64  been.  ** parsed
13d00 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72   and valid infor
13d10 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66  mation is in aOf
13d20 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61  fset[] and pC->a
13d30 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
13d40 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
13d50 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
13d60 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
13d70 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
13d80 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
13d90 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
13da0 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
13db0 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
13dc0 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
13dd0 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
13de0 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70  d .    */.    op
13df0 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61  _column_read_hea
13e00 64 65 72 3a 0a 20 20 20 20 69 66 28 20 70 43 2d  der:.    if( pC-
13e10 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66  >iHdrOffset<aOff
13e20 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  set[0] ){.      
13e30 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61  /* Make sure zDa
13e40 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f  ta points to eno
13e50 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ugh of the recor
13e60 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
13e70 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  eader. */.      
13e80 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
13e90 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  ){.        memse
13ea0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
13eb0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20  of(sMem));.     
13ec0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
13ed0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
13ee0 70 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73 65  pCrsr, 0, aOffse
13ef0 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73 54 61 62  t[0], !pC->isTab
13f00 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  le, &sMem);.    
13f10 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
13f20 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 6f 70 5f  TE_OK ) goto op_
13f30 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
13f40 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
13f50 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
13f60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13f70 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
13f80 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
13f90 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43     /* Fill in pC
13fa0 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  ->aType[i] and a
13fb0 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
13fc0 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
13fd0 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
13fe0 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
13ff0 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
14000 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b  set64 = aOffset[
14010 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
14020 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
14030 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
14040 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
14050 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
14060 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32     assert( i<=p2
14070 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
14080 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   );.      do{.  
14090 20 20 20 20 20 20 69 66 28 20 28 74 20 3d 20 7a        if( (t = z
140a0 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a  Hdr[0])<0x80 ){.
140b0 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b            zHdr++
140c0 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73  ;.          offs
140d0 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56  et64 += sqlite3V
140e0 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c  dbeOneByteSerial
140f0 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
14100 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14110 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c       zHdr += sql
14120 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
14130 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20  zHdr, &t);.     
14140 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
14150 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14160 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
14170 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
14180 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d  pC->aType[i++] =
14190 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66   t;.        aOff
141a0 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f  set[i] = (u32)(o
141b0 66 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66  ffset64 & 0xffff
141c0 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68  ffff);.      }wh
141d0 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ile( i<=p2 && zH
141e0 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
141f0 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
14200 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43  ed = i;.      pC
14210 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28  ->iHdrOffset = (
14220 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74  u32)(zHdr - zDat
14230 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43  a);.      if( pC
14240 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69  ->aRow==0 ) sqli
14250 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
14260 65 28 26 73 4d 65 6d 29 3b 0a 20 20 0a 20 20 20  e(&sMem);.  .   
14270 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
14280 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61   is corrupt if a
14290 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ny of the follow
142a0 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20  ing are true:.  
142b0 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62      ** (1) the b
142c0 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ytes of the head
142d0 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74  er extend past t
142e0 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64  he declared head
142f0 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a  er size.      **
14300 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65 20   (2) the entire 
14310 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64 20  header was used 
14320 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61  but not all data
14330 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20 20   was used.      
14340 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f  ** (3) the end o
14350 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e  f the data exten
14360 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e  ds beyond the en
14370 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  d of the record.
14380 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14390 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48  if( (zHdr>=zEndH
143a0 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64  dr && (zHdr>zEnd
143b0 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21  Hdr || offset64!
143c0 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65  =pC->payloadSize
143d0 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66  )).       || (of
143e0 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79  fset64 > pC->pay
143f0 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
14400 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
14410 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
14420 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  KPT;.        got
14430 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
14440 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
14450 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65  ..    /* If afte
14460 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72  r trying to extr
14470 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20  act new entries 
14480 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c  from the header,
14490 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20   nHdrParsed is. 
144a0 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20     ** still not 
144b0 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d  up to p2, that m
144c0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65  eans that the re
144d0 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74  cord has fewer t
144e0 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f  han p2.    ** co
144f0 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72  lumns.  So the r
14500 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69  esult will be ei
14510 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ther the default
14520 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c   value or a NULL
14530 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
14540 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
14550 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28  =p2 ){.      if(
14560 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
14570 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20  _MEM ){.        
14580 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
14590 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
145a0 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
145b0 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
145c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
145d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
145e0 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
145f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
14600 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
14610 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
14620 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70      t = pC->aTyp
14630 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  e[p2];.  }..  /*
14640 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e   Extract the con
14650 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b  tent for the p2+
14660 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  1-th column.  Co
14670 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20  ntrol can only. 
14680 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70   ** reach this p
14690 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b  oint if aOffset[
146a0 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b  p2], aOffset[p2+
146b0 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70  1], and pC->aTyp
146c0 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61  e[p2] are.  ** a
146d0 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20  ll valid..  */. 
146e0 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
146f0 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20  nHdrParsed );.  
14700 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
14710 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72  TE_OK );.  asser
14720 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
14730 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
14740 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28  (pDest) );.  if(
14750 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
14760 70 44 65 73 74 29 20 29 20 73 71 6c 69 74 65 33  pDest) ) sqlite3
14770 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14780 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28  Dest);.  assert(
14790 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32   t==pC->aType[p2
147a0 5d 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73  ] );.  if( pC->s
147b0 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32  zRow>=aOffset[p2
147c0 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  +1] ){.    /* Th
147d0 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e  is is the common
147e0 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
147f0 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20  desired content 
14800 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67  fits on the orig
14810 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65  inal.    ** page
14820 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e   - where the con
14830 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61  tent is not on a
14840 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  n overflow page 
14850 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
14860 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e  beSerialGet(pC->
14870 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d  aRow+aOffset[p2]
14880 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d  , t, pDest);.  }
14890 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
148a0 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
148b0 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65   only when conte
148c0 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f  nt is on overflo
148d0 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69  w pages */.    i
148e0 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28  f( ((pOp->p5 & (
148f0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
14900 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52  |OPFLAG_TYPEOFAR
14910 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20  G))!=0.         
14920 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
14930 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
14940 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
14950 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20  PEOFARG)!=0)).  
14960 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c     || (len = sql
14970 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
14980 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20  peLen(t))==0.   
14990 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
149a0 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
149b0 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  nt for.      ** 
149c0 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66     1. the typeof
149d0 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20  () function,.   
149e0 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20     **    2. the 
149f0 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
14a00 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
14a10 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20  b, and.      ** 
14a20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e     3. if the con
14a30 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a  tent length is z
14a40 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f  ero..      ** So
14a50 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
14a60 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74  l use bogus cont
14a70 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  ent rather than 
14a80 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a  reading.      **
14a90 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
14aa0 73 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77  sk.  NULL will w
14ab0 6f 72 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75  ork for the valu
14ac0 65 20 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20  e for strings.  
14ad0 20 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73      ** and blobs
14ae0 20 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73   and whatever is
14af0 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53   in the payloadS
14b00 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20  ize64 variable. 
14b10 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72       ** will wor
14b20 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67  k for everything
14b30 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20   else. */.      
14b40 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14b50 6c 47 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38  lGet(t<=13 ? (u8
14b60 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  *)&payloadSize64
14b70 20 3a 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b   : 0, t, pDest);
14b80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
14b90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
14ba0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
14bb0 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
14bc0 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54  ], len, !pC->isT
14bd0 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b           pDest);
14c00 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
14c10 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
14c20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
14c30 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
14c40 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
14c50 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
14c60 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
14c70 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
14c80 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
14c90 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  &= ~MEM_Ephem;. 
14ca0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74     }.  }.  pDest
14cb0 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
14cc0 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
14cd0 3a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f  :.  /* If the co
14ce0 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e  lumn value is an
14cf0 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e   ephemeral strin
14d00 67 2c 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20  g, go ahead and 
14d10 70 65 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61  persist.  ** tha
14d20 74 20 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65  t string in case
14d30 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65   the cursor move
14d40 73 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c  s before the col
14d50 75 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a  umn value is.  *
14d60 2a 20 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c  * used.  The fol
14d70 6c 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73  lowing code does
14d80 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
14d90 6f 66 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  of Deephemeraliz
14da0 65 28 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65  e().  ** but doe
14db0 73 20 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a  s it faster. */.
14dc0 20 20 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c    if( (pDest->fl
14dd0 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
14de0 21 3d 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20  !=0 && pDest->z 
14df0 29 7b 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73  ){.    fx = pDes
14e00 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
14e10 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  Str|MEM_Blob);. 
14e20 20 20 20 61 73 73 65 72 74 28 20 66 78 21 3d 30     assert( fx!=0
14e30 20 29 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   );.    zData = 
14e40 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
14e50 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70  ->z;.    len = p
14e60 44 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28  Dest->n;.    if(
14e70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
14e80 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44  learAndResize(pD
14e90 65 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f  est, len+2) ) go
14ea0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d  to no_mem;.    m
14eb0 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20  emcpy(pDest->z, 
14ec0 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20  zData, len);.   
14ed0 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
14ee0 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a   0;.    pDest->z
14ef0 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20  [len+1] = 0;.   
14f00 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20   pDest->flags = 
14f10 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  fx|MEM_Term;.  }
14f20 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72  .op_column_error
14f30 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
14f40 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
14f50 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
14f60 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
14f70 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
14f80 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
14f90 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
14fa0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
14fb0 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a  nity(r[P1@P2]).*
14fc0 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
14fd0 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
14fe0 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
14ff0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
15000 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
15010 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
15020 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
15030 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
15040 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
15050 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
15060 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
15070 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
15080 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15090 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
150a0 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
150b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
150c0 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
150d0 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
150e0 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
150f0 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
15100 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
15110 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15120 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
15130 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
15140 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
15150 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
15160 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
15170 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
15180 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
15190 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
151a0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
151b0 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
151c0 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
151d0 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
151e0 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
151f0 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  &p->aMem[(p->nMe
15200 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
15210 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
15220 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
15230 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
15240 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
15250 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
15260 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
15270 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15280 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
15290 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
152a0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b  nopsis: r[P3]=mk
152b0 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  rec(r[P1@P2]).**
152c0 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
152d0 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
152e0 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
152f0 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
15300 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
15310 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
15320 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
15330 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
15340 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
15350 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
15360 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
15370 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
15380 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
15390 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
153a0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
153b0 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
153c0 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
153d0 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
153e0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
153f0 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
15400 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
15410 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
15420 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
15430 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
15440 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
15450 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
15460 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
15470 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
15480 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
15490 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
154a0 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
154b0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
154c0 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
154d0 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f  ffinity BLOB..*/
154e0 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
154f0 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
15500 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
15510 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
15520 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
15530 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
15540 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
15550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15560 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
15570 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
15580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15590 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
155a0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
155b0 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
155c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
155d0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
155e0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
155f0 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
15600 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
15610 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
15620 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
15630 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20    i64 nZero;    
15640 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15650 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
15660 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
15670 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
15680 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
15690 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
156a0 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
156b0 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
156c0 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
156d0 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
156e0 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
156f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
15700 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
15710 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
15720 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
15730 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
15740 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
15750 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
15760 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
15770 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15780 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
15790 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
157a0 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
157b0 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
157c0 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
157d0 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
157e0 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
157f0 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
15800 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
15810 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
15820 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
15830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
15840 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
15850 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72  wRecord[] header
15860 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15880 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
15890 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65  ewRecord[] conte
158a0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  nt */.  int len;
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
158c0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
158d0 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
158e0 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
158f0 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
15900 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
15910 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
15920 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
15930 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
15940 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15950 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15960 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15970 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
15980 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
15990 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
159a0 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
159b0 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
159c0 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
159d0 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
159e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
159f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
15a20 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
15a30 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
15a40 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
15a50 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
15a60 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
15a70 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  and so forth..  
15a80 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
15a90 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
15aa0 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
15ab0 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
15ac0 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
15ad0 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
15ae0 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
15af0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15b00 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
15b10 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
15b20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
15b30 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
15b40 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
15b50 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
15b60 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
15b70 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
15b80 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
15b90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
15ba0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
15bb0 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
15bc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15bd0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
15be0 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
15bf0 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
15c00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15c10 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
15c20 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
15c30 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
15c40 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
15c50 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
15c60 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
15c70 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
15c80 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
15c90 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  Field<=(p->nMem-
15ca0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
15cb0 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
15cc0 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
15cd0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
15ce0 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
15cf0 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
15d00 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
15d10 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
15d20 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
15d30 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
15d40 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
15d50 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
15d60 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
15d70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
15d80 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
15d90 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
15da0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
15db0 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70   pOut);..  /* Ap
15dc0 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65  ply the requeste
15dd0 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c  d affinity to al
15de0 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20  l inputs.  */.  
15df0 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
15e00 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a  pLast );.  if( z
15e10 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
15e20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
15e30 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70     do{.      app
15e40 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b  lyAffinity(pRec+
15e50 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  +, *(zAffinity++
15e60 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
15e70 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66      assert( zAff
15e80 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70  inity[0]==0 || p
15e90 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  Rec<=pLast );.  
15ea0 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
15eb0 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20  ity[0] );.  }.. 
15ec0 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
15ed0 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
15ee0 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
15ef0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
15f00 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
15f10 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
15f20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
15f30 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a   new record..  *
15f40 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74  /.  pRec = pLast
15f50 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
15f60 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
15f70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63  Rec) );.    pRec
15f80 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
15f90 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
15fa0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
15fb0 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
15fc0 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69  ;.    len = sqli
15fd0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15fe0 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  eLen(serial_type
15ff0 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
16000 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
16010 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  o ){.      if( n
16020 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20  Data ){.        
16030 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
16040 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65  emExpandBlob(pRe
16050 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  c) ) goto no_mem
16060 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
16070 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20         nZero += 
16080 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
16090 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52         len -= pR
160a0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
160b0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
160c0 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
160d0 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
160e0 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20  l_type==127 );. 
160f0 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
16100 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b  ial_type==128 );
16110 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72  .    nHdr += ser
16120 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20  ial_type<=127 ? 
16130 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e  1 : sqlite3Varin
16140 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
16150 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d  );.  }while( (--
16160 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b  pRec)>=pData0 );
16170 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d  ..  /* EVIDENCE-
16180 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34  OF: R-22564-1164
16190 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67  7 The header beg
161a0 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ins with a singl
161b0 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68  e varint.  ** wh
161c0 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ich determines t
161d0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
161e0 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
161f0 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69  header. The vari
16200 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73  nt.  ** value is
16210 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
16220 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73   header in bytes
16230 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73   including the s
16240 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20  ize varint.  ** 
16250 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73  itself. */.  tes
16260 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36  tcase( nHdr==126
16270 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
16280 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69  nHdr==127 );.  i
16290 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a  f( nHdr<=126 ){.
162a0 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f      /* The commo
162b0 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48  n case */.    nH
162c0 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65  dr += 1;.  }else
162d0 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61  {.    /* Rare ca
162e0 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c  se of a really l
162f0 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20  arge header */. 
16300 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c     nVarint = sql
16310 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
16320 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  dr);.    nHdr +=
16330 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66   nVarint;.    if
16340 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
16350 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
16360 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20   ) nHdr++;.  }. 
16370 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
16380 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ata;.  if( nByte
16390 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69  +nZero>db->aLimi
163a0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
163b0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
163c0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
163d0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
163e0 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
163f0 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
16400 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
16410 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
16420 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
16430 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
16440 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
16450 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
16460 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
16470 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
16480 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
16490 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
164a0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
164b0 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
164c0 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72  () could clobber
164d0 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72   the value befor
164e0 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20  e it is used).. 
164f0 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
16500 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
16510 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e  Resize(pOut, (in
16520 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  t)nByte) ){.    
16530 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
16540 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20  .  zNewRecord = 
16550 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a  (u8 *)pOut->z;..
16560 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
16570 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70  ecord */.  i = p
16580 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52  utVarint32(zNewR
16590 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20  ecord, nHdr);.  
165a0 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65  j = nHdr;.  asse
165b0 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
165c0 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44  t );.  pRec = pD
165d0 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  ata0;.  do{.    
165e0 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52  serial_type = pR
165f0 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f  ec->uTemp;.    /
16600 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
16610 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c  -06529-47362 Fol
16620 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20  lowing the size 
16630 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f  varint are one o
16640 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64  r more.    ** ad
16650 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73  ditional varints
16660 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e  , one per column
16670 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75  . */.    i += pu
16680 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
16690 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
166a0 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20  _type);         
166b0 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70     /* serial typ
166c0 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44  e */.    /* EVID
166d0 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36  ENCE-OF: R-64536
166e0 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65  -51728 The value
166f0 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  s for each colum
16700 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a  n in the record.
16710 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65      ** immediate
16720 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65  ly follow the he
16730 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b  ader. */.    j +
16740 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
16750 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
16760 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72  rd[j], pRec, ser
16770 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f  ial_type); /* co
16780 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c  ntent */.  }whil
16790 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61  e( (++pRec)<=pLa
167a0 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  st );.  assert( 
167b0 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73  i==nHdr );.  ass
167c0 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b  ert( j==nByte );
167d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
167e0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
167f0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
16800 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
16810 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
16820 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
16830 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66  = MEM_Blob;.  if
16840 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70  ( nZero ){.    p
16850 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e  Out->u.nZero = n
16860 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Zero;.    pOut->
16870 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72  flags |= MEM_Zer
16880 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  o;.  }.  pOut->e
16890 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
168a0 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
168b0 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
168c0 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74  onverted to text
168d0 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
168e0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
168f0 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
16900 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
16910 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
16920 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
16930 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
16940 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f  nopsis: r[P2]=co
16950 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  unt().**.** Stor
16960 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
16970 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65  entries (an inte
16980 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68  ger value) in th
16990 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
169a0 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63   .** opened by c
169b0 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69  ursor P1 in regi
169c0 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64  ster P2.*/.#ifnd
169d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
169e0 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f  TREECOUNT.case O
169f0 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  P_Count: {      
16a00 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
16a10 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
16a20 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
16a30 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
16a40 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75  sr[pOp->p1]->pCu
16a50 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
16a60 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
16a70 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
16a80 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
16a90 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
16aa0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
16ab0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
16ac0 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
16ad0 72 79 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  ry);.  pOut = ou
16ae0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
16af0 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
16b00 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
16b10 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
16b20 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
16b30 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
16b40 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
16b50 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
16b60 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
16b70 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
16b80 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
16b90 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
16ba0 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
16bb0 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
16bc0 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
16bd0 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
16be0 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
16bf0 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
16c00 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
16c10 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
16c20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
16c30 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
16c40 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
16c70 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
16c80 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16ca0 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
16cb0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
16cc0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
16cd0 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
16ce0 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
16cf0 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
16d00 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
16d10 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
16d20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
16d30 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
16d40 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
16d50 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
16d60 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
16d70 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
16d80 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
16d90 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
16da0 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
16db0 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
16dc0 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
16dd0 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
16de0 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
16df0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
16e00 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
16e10 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
16e20 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
16e30 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
16e40 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
16e50 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
16e60 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
16e70 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
16e80 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
16e90 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
16ea0 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
16eb0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
16ec0 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
16ed0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16ee0 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
16ef0 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
16f00 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
16f10 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
16f20 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
16f30 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
16f40 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
16f50 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
16f60 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
16f70 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
16f80 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
16f90 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
16fa0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
16fb0 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  p, "cannot open 
16fc0 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
16fd0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16fe0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
16ff0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17000 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17010 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
17020 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
17030 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
17040 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
17050 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
17060 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
17070 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
17080 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
17090 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
170a0 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
170b0 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
170c0 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
170d0 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
170e0 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
170f0 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
17100 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
17110 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
17120 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
17130 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
17140 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
17150 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
17160 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
17170 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
17180 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
17190 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
171a0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
171b0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
171c0 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
171d0 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
17200 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
17210 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
17220 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
17230 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17240 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
17250 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
17260 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
17270 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
17280 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
17290 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
172a0 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69  , sizeof(Savepoi
172b0 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  nt)+nName+1);.  
172c0 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a      if( pNew ){.
172d0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e          pNew->zN
172e0 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70  ame = (char *)&p
172f0 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20  New[1];.        
17300 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61  memcpy(pNew->zNa
17310 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  me, zName, nName
17320 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20  +1);.    .      
17330 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
17340 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
17350 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20  tion, then mark 
17360 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61  this as a specia
17370 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72  l.        ** "tr
17380 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
17390 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20  int". */.       
173a0 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
173b0 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  mit ){.         
173c0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
173d0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64  = 0;.          d
173e0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
173f0 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20  Savepoint = 1;. 
17400 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
17410 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
17420 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  epoint++;.      
17430 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20    }.    .       
17440 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77   /* Link the new
17450 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20   savepoint into 
17460 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
17470 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20  dle's list. */. 
17480 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65         pNew->pNe
17490 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  xt = db->pSavepo
174a0 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
174b0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e  >pSavepoint = pN
174c0 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ew;.        pNew
174d0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
174e0 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
174f0 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  ons;.        pNe
17500 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  w->nDeferredImmC
17510 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
17520 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
17530 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
17540 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
17550 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
17560 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
17570 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
17580 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
17590 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
175a0 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
175b0 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
175c0 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
175d0 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
175e0 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
175f0 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
17600 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
17610 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
17620 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
17630 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
17640 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
17650 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
17660 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
17670 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
17680 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
17690 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
176a0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
176b0 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
176c0 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
176d0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
176e0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
176f0 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  se if( db->nVdbe
17700 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53  Write>0 && p1==S
17710 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
17720 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
17730 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
17740 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
17750 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
17760 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
17770 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
17780 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ite statements..
17790 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
177a0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
177b0 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61  p, "cannot relea
177c0 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  se savepoint - "
177d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177e0 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
177f0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
17800 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
17810 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17820 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
17830 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
17840 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
17850 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
17860 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
17870 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
17880 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
17890 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
178a0 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
178b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
178c0 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
178d0 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
178e0 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
178f0 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
17900 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
17910 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
17920 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
17930 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
17940 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
17950 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
17960 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
17970 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
17980 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
17990 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
179a0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
179b0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
179c0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
179d0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
179e0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
179f0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
17a00 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
17a10 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
17a20 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
17a30 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
17a40 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
17a50 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
17a60 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17a70 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
17a80 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17a90 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17aa0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
17ab0 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
17ac0 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
17ad0 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
17ae0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53  .        int isS
17af0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
17b00 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
17b10 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
17b20 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
17b30 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
17b40 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
17b50 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
17b60 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
17b70 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  e = (db->flags &
17b80 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
17b90 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20  anges)!=0;.     
17ba0 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
17bb0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
17bc0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  {.            rc
17bd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54   = sqlite3BtreeT
17be0 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
17bf0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20  ->aDb[ii].pBt,. 
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f        SQLITE_ABO
17c30 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20  RT_ROLLBACK,.   
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c60 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
17c70 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20  ge==0);.        
17c80 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17c90 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
17ca0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17cb0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
17cc0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
17cd0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
17ce0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  ange = 0;.      
17cf0 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
17d00 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
17d10 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
17d20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17d30 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
17d40 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
17d50 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
17d60 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
17d70 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
17d80 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
17d90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17da0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
17db0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17dc0 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68    if( isSchemaCh
17dd0 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ange ){.        
17de0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
17df0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
17e00 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
17e10 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
17e20 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
17e30 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20  ion(db);.       
17e40 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28     db->flags = (
17e50 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49  db->flags | SQLI
17e60 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
17e70 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
17e80 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
17e90 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
17ea0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
17eb0 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c   RELEASE or ROLL
17ec0 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c  BACK, destroy al
17ed0 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  l .      ** save
17ee0 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e  points nested in
17ef0 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65  side of the save
17f00 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
17f10 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ated on. */.    
17f20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61    while( db->pSa
17f30 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f  vepoint!=pSavepo
17f40 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  int ){.        p
17f50 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  Tmp = db->pSavep
17f60 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
17f70 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
17f80 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  Tmp->pNext;.    
17f90 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
17fa0 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20  e(db, pTmp);.   
17fb0 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
17fc0 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a  int--;.      }..
17fd0 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69        /* If it i
17fe0 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65  s a RELEASE, the
17ff0 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61  n destroy the sa
18000 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18010 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20  erated on .     
18020 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69   ** too. If it i
18030 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c  s a ROLLBACK TO,
18040 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75   then set the nu
18050 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
18060 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74   .      ** const
18070 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
18080 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
18090 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
180a0 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20  value stored.   
180b0 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73     ** when the s
180c0 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65  avepoint was cre
180d0 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20  ated.  */.      
180e0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
180f0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
18100 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61       assert( pSa
18110 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61  vepoint==db->pSa
18120 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20  vepoint );.     
18130 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
18140 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
18150 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
18160 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
18170 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   pSavepoint);.  
18180 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
18190 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
181a0 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
181b0 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20  oint--;.        
181c0 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
181d0 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
181e0 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65  rredCons = pSave
181f0 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
18200 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62  Cons;.        db
18210 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
18220 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
18230 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18240 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  s;.      }..    
18250 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
18260 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45  tion || p1==SAVE
18270 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
18280 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
18290 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
182a0 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76  int(db, p1, iSav
182b0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
182c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
182d0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
182e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
182f0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
18300 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
18310 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
18320 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
18330 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
18340 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
18350 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
18360 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
18370 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
18380 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
18390 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
183a0 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
183b0 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
183c0 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
183d0 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
183e0 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
183f0 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
18400 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
18410 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
18420 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
18430 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
18440 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
18450 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
18460 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
18470 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
18480 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
18490 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
184a0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
184b0 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
184c0 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43  ;.  int turnOnAC
184d0 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
184e0 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
184f0 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
18500 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f  pOp->p2;.  turnO
18510 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74  nAC = desiredAut
18520 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e  oCommit && !db->
18530 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73  autoCommit;.  as
18540 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
18550 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65  oCommit==1 || de
18560 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
18570 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
18580 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18590 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63  t==1 || iRollbac
185a0 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  k==0 );.  assert
185b0 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  ( db->nVdbeActiv
185c0 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  e>0 );  /* At le
185d0 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
185e0 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61  is active */.  a
185f0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
18600 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 74 75  der );..  if( tu
18610 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c  rnOnAC && !iRoll
18620 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
18630 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
18640 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
18650 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
18660 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
18670 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
18680 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
18690 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
186a0 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
186b0 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
186c0 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
186d0 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
186e0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
186f0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72  cannot commit tr
18700 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
18730 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
18740 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
18750 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
18760 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
18770 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
18780 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
18790 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
187a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
187b0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
187c0 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
187d0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
187e0 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  db, SQLITE_ABORT
187f0 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20  _ROLLBACK);.    
18800 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
18810 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
18820 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
18830 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
18840 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
18850 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
18860 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
18870 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
18880 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
18890 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
188a0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  t;.    }.    if(
188b0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
188c0 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
188d0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
188e0 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
188f0 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  p);.      db->au
18900 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
18910 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
18920 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72  mit);.      p->r
18930 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
18940 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
18950 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
18960 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
18970 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
18980 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
18990 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
189a0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
189b0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
189c0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
189d0 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
189e0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
189f0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
18a00 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
18a10 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
18a20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
18a30 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
18a40 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
18a50 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
18a60 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
18a70 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
18a80 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
18a90 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
18aa0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
18ab0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
18ac0 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
18af0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
18b00 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
18b10 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
18b20 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18b30 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18b40 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
18b50 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
18b60 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
18b70 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
18b80 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
18b90 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
18ba0 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
18bb0 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
18bc0 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
18bd0 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
18be0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
18bf0 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
18c00 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
18c10 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
18c20 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
18c30 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
18c40 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
18c50 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
18c60 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
18c70 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
18c80 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
18c90 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
18ca0 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
18cb0 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
18cc0 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
18cd0 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
18ce0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18cf0 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
18d00 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
18d10 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
18d20 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
18d30 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
18d40 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
18d50 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
18d60 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
18d70 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
18d80 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
18d90 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
18da0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
18db0 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
18dc0 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
18dd0 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
18de0 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
18df0 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
18e00 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
18e10 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
18e20 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
18e30 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
18e40 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
18e50 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
18e60 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
18e70 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
18e80 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
18e90 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
18ea0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
18eb0 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
18ec0 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
18ed0 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
18ee0 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
18ef0 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
18f00 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
18f10 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
18f20 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
18f30 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
18f40 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
18f50 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
18f60 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
18f70 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
18f80 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
18f90 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
18fa0 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
18fb0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
18fc0 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
18fd0 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
18fe0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
18ff0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
19000 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
19010 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
19020 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
19030 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
19040 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
19050 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
19060 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
19070 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
19080 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
19090 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
190a0 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
190b0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
190c0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
190d0 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
190e0 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
190f0 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
19100 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
19110 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
19120 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
19130 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
19140 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
19150 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
19160 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
19170 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19180 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
19190 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
191a0 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
191b0 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
191c0 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
191d0 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
191e0 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
191f0 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
19200 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
19210 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
19220 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
19230 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
19240 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
19250 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
19260 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
19270 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
19280 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
19290 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
192a0 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
192b0 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
192c0 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
192d0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
192e0 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
192f0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
19300 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
19310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19320 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19330 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
19340 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
19350 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19360 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
19370 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
19380 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
19390 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
193a0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
193b0 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
193c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
193d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
193e0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
193f0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
19400 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
19410 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19420 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
19430 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65  pOp->p2);.    te
19440 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
19450 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54  TE_BUSY_SNAPSHOT
19460 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
19470 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
19480 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20  Y_RECOVERY );.  
19490 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
194a0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
194b0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
194c0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
194d0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
194e0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
194f0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
19500 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
19510 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
19520 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19530 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
19540 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
19550 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
19560 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
19570 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
19580 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
19590 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  d>1) .    ){.   
195a0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
195b0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
195c0 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69  (pBt) );.      i
195d0 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
195e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
195f0 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
19600 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e  ement>=0 && db->
19610 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b  nSavepoint>=0 );
19620 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74  .        db->nSt
19630 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20  atement++; .    
19640 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e      p->iStatemen
19650 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
19660 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d  nt + db->nStatem
19670 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ent;.      }..  
19680 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19690 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
196a0 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
196b0 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  N, p->iStatement
196c0 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  -1);.      if( r
196d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
196e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
196f0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
19700 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
19710 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a  ement);.      }.
19720 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
19730 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
19740 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
19750 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
19760 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
19770 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
19780 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
19790 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
197a0 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
197b0 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
197c0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
197d0 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
197e0 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
197f0 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
19800 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
19810 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
19820 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  ;.      p->nStmt
19830 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  DefImmCons = db-
19840 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
19850 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  s;.    }..    /*
19860 20 47 61 74 68 65 72 20 74 68 65 20 73 63 68 65   Gather the sche
19870 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
19880 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a  r for checking:.
19890 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54      ** IMPLEMENT
198a0 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39  ATION-OF: R-3219
198b0 35 2d 31 39 34 36 35 20 54 68 65 20 73 63 68 65  5-19465 The sche
198c0 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73  ma version is us
198d0 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20 20 20  ed by SQLite.   
198e0 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20 61 20   ** each time a 
198f0 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
19900 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
19910 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61   the internal ca
19920 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  che of the.    *
19930 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20 77 68  * schema used wh
19940 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65  en compiling the
19950 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68   SQL query match
19960 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  es the schema of
19970 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61 74 61   the.    ** data
19980 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69  base against whi
19990 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  ch the compiled 
199a0 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c  query is actuall
199b0 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 20 20  y executed..    
199c0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  */.    sqlite3Bt
199d0 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
199e0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
199f0 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
19a00 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
19a10 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
19a20 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
19a30 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
19a40 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
19a50 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73  a = 0;.  }.  ass
19a60 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
19a70 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
19a80 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
19a90 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d  ( pOp->p5 && (iM
19aa0 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20  eta!=pOp->p3 || 
19ab0 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29  iGen!=pOp->p4.i)
19ac0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
19ad0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
19ae0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
19af0 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
19b00 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
19b10 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
19b20 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
19b30 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
19b40 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
19b50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
19b60 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
19b70 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
19b80 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
19b90 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
19ba0 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
19bb0 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
19bc0 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
19bd0 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
19be0 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
19bf0 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
19c00 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
19c10 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
19c20 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
19c30 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
19c40 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
19c50 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
19c60 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
19c70 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
19c80 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
19c90 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
19ca0 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
19cb0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
19cc0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
19cd0 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
19ce0 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
19cf0 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
19d00 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
19d10 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
19d20 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
19d30 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
19d40 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
19d50 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
19d60 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
19d70 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
19d80 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
19d90 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
19da0 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
19db0 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
19dc0 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
19dd0 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
19de0 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
19df0 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
19e00 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
19e10 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
19e20 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
19e30 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
19e40 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
19e50 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
19e60 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
19e70 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72    }.    p->expir
19e80 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  ed = 1;.    rc =
19e90 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
19ea0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
19eb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
19ec0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
19ed0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
19ee0 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
19ef0 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
19f00 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
19f10 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
19f20 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
19f30 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
19f40 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
19f50 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
19f60 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
19f70 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
19f80 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
19f90 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
19fa0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
19fb0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
19fc0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
19fd0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
19fe0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
19ff0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1a000 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
1a010 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
1a020 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1a030 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
1a040 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
1a050 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
1a060 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
1a070 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
1a080 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
1a090 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
1a0a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
1a0b0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
1a0c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
1a0d0 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
1a0e0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1a0f0 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65  iCookie;..  asse
1a100 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1a110 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d   );.  iDb = pOp-
1a120 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
1a130 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1a140 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
1a150 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1a160 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
1a170 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1a180 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1a190 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1a1a0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1a1b0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1a1c0 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1a1d0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1a1e0 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
1a1f0 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
1a200 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
1a210 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  a);.  pOut = out
1a220 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
1a230 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
1a240 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
1a250 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1a260 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
1a270 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
1a280 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
1a290 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
1a2a0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
1a2b0 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
1a2c0 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
1a2d0 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
1a2e0 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
1a2f0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
1a300 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
1a310 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
1a320 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
1a330 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1a340 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
1a350 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1a360 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
1a370 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1a380 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1a390 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
1a3a0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
1a3b0 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
1a3c0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
1a3d0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
1a3e0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
1a3f0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1a400 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1a410 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
1a420 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
1a430 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
1a440 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1a450 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1a460 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a470 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1a480 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1a490 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1a4a0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1a4b0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1a4c0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1a4d0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1a4e0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1a4f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1a500 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1a510 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1a520 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1a530 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1a540 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
1a550 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c  [pOp->p3];.  sql
1a560 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1a570 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f  erify(pIn3);.  /
1a580 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
1a590 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
1a5a0 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
1a5b0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
1a5c0 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
1a5d0 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
1a5e0 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e  >p2, (int)pIn3->
1a5f0 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
1a600 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
1a610 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
1a620 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
1a630 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
1a640 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
1a650 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
1a660 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
1a670 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
1a680 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70  _cookie = (int)p
1a690 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62  In3->u.i;.    db
1a6a0 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
1a6b0 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b  E_InternChanges;
1a6c0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1a6d0 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45  ->p2==BTREE_FILE
1a6e0 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f  _FORMAT ){.    /
1a6f0 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73  * Record changes
1a700 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72   in the file for
1a710 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  mat */.    pDb->
1a720 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1a730 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d  rmat = (u8)pIn3-
1a740 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20  >u.i;.  }.  if( 
1a750 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
1a760 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
1a770 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
1a780 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
1a790 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1a7a0 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
1a7b0 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
1a7c0 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
1a7d0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
1a7e0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
1a7f0 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  s(db);.    p->ex
1a800 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
1a810 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a820 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
1a830 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1a840 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1a850 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1a860 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
1a870 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
1a880 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
1a890 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
1a8a0 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
1a8b0 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
1a8c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
1a8d0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1a8e0 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
1a8f0 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
1a900 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
1a910 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
1a920 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
1a930 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
1a940 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
1a950 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
1a960 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
1a970 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
1a980 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
1a990 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
1a9a0 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
1a9b0 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
1a9c0 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
1a9d0 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
1a9e0 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
1a9f0 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
1aa00 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
1aa10 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
1aa20 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
1aa30 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
1aa40 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1aa50 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
1aa60 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
1aa70 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
1aa80 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
1aa90 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
1aaa0 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
1aab0 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
1aac0 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
1aad0 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
1aae0 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
1aaf0 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
1ab00 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
1ab10 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
1ab20 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
1ab30 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
1ab40 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1ab50 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
1ab60 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
1ab70 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
1ab80 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
1ab90 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
1aba0 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
1abb0 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
1abc0 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
1abd0 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
1abe0 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
1abf0 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
1ac00 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
1ac10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
1ac20 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
1ac30 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
1ac40 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
1ac50 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
1ac60 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
1ac70 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
1ac80 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1ac90 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1aca0 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1acb0 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1acc0 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1acd0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1ace0 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1acf0 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1ad00 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1ad10 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1ad20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1ad30 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1ad40 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1ad50 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1ad60 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1ad70 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1ad80 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1ad90 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1ada0 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1adb0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1adc0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1add0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
1ade0 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
1adf0 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
1ae00 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
1ae10 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1ae20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1ae30 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1ae40 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1ae50 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61  opcode works exa
1ae60 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70  ctly like ReadOp
1ae70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69  en except that i
1ae80 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b  t first.** check
1ae90 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
1aea0 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20  cursor on P1 is 
1aeb0 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74  already open wit
1aec0 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  h a root page.**
1aed0 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e   number of P2 an
1aee0 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
1aef0 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
1af00 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
1af10 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
1af20 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
1af30 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
1af40 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
1af50 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1af60 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
1af70 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
1af80 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20  ==0 and with P4 
1af90 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45  being.** a P4_KE
1afa0 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1afb0 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1afc0 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1afd0 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20   the same as.** 
1afe0 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1aff0 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1b000 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1b010 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ursor number..**
1b020 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e  .** See the Open
1b030 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75  Read opcode docu
1b040 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
1b050 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1b060 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
1b070 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
1b080 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1b090 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1b0a0 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1b0b0 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1b0c0 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1b0d0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1b0e0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1b0f0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
1b100 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
1b110 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1b120 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
1b130 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
1b140 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
1b150 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1b160 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1b170 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1b180 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1b190 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1b1a0 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1b1b0 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1b1c0 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1b1d0 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1b1e0 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1b1f0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1b200 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1b210 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1b220 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1b230 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1b240 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1b250 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1b260 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1b270 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1b280 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1b290 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1b2a0 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1b2b0 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1b2c0 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1b2d0 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1b2e0 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1b2f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1b300 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1b310 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1b320 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1b330 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1b340 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1b350 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1b360 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1b370 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1b380 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1b390 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1b3a0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1b3b0 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1b3c0 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1b3d0 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1b3e0 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20  _ReopenIdx: {.  
1b3f0 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
1b400 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1b410 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
1b420 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
1b430 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
1b440 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b450 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
1b460 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b470 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1b480 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1b490 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1b4a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1b4b0 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d  INFO );.  pCur =
1b4c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1b4d0 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26  1];.  if( pCur &
1b4e0 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74  & pCur->pgnoRoot
1b4f0 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29  ==(u32)pOp->p2 )
1b500 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1b510 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33  ur->iDb==pOp->p3
1b520 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72   );      /* Guar
1b530 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f  anteed by the co
1b540 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1b550 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75      goto open_cu
1b560 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a  rsor_set_hints;.
1b570 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20    }.  /* If the 
1b580 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75  cursor is not cu
1b590 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20  rrently open or 
1b5a0 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66  is open on a dif
1b5b0 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65  ferent.  ** inde
1b5c0 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  x, then fall thr
1b5d0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65  ough into OP_Ope
1b5e0 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61  nRead to force a
1b5f0 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20   reopen */.case 
1b600 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
1b610 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a  e OP_OpenWrite:.
1b620 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
1b630 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53  >p5&(OPFLAG_P2IS
1b640 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  REG|OPFLAG_BULKC
1b650 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
1b660 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20  ))==pOp->p5 );. 
1b670 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1b680 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1b690 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30  te || pOp->p5==0
1b6a0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1b6b0 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1b6c0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1b6d0 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
1b6e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1b6f0 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f  P_OpenRead || pO
1b700 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65  p->opcode==OP_Re
1b710 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20  openIdx.        
1b720 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79    || p->readOnly
1b730 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d  ==0 );..  if( p-
1b740 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20  >expired ){.    
1b750 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52  rc = SQLITE_ABOR
1b760 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20  T_ROLLBACK;.    
1b770 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46  break;.  }..  nF
1b780 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79  ield = 0;.  pKey
1b790 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d  Info = 0;.  p2 =
1b7a0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
1b7b0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
1b7c0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1b7d0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1b7e0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1b7f0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1b800 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d   iDb) );.  pDb =
1b810 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
1b820 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
1b830 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
1b840 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
1b850 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1b860 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61  ite ){.    wrFla
1b870 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  g = 1;.    asser
1b880 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1b890 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
1b8a0 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
1b8b0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1b8c0 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
1b8d0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1b8e0 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
1b8f0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1b900 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
1b910 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
1b920 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1b930 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
1b940 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
1b950 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  & OPFLAG_P2ISREG
1b960 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1b970 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
1b980 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  rt( p2<=(p->nMem
1b990 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
1b9a0 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1b9b0 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
1b9c0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
1b9d0 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
1b9e0 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
1b9f0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
1ba00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1ba10 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1ba20 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
1ba30 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
1ba40 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
1ba50 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
1ba60 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
1ba70 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1ba80 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
1ba90 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1baa0 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
1bab0 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
1bac0 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
1bad0 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
1bae0 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
1baf0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
1bb00 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
1bb10 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
1bb20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
1bb30 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1bb40 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
1bb50 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
1bb60 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
1bb70 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
1bb80 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1bb90 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1bba0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
1bbb0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1bbc0 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
1bbd0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1bbe0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65  eyInfo;.    asse
1bbf0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1bc00 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1bc10 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1bc20 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1bc30 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
1bc40 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79  nfo->nField+pKey
1bc50 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20  Info->nXField;. 
1bc60 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1bc70 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1bc80 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1bc90 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1bca0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bcb0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1bcc0 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1bcd0 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1bce0 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1bcf0 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1bd00 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1bd10 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1bd20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1bd30 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1bd40 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1bd50 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  1);.  if( pCur==
1bd60 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1bd70 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
1bd80 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73   = 1;.  pCur->is
1bd90 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70  Ordered = 1;.  p
1bda0 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20  Cur->pgnoRoot = 
1bdb0 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  p2;.  rc = sqlit
1bdc0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1bdd0 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1bde0 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43  eyInfo, pCur->pC
1bdf0 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
1be00 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1be10 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68  nfo;.  /* Set th
1be20 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1be30 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50  able variable. P
1be40 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1be50 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1be60 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1be70 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1be80 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1be90 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1bea0 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1beb0 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1bec0 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1bed0 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1bee0 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1bef0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1bf00 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1bf10 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1bf20 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1bf30 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f  !=P4_KEYINFO;..o
1bf40 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68  pen_cursor_set_h
1bf50 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20  ints:.  assert( 
1bf60 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d  OPFLAG_BULKCSR==
1bf70 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29  BTREE_BULKLOAD )
1bf80 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1bf90 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45  AG_SEEKEQ==BTREE
1bfa0 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 73 71  _SEEK_EQ );.  sq
1bfb0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1bfc0 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72  Hints(pCur->pCur
1bfd0 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  sor,.           
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1bff0 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
1c000 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47  G_BULKCSR|OPFLAG
1c010 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 62 72  _SEEKEQ)));.  br
1c020 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c030 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1c040 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1c050 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1c060 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1c070 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1c080 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1c090 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1c0a0 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1c0b0 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1c0c0 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1c0d0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1c0e0 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1c0f0 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1c100 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1c110 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1c120 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1c130 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1c140 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1c150 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1c160 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1c170 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1c180 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1c190 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1c1a0 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1c1b0 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1c1c0 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1c1d0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1c1e0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1c1f0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1c200 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1c210 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1c220 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1c230 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1c240 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1c250 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1c260 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1c270 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1c280 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1c290 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1c2a0 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1c2b0 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1c2c0 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1c2d0 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1c2e0 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1c2f0 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1c300 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1c310 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1c320 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1c330 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1c340 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1c350 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1c360 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1c370 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1c380 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1c390 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1c3a0 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1c3b0 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1c3c0 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1c3d0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1c3e0 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1c3f0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1c400 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1c410 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1c420 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1c430 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1c440 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1c450 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1c460 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1c470 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1c480 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1c490 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1c4a0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1c4b0 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1c4c0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c4d0 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1c4e0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1c4f0 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1c500 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1c510 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1c520 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1c530 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1c540 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1c550 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c560 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1c570 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1c580 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1c590 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20  ->p2, -1, 1);.  
1c5a0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1c5b0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1c5c0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1c5d0 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c  pCx->isEphemeral
1c5e0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
1c5f0 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62  ite3BtreeOpen(db
1c600 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26  ->pVfs, 0, db, &
1c610 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20  pCx->pBt, .     
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c630 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
1c640 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
1c650 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
1c660 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
1c670 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1c680 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1c690 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
1c6a0 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
1c6b0 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1c6c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
1c6d0 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1c6e0 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1c6f0 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1c700 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
1c710 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1c720 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
1c730 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
1c740 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
1c750 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1c760 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1c770 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1c780 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1c790 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
1c7a0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
1c7b0 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
1c7c0 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
1c7d0 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
1c7e0 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79 49  /.    if( (pKeyI
1c7f0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1c800 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20  eyInfo)!=0 ){.  
1c810 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
1c820 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1c830 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1c840 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
1c850 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1c860 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1c870 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
1c880 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e  _BLOBKEY | pOp->
1c890 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  p5); .      if( 
1c8a0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1c8b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1c8c0 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
1c8d0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1c8e0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1c8f0 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1c900 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1c910 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1c920 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  b) );.        pC
1c930 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  x->pKeyInfo = pK
1c940 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20  eyInfo;.        
1c950 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1c960 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1c970 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49  , pgno, 1, pKeyI
1c980 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  nfo, pCx->pCurso
1c990 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1c9a0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1c9b0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1c9c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1c9d0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1c9e0 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f  ->pBt, MASTER_RO
1c9f0 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70  OT, 1, 0, pCx->p
1ca00 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
1ca10 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1ca20 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78  .    }.  }.  pCx
1ca30 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
1ca40 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
1ca50 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61  ORDERED);.  brea
1ca60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1ca70 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50   SorterOpen P1 P
1ca80 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1ca90 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1caa0 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70  s like OP_OpenEp
1cab0 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74  hemeral except t
1cac0 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20  hat it opens.** 
1cad0 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1cae0 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66  x that is specif
1caf0 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20  ically designed 
1cb00 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a  to sort large.**
1cb10 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e   tables using an
1cb20 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d   external merge-
1cb30 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  sort algorithm..
1cb40 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e  **.** If argumen
1cb50 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  t P3 is non-zero
1cb60 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61  , then it indica
1cb70 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72  tes that the sor
1cb80 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d  ter may.** assum
1cb90 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20  e that a stable 
1cba0 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67  sort considering
1cbb0 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69   the first P3 fi
1cbc0 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20  elds of each.** 
1cbd0 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e  key is sufficien
1cbe0 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65  t to produce the
1cbf0 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74   required result
1cc00 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
1cc10 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1cc20 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1cc30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cc40 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1cc50 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1cc60 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1cc70 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1cc80 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1cc90 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
1cca0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1ccb0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1ccc0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1ccd0 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  fo;.  assert( pC
1cce0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  x->pKeyInfo->db=
1ccf0 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  =db );.  assert(
1cd00 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1cd10 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1cd20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1cd30 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c  beSorterInit(db,
1cd40 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a   pOp->p3, pCx);.
1cd50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1cd60 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54  pcode: SequenceT
1cd70 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  est P1 P2 * * *.
1cd80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28  ** Synopsis: if(
1cd90 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b   cursor[P1].ctr+
1cda0 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a  + ) pc = P2.**.*
1cdb0 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
1cdc0 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20   cursor. If the 
1cdd0 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72  sequence counter
1cde0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
1cdf0 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  ro, jump.** to P
1ce00 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  2. Regardless of
1ce10 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1ce20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
1ce30 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65  n, increment the
1ce40 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65  .** the sequence
1ce50 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
1ce60 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a  OP_SequenceTest:
1ce70 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1ce80 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
1ce90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1cea0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1ceb0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1cec0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1ced0 73 73 65 72 74 28 20 70 43 2d 3e 70 53 6f 72 74  ssert( pC->pSort
1cee0 65 72 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d  er );.  if( (pC-
1cef0 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20  >seqCount++)==0 
1cf00 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
1cf10 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
1cf20 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1cf30 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
1cf40 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1cf50 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d  nopsis: P3 colum
1cf60 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a  ns in r[P2].**.*
1cf70 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1cf80 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
1cf90 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
1cfa0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
1cfb0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
1cfc0 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
1cfd0 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
1cfe0 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65  row is the conte
1cff0 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
1d000 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e  register P2.  In
1d010 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
1d020 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
1d030 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1d040 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
1d050 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
1d060 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
1d070 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
1d080 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
1d090 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
1d0a0 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
1d0b0 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
1d0c0 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
1d0d0 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
1d0e0 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
1d0f0 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
1d100 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
1d110 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
1d120 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
1d130 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1d140 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
1d150 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
1d160 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
1d170 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1d180 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
1d190 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1d1a0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1d1b0 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1d1c0 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1d1d0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1d1e0 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1d1f0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1d200 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1d210 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1d220 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d230 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  3>=0 );.  pCx = 
1d240 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1d250 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1d260 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
1d270 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1d280 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1d290 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1d2a0 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
1d2b0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
1d2c0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1d2d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d2e0 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b  p5==0 );.  break
1d2f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d300 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Close P1 * * * *
1d310 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63  .**.** Close a c
1d320 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79  ursor previously
1d330 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20   opened as P1.  
1d340 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  If P1 is not.** 
1d350 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
1d360 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1d370 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
1d380 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b  case OP_Close: {
1d390 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d3a0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1d3b0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1d3c0 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1d3d0 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1d3e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  sr[pOp->p1]);.  
1d3f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d400 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  ] = 0;.  break;.
1d410 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
1d420 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55  _ENABLE_COLUMN_U
1d430 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f  SED_MASK./* Opco
1d440 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20  de: ColumnsUsed 
1d450 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
1d460 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77  * This opcode (w
1d470 68 69 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73  hich only exists
1d480 20 69 66 20 53 51 4c 69 74 65 20 77 61 73 20 63   if SQLite was c
1d490 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20  ompiled with.** 
1d4a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
1d4b0 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20  LUMN_USED_MASK) 
1d4c0 69 64 65 6e 74 69 66 69 65 73 20 77 68 69 63 68  identifies which
1d4d0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a   columns of the.
1d4e0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
1d4f0 78 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20  x for cursor P1 
1d500 61 72 65 20 75 73 65 64 2e 20 20 50 34 20 69 73  are used.  P4 is
1d510 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
1d520 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20  r.** (P4_INT64) 
1d530 69 6e 20 77 68 69 63 68 20 74 68 65 20 66 69 72  in which the fir
1d540 73 74 20 36 33 20 62 69 74 73 20 61 72 65 20 6f  st 63 bits are o
1d550 6e 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  ne for each of t
1d560 68 65 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63  he.** first 63 c
1d570 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
1d580 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61  ble or index tha
1d590 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75  t are actually u
1d5a0 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75  sed.** by the cu
1d5b0 72 73 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d  rsor.  The high-
1d5c0 6f 72 64 65 72 20 62 69 74 20 69 73 20 73 65 74  order bit is set
1d5d0 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61   if any column a
1d5e0 66 74 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68  fter.** the 64th
1d5f0 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73   is used..*/.cas
1d600 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64  e OP_ColumnsUsed
1d610 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1d620 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e   *pC;.  pC = p->
1d630 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1d640 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1d650 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 2d 3e 6d  ursor );.  pC->m
1d660 61 73 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a  askUsed = *(u64*
1d670 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  )pOp->p4.pI64;. 
1d680 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
1d690 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
1d6a0 6b 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  kGE P1 P2 P3 P4 
1d6b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1d6c0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1d6d0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1d6e0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1d6f0 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1d700 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1d710 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1d720 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1d730 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b  ster P3 as the k
1d740 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50  ey.  If cursor P
1d750 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1d760 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1d770 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1d780 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1d790 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1d7a0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1d7b0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1d7c0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1d7d0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1d7e0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1d7f0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1d800 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1d810 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1d820 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1d830 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1d840 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1d850 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1d860 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1d870 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1d880 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1d890 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1d8a0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1d8b0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1d8c0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1d8d0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1d8e0 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
1d8f0 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
1d900 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
1d910 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
1d920 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1d930 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1d940 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
1d950 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
1d960 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1d970 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
1d980 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
1d990 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1d9a0 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50  eekGT P1 P2 P3 P
1d9b0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1d9c0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1d9d0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1d9e0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1d9f0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1da00 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1da10 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1da20 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1da30 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1da40 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1da50 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1da60 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1da70 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1da80 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1da90 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1daa0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1dab0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1dac0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1dad0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1dae0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1daf0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1db00 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1db10 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1db20 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
1db30 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1db40 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
1db50 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
1db60 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1db70 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1db80 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1db90 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1dba0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1dbb0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1dbc0 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1dbd0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1dbe0 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1dbf0 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1dc00 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1dc10 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1dc20 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1dc30 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1dc40 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1dc50 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1dc60 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
1dc70 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1dc80 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20  code: SeekLT P1 
1dc90 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53  P2 P3 P4 * .** S
1dca0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1dcb0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1dcc0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1dcd0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1dce0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1dcf0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1dd00 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1dd10 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1dd20 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1dd30 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1dd40 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1dd50 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1dd60 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1dd70 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1dd80 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1dd90 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1dda0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1ddb0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1ddc0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1ddd0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1dde0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1ddf0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1de00 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
1de10 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1de20 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1de30 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
1de40 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1de50 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1de60 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1de70 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1de80 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1de90 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1dea0 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
1deb0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1dec0 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
1ded0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
1dee0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1def0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1df00 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1df10 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
1df20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1df30 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1df40 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1df50 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1df60 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31  pcode: SeekLE P1
1df70 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1df80 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1df90 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1dfa0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1dfb0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1dfc0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1dfd0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1dfe0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1dff0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1e000 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1e010 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1e020 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1e030 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1e040 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1e050 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1e060 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1e070 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1e080 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1e090 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1e0a0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1e0b0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1e0c0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1e0d0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1e0e0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1e0f0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1e100 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1e110 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1e120 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
1e130 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1e140 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1e150 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1e160 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1e170 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1e180 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1e190 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
1e1a0 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
1e1b0 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
1e1c0 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
1e1d0 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
1e1e0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1e1f0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1e200 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
1e210 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Next..**.** Se
1e220 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1e230 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
1e240 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a   SeekGe, SeekLt.
1e250 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1e260 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  T:         /* ju
1e270 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1e280 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20  OP_SeekLE:      
1e290 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1e2a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1e2b0 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
1e2c0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1e2d0 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20  OP_SeekGT: {    
1e2e0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1e2f0 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  */.  int res;.  
1e300 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75  int oc;.  VdbeCu
1e310 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61  rsor *pC;.  Unpa
1e320 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1e330 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36  int nField;.  i6
1e340 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20  4 iKey;      /* 
1e350 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65  The rowid we are
1e360 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a   to seek to */..
1e370 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e380 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1e390 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e3a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21  assert( pOp->p2!
1e3b0 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  =0 );.  pC = p->
1e3c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1e3d0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1e3e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1e3f0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
1e400 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e410 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f  OP_SeekLE == OP_
1e420 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73  SeekLT+1 );.  as
1e430 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20  sert( OP_SeekGE 
1e440 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29  == OP_SeekLT+2 )
1e450 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1e460 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGT == OP_Seek
1e470 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+3 );.  assert
1e480 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20  ( pC->isOrdered 
1e490 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1e4a0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1e4b0 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
1e4c0 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  e;.  pC->nullRow
1e4d0 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 0;.#ifdef SQL
1e4e0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
1e4f0 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
1e500 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  code;.#endif..  
1e510 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20  /* For a cursor 
1e520 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53  with the BTREE_S
1e530 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c  EEK_EQ hint, onl
1e540 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20  y the OP_SeekGE 
1e550 61 6e 64 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b  and.  ** OP_Seek
1e560 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61  LE opcodes are a
1e570 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73  llowed, and thes
1e580 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69  e must be immedi
1e590 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20  ately followed. 
1e5a0 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78   ** by an OP_Idx
1e5b0 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f  GT or OP_IdxLT o
1e5c0 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76  pcode, respectiv
1e5d0 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73 61  ely, with the sa
1e5e0 6d 65 20 6b 65 79 2e 0a 20 20 2a 2f 0a 23 69 66  me key..  */.#if
1e5f0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1e600 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74  .  if( sqlite3Bt
1e610 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74  reeCursorHasHint
1e620 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 42 54  (pC->pCursor, BT
1e630 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a  REE_SEEK_EQ) ){.
1e640 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1e650 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
1e660 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
1e670 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  e==OP_SeekLE );.
1e680 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1e690 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
1e6a0 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
1e6b0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
1e6c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1e6d0 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p1==pOp[0].
1e6e0 70 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  p1 );.    assert
1e6f0 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70  ( pOp[1].p2==pOp
1e700 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 61 73  [0].p2 );.    as
1e710 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d  sert( pOp[1].p3=
1e720 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20  =pOp[0].p3 );.  
1e730 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
1e740 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34  .p4.i==pOp[0].p4
1e750 2e 69 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  .i );.  }.#endif
1e760 0a 20 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  . .  if( pC->isT
1e770 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
1e780 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69  he input value i
1e790 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66  n P3 might be of
1e7a0 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67   any type: integ
1e7b0 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  er, real, string
1e7c0 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f  ,.    ** blob, o
1e7d0 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1e7e0 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1e7f0 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1e800 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74   can do.    ** t
1e810 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76  he seek, so conv
1e820 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70  ert it. */.    p
1e830 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1e840 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70  >p3];.    if( (p
1e850 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In3->flags & (ME
1e860 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
1e870 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
1e880 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79  r ){.      apply
1e890 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
1e8a0 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  pIn3, 0);.    }.
1e8b0 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74      iKey = sqlit
1e8c0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1e8d0 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  In3);..    /* If
1e8e0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f   the P3 value co
1e8f0 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65  uld not be conve
1e900 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
1e910 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20  eger without.   
1e920 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
1e930 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
1e940 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
1e950 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
1e960 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  */.    if( (pIn3
1e970 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1e980 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  t)==0 ){.      i
1e990 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1e9a0 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
1e9b0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
1e9c0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e  the P3 value can
1e9d0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1e9e0 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f   into any kind o
1e9f0 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20  f a number,.    
1ea00 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
1ea10 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73  seek is not poss
1ea20 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f  ible, so jump to
1ea30 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56   P2 */.        V
1ea40 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
1ea50 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ,2); goto jump_t
1ea60 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72  o_p2;.        br
1ea70 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  eak;.      }..  
1ea80 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
1ea90 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
1eaa0 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20   is larger than 
1eab0 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
1eac0 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
1ead0 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
1eae0 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20   >= for > and < 
1eaf0 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20  for <=. e.g. if 
1eb00 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a  the search term.
1eb10 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20        ** is 4.9 
1eb20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20  and the integer 
1eb30 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a  approximation 5:
1eb40 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
1eb50 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20  **        (x >  
1eb60 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1eb70 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a  x >= 5).      **
1eb80 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e          (x <= 4.
1eb90 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
1eba0 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20  <  5).      */. 
1ebb0 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
1ebc0 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  .r<(double)iKey 
1ebd0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1ebe0 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f  t( OP_SeekGE==(O
1ebf0 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20  P_SeekGT-1) );. 
1ec00 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1ec10 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65  P_SeekLT==(OP_Se
1ec20 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekLE-1) );.     
1ec30 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
1ec40 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d  eekLE & 0x0001)=
1ec50 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78  =(OP_SeekGT & 0x
1ec60 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
1ec70 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
1ec80 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
1ec90 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b   0x0001) ) oc--;
1eca0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1ecb0 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
1ecc0 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
1ecd0 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65  smaller than the
1ece0 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
1ecf0 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
1ed00 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d  m, substitute <=
1ed10 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72   for < and > for
1ed20 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65   >=.  */.      e
1ed30 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e  lse if( pIn3->u.
1ed40 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r>(double)iKey )
1ed50 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1ed60 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50  ( OP_SeekLE==(OP
1ed70 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20  _SeekLT+1) );.  
1ed80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1ed90 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65  _SeekGT==(OP_See
1eda0 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kGE+1) );.      
1edb0 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
1edc0 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLT & 0x0001)==
1edd0 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30  (OP_SeekGE & 0x0
1ede0 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
1edf0 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
1ee00 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20  )==(OP_SeekLT & 
1ee10 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a  0x0001) ) oc++;.
1ee20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20        }.    } . 
1ee30 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1ee40 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1ee50 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1ee60 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c  0, (u64)iKey, 0,
1ee70 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
1ee80 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69  movetoTarget = i
1ee90 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79  Key;  /* Used by
1eea0 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20   OP_Delete */.  
1eeb0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1eec0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1eed0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1eee0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rror;.    }.  }e
1eef0 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  lse{.    nField 
1ef00 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1ef10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1ef20 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1ef30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
1ef40 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
1ef50 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1ef60 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1ef70 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
1ef80 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
1ef90 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
1efa0 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
1efb0 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
1efc0 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
1efd0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
1efe0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1eff0 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
1f000 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
1f010 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
1f020 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
1f030 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
1f040 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
1f050 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
1f060 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
1f070 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
1f080 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
1f090 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1f0a0 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
1f0b0 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1f0c0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1f0d0 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
1f0e0 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1f0f0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1f100 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
1f110 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
1f120 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1f130 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
1f140 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
1f150 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1f160 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1f170 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1f180 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1f190 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1f1a0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1f1b0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1f1c0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1f1d0 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
1f1e0 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20  r.aMem);.    rc 
1f1f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1f200 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1f210 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  >pCursor, &r, 0,
1f220 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1f230 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1f240 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1f250 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f260 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  r;.    }.  }.  p
1f270 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1f280 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1f290 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1f2a0 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53  _STALE;.#ifdef S
1f2b0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
1f2c0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1f2d0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  t++;.#endif.  if
1f2e0 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc>=OP_SeekGE 
1f2f0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1f300 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d  OP_SeekGE || oc=
1f310 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20  =OP_SeekGT );.  
1f320 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28    if( res<0 || (
1f330 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
1f340 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20  _SeekGT) ){.    
1f350 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
1f360 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f370 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73  eeNext(pC->pCurs
1f380 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1f390 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1f3a0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1f3b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1f3c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1f3d0 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  es = 0;.    }.  
1f3e0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
1f3f0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc==OP_SeekLT
1f400 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1f410 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  E );.    if( res
1f420 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
1f430 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20   oc==OP_SeekLT) 
1f440 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
1f450 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1f460 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
1f470 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  s(pC->pCursor, &
1f480 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1f490 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1f4a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1f4b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
1f4c0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73  se{.      /* res
1f4d0 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
1f4e0 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
1f4f0 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
1f500 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a  Check to.      *
1f510 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
1f520 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
1f530 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20   */.      res = 
1f540 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1f550 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1f560 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1f570 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
1f580 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1f590 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
1f5a0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74  ( res ){.    got
1f5b0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
1f5c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1f5d0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1f5e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
1f5f0 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72  opsis:  intkey=r
1f600 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P2].**.** P1 is
1f610 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63   an open table c
1f620 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
1f630 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e  a rowid integer.
1f640 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72    Arrange.** for
1f650 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74   P1 to move so t
1f660 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1f670 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e   the rowid given
1f680 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P2..**.** Th
1f690 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
1f6a0 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
1f6b0 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
1f6c0 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
1f6d0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
1f6e0 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
1f6f0 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
1f700 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
1f710 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
1f720 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
1f730 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ens..*/.case OP_
1f740 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  Seek: {    /* in
1f750 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
1f760 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1f770 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1f780 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1f790 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1f7a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f7b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1f7c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f7d0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1f7e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1f7f0 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  able );.  pC->nu
1f800 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e  llRow = 0;.  pIn
1f810 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
1f820 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  2];.  pC->moveto
1f830 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33  Target = sqlite3
1f840 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1f850 32 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  2);.  pC->deferr
1f860 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
1f870 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20  break;.}.  ../* 
1f880 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
1f890 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1f8a0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1f8b0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1f8c0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1f8d0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1f8e0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1f8f0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1f900 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1f910 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1f920 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1f930 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1f940 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1f950 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
1f960 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1f970 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1f980 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1f990 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1f9a0 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
1f9b0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
1f9c0 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
1f9d0 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
1f9e0 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
1f9f0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1fa00 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
1fa10 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
1fa20 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
1fa30 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
1fa40 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
1fa50 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  an be.** advance
1fa60 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64  d in the forward
1fa70 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65   direction.  The
1fa80 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
1fa90 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20  n will work,.** 
1faa0 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76  but not the Prev
1fab0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
1fac0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1fad0 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
1fae0 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53  ct, NotExists. S
1faf0 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekGe.*/./* Opco
1fb00 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
1fb10 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1fb20 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1fb30 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1fb40 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1fb50 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1fb60 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1fb70 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1fb80 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1fb90 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1fba0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1fbb0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1fbc0 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1fbd0 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
1fbe0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1fbf0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1fc00 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1fc10 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1fc20 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
1fc30 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
1fc40 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
1fc50 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
1fc60 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
1fc70 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
1fc80 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
1fc90 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
1fca0 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
1fcb0 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
1fcc0 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1fcd0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
1fce0 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
1fcf0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1fd00 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
1fd10 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
1fd20 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
1fd30 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
1fd40 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
1fd50 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
1fd60 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
1fd70 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
1fd80 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1fd90 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
1fda0 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
1fdb0 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
1fdc0 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
1fdd0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1fde0 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1fdf0 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a  NoConflict.*/./*
1fe00 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c   Opcode: NoConfl
1fe10 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ict P1 P2 P3 P4 
1fe20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1fe30 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1fe40 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1fe50 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1fe60 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1fe70 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1fe80 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1fe90 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1fea0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1feb0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1fec0 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1fed0 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1fee0 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
1fef0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1ff00 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1ff10 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1ff20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1ff30 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c  contains any NUL
1ff40 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d  L value, jump im
1ff50 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1ff60 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f    If all terms o
1ff70 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
1ff80 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65  are not-NULL the
1ff90 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  n a check is don
1ffa0 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  e to determine i
1ffb0 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65  f any row in the
1ffc0 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72  .** P1 index btr
1ffd0 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e  ee has a matchin
1ffe0 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49  g key prefix.  I
1fff0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
20000 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20  atches, jump.** 
20010 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
20020 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  2.  If there is 
20030 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68  a match, fall th
20040 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20  rough and leave 
20050 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72  the P1.** cursor
20060 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
20070 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a   matching row..*
20080 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
20090 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f   is similar to O
200a0 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20  P_NotFound with 
200b0 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74  the exceptions t
200c0 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63  hat the.** branc
200d0 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65  h is always take
200e0 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66  n if any part of
200f0 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20   the search key 
20100 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  input is NULL..*
20110 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
20120 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
20130 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
20140 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
20150 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
20160 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
20170 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
20180 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
20190 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
201a0 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
201b0 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
201c0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
201d0 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46  lso: NotFound, F
201e0 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a  ound, NotExists.
201f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e  */.case OP_NoCon
20200 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75  flict:     /* ju
20210 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
20220 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20  OP_NotFound:    
20230 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
20240 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64  */.case OP_Found
20250 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
20260 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
20270 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a   alreadyExists;.
20280 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a    int takeJump;.
20290 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65    int ii;.  Vdbe
202a0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
202b0 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70  t res;.  char *p
202c0 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64  Free;.  Unpacked
202d0 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
202e0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
202f0 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d  d r;.  char aTem
20300 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65  pRec[ROUND8(size
20310 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of(UnpackedRecor
20320 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  d)) + sizeof(Mem
20330 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65  )*4 + 7];..#ifde
20340 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
20350 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  if( pOp->opcode!
20360 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
20370 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
20380 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
20390 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
203a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
203b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
203c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
203d0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
203e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
203f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
20400 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
20410 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
20420 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
20430 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
20440 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61  ndif.  pIn3 = &a
20450 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
20460 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
20470 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
20480 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
20490 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20  =0 );.  pFree = 
204a0 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  0;.  if( pOp->p4
204b0 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b  .i>0 ){.    r.pK
204c0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
204d0 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
204e0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
204f0 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d  p4.i;.    r.aMem
20500 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72   = pIn3;.    for
20510 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
20520 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
20530 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
20540 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lid(&r.aMem[ii])
20550 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64   );.      Expand
20560 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d  Blob(&r.aMem[ii]
20570 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
20580 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28  _DEBUG.      if(
20590 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54   ii ) REGISTER_T
205a0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c  RACE(pOp->p3+ii,
205b0 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23   &r.aMem[ii]);.#
205c0 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20  endif.    }.    
205d0 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
205e0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b  }else{.    pIdxK
205f0 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
20600 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
20610 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d  ord(.        pC-
20620 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70  >pKeyInfo, aTemp
20630 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
20640 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20  pRec), &pFree.  
20650 20 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64    );.    if( pId
20660 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  xKey==0 ) goto n
20670 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72  o_mem;.    asser
20680 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
20690 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
206a0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
206b0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
206c0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
206d0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
206e0 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
206f0 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
20700 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
20710 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75  rc = 0;.  takeJu
20720 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  mp = 0;.  if( pO
20730 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
20740 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
20750 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
20760 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
20770 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
20780 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
20790 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
207a0 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
207b0 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
207c0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
207d0 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
207e0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
207f0 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c  i<pIdxKey->nFiel
20800 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
20810 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65  if( pIdxKey->aMe
20820 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
20830 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
20840 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a    takeJump = 1;.
20850 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
20860 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
20870 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
20880 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
20890 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
208a0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
208b0 72 65 73 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  res);.  sqlite3D
208c0 62 46 72 65 65 28 64 62 2c 20 70 46 72 65 65 29  bFree(db, pFree)
208d0 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
208e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65  TE_OK ){.    bre
208f0 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65  ak;.  }.  pC->se
20900 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
20910 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
20920 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43  = (res==0);.  pC
20930 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c  ->nullRow = 1-al
20940 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70  readyExists;.  p
20950 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20960 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
20970 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
20980 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
20990 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
209a0 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42  und ){.    VdbeB
209b0 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61  ranchTaken(alrea
209c0 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  dyExists!=0,2);.
209d0 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
209e0 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
209f0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
20a00 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
20a10 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c  Taken(takeJump||
20a20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30  alreadyExists==0
20a30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b  ,2);.    if( tak
20a40 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64  eJump || !alread
20a50 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a  yExists ) goto j
20a60 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
20a70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
20a80 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
20a90 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
20aa0 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
20ab0 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
20ac0 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
20ad0 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
20ae0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
20af0 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
20b00 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20  r.** keys).  P3 
20b10 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f  is an integer ro
20b20 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73  wid.  If P1 does
20b30 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72   not contain a r
20b40 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f  ecord with.** ro
20b50 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
20b60 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
20b70 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69  P2.  Or, if P2 i
20b80 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a  s 0, raise an.**
20b90 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
20ba0 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65  error. If P1 doe
20bb0 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
20bc0 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
20bd0 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20   then .** leave 
20be0 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  the cursor point
20bf0 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f  ing at that reco
20c00 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  rd and fall thro
20c10 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
20c20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
20c30 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
20c40 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
20c50 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
20c60 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
20c70 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
20c80 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
20c90 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
20ca0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
20cb0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
20cc0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
20cd0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
20ce0 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
20cf0 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
20d00 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
20d10 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
20d20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
20d30 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
20d40 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
20d50 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
20d60 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
20d70 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
20d80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45  .*/.case OP_NotE
20d90 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20  xists: {        
20da0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
20db0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
20dc0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
20dd0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
20de0 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
20df0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
20e00 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
20e10 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
20e20 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
20e30 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
20e40 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
20e50 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
20e60 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
20e70 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
20e80 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
20e90 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
20ea0 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ekOp = 0;.#endif
20eb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
20ec0 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
20ed0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
20ee0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70  bleReg==0 );.  p
20ef0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
20f00 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
20f10 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20  rsr!=0 );.  res 
20f20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49  = 0;.  iKey = pI
20f30 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20  n3->u.i;.  rc = 
20f40 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
20f50 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
20f60 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72  , 0, iKey, 0, &r
20f70 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  es);.  assert( r
20f80 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
20f90 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  res==0 );.  pC->
20fa0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69  movetoTarget = i
20fb0 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79  Key;  /* Used by
20fc0 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20   OP_Delete */.  
20fd0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
20fe0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
20ff0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
21000 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
21010 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64  Moveto = 0;.  Vd
21020 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
21030 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73  s!=0,2);.  pC->s
21040 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
21050 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b  .  if( res!=0 ){
21060 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
21070 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
21080 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
21090 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
210a0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
210b0 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  PT;.    }else{. 
210c0 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
210d0 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  o_p2;.    }.  }.
210e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
210f0 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
21100 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
21110 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
21120 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a  ursor[P1].ctr++.
21130 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
21140 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
21150 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
21160 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
21170 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
21180 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
21190 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
211a0 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
211b0 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
211c0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
211d0 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
211e0 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
211f0 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
21200 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
21210 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
21220 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21230 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21240 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
21250 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21260 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  1]!=0 );.  pOut 
21270 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
21280 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
21290 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
212a0 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
212b0 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
212c0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
212d0 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
212e0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
212f0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
21300 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e  .** Get a new in
21310 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
21320 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69  ber (a.k.a "rowi
21330 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20  d") used as the 
21340 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a  key to a table..
21350 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75  ** The record nu
21360 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76  mber is not prev
21370 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61  iously used as a
21380 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61   key in the data
21390 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68  base.** table th
213a0 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
213b0 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77  nts to.  The new
213c0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
213d0 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69  s written.** wri
213e0 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72  tten to register
213f0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
21400 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20  >0 then P3 is a 
21410 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
21420 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
21430 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c  is VDBE that hol
21440 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65  ds .** the large
21450 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65  st previously ge
21460 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
21470 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65  umber. No new re
21480 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65  cord numbers are
21490 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62  .** allowed to b
214a0 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  e less than this
214b0 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69   value. When thi
214c0 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
214d0 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a  its maximum, .**
214e0 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   an SQLITE_FULL 
214f0 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
21500 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
21510 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
21520 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
21530 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
21540 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
21550 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
21560 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
21570 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
21580 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
21590 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
215a0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
215b0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36   /* out2 */.  i6
215c0 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
215d0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
215e0 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43  rowid */.  VdbeC
215f0 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
21600 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74    /* Cursor of t
21610 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20  able to get the 
21620 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  new rowid */.  i
21630 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
21640 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
21650 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72  of an sqlite3Btr
21660 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e  eeLast() */.  in
21670 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20  t cnt;          
21680 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
21690 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
216a0 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20  ber of searches 
216b0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
216c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
216d0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
216e0 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f  largest rowid fo
216f0 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  r AUTOINCREMENT 
21700 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
21710 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52  pFrame;     /* R
21720 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42  oot frame of VDB
21730 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  E */..  v = 0;. 
21740 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74   res = 0;.  pOut
21750 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
21760 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
21770 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21780 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21790 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
217a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
217b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
217c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
217d0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
217e0 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65  ;.  {.    /* The
217f0 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
21800 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
21810 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
21820 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
21830 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
21840 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
21850 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
21860 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
21870 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
21880 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
21890 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
218a0 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
218b0 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
218c0 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
218d0 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
218e0 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
218f0 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
21900 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
21910 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
21920 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
21930 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
21940 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
21950 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
21960 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
21970 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
21980 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
21990 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
219a0 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
219b0 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
219c0 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
219d0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
219e0 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
219f0 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
21a00 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
21a10 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
21a20 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
21a30 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
21a40 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
21a50 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
21a60 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21a70 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
21a80 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
21a90 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
21aa0 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
21ab0 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
21ac0 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
21ad0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
21ae0 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
21af0 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
21b00 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
21b10 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
21b20 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
21b30 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
21b40 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
21b50 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
21b60 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
21b70 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
21b80 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
21b90 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
21ba0 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
21bb0 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
21bc0 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
21bd0 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
21be0 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
21bf0 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
21c00 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
21c10 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21c20 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
21c30 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
21c40 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
21c50 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
21c60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
21c70 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
21c80 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  }.      if( res 
21c90 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31  ){.        v = 1
21ca0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31  ;   /* IMP: R-61
21cb0 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20  914-48074 */.   
21cc0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
21cd0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
21ce0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
21cf0 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  lid(pC->pCursor)
21d00 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
21d10 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
21d20 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  Size(pC->pCursor
21d30 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61  , &v);.        a
21d40 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
21d50 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e  E_OK );   /* Can
21d60 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69  not fail followi
21d70 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a  ng BtreeLast() *
21d80 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e  /.        if( v>
21d90 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  =MAX_ROWID ){.  
21da0 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
21db0 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
21dc0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
21dd0 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20           v++;   
21de0 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d  /* IMP: R-29538-
21df0 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20  34987 */.       
21e00 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
21e10 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
21e20 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
21e30 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ENT.    if( pOp-
21e40 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  >p3 ){.      /* 
21e50 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
21e60 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
21e70 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
21e80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
21e90 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
21ea0 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
21eb0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
21ec0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
21ed0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
21ee0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
21ef0 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  t);.        /* A
21f00 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
21f10 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
21f20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
21f30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
21f40 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
21f50 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
21f60 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
21f70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d  Op->p3];.      }
21f80 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
21f90 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
21fa0 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
21fb0 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
21fc0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
21fd0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
21fe0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
21ff0 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
22000 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
22010 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
22020 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20  nge(p, pMem);.  
22030 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
22040 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
22050 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52  Mem) );..      R
22060 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
22070 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
22080 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
22090 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
220a0 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  m);.      assert
220b0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
220c0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
220d0 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
220e0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
220f0 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
22100 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
22110 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
22120 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
22130 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
22140 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32  ;   /* IMP: R-12
22150 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20  275-61338 */.   
22160 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
22170 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
22180 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
22190 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
221a0 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65  .        v = pMe
221b0 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
221c0 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e    }.      pMem->
221d0 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23  u.i = v;.    }.#
221e0 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43  endif.    if( pC
221f0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
22200 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
22210 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
22220 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
22230 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
22240 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
22250 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
22260 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
22270 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
22280 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
22290 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
222a0 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
222b0 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
222c0 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
222d0 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
222e0 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
222f0 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
22300 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
22310 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
22320 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22330 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
22340 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
22350 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
22360 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
22370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22380 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
22390 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
223a0 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20   */.      cnt = 
223b0 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  0;.      do{.   
223c0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
223d0 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
223e0 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
223f0 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
22400 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e  >1); v++;  /* En
22410 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67  sure that v is g
22420 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
22430 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65   */.      }while
22440 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65  (  ((rc = sqlite
22450 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
22460 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
22470 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20  , 0, (u64)v,.   
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
224b0 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f   &res))==SQLITE_
224c0 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  OK).            
224d0 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20  && (res==0).    
224e0 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e          && (++cn
224f0 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69  t<100));.      i
22500 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
22510 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
22520 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
22530 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
22540 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20  : R-38219-53002 
22550 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
22560 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22570 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
22580 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b    assert( v>0 );
22590 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32    /* EV: R-40812
225a0 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a  -03570 */.    }.
225b0 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
225c0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
225d0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
225e0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
225f0 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
22600 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
22610 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
22620 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
22630 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
22640 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d  tkey=r[P3] data=
22650 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74  r[P2].**.** Writ
22660 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
22670 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
22680 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
22690 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
226a0 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
226b0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
226c0 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
226d0 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
226e0 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
226f0 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
22700 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
22710 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
22720 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
22730 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
22740 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
22750 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
22760 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
22770 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
22780 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
22790 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
227a0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
227b0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
227c0 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
227d0 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
227e0 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
227f0 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
22800 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
22810 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
22820 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
22830 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
22840 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
22850 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
22860 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
22870 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
22880 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
22890 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
228a0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
228b0 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
228c0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
228d0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
228e0 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
228f0 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
22900 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
22910 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
22920 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
22930 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
22940 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
22950 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
22960 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
22970 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
22980 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
22990 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
229a0 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
229b0 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
229c0 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
229d0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
229e0 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
229f0 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
22a00 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
22a10 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
22a20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
22a30 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
22a40 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
22a50 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
22a60 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
22a70 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
22a80 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
22a90 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
22aa0 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
22ab0 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
22ac0 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
22ad0 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
22ae0 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
22af0 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
22b00 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
22b10 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
22b20 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
22b30 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
22b40 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
22b50 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
22b60 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
22b70 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
22b80 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
22b90 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
22ba0 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
22bb0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
22bc0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
22bd0 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
22be0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
22bf0 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
22c00 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
22c10 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
22c20 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
22c30 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
22c40 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
22c50 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
22c60 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
22c70 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
22c80 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
22c90 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
22ca0 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
22cb0 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
22cc0 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
22cd0 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
22ce0 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
22cf0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
22d00 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
22d10 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
22d20 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
22d30 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
22d40 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
22d50 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
22d60 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
22d70 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
22d80 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
22d90 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
22da0 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
22db0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
22dc0 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
22dd0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
22de0 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61    intkey=P3 data
22df0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P2].**.** Thi
22e00 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  s works exactly 
22e10 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65  like OP_Insert e
22e20 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b  xcept that the k
22e30 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74  ey is the.** int
22e40 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e  eger value P3, n
22e50 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
22e60 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72  the integer stor
22e70 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
22e80 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  3..*/.case OP_In
22e90 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49  sert: .case OP_I
22ea0 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65  nsertInt: {.  Me
22eb0 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
22ec0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
22ed0 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
22ee0 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
22ef0 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
22f00 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
22f10 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
22f20 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
22f30 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69  ecord */.  i64 i
22f40 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
22f50 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
22f60 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
22f70 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
22f80 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65  serted */.  Vdbe
22f90 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a  Cursor *pC;   /*
22fa0 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65   Cursor to table
22fb0 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65   into which inse
22fc0 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f  rt is written */
22fd0 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20  .  int nZero;   
22fe0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
22ff0 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20  f zero-bytes to 
23000 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  append */.  int 
23010 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
23020 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
23030 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
23040 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
23050 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
23060 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
23070 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
23080 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
23090 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74   hook */.  const
230a0 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20   char *zTbl; /* 
230b0 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65  Table name - use
230c0 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65 20  d by the opdate 
230d0 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  hook */.  int op
230e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
230f0 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65  pcode for update
23100 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50   hook: SQLITE_UP
23110 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49  DATE or SQLITE_I
23120 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74  NSERT */..  pDat
23130 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
23140 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
23150 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23160 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23170 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
23180 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
23190 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
231a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
231b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
231c0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
231d0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
231e0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
231f0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
23200 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
23210 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  le );.  REGISTER
23220 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
23230 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70  pData);..  if( p
23240 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
23250 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
23260 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
23270 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
23280 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
23290 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73  M_Int );.    ass
232a0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
232b0 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47  pKey) );.    REG
232c0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
232d0 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
232e0 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  iKey = pKey->u.i
232f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
23300 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
23310 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
23320 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   );.    iKey = p
23330 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
23340 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
23350 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
23360 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
23370 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
23380 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
23390 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
233a0 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
233b0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
233c0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
233d0 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d  {.    pData->z =
233e0 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e   0;.    pData->n
233f0 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
23400 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
23410 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
23420 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
23430 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74    }.  seekResult
23440 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
23450 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
23460 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
23470 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
23480 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
23490 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
234a0 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e   nZero = pData->
234b0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
234c0 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b  {.    nZero = 0;
234d0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
234e0 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
234f0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69  C->pCursor, 0, i
23500 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Key,.           
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
23520 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
23530 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f      (pOp->p5 & O
23560 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30  PFLAG_APPEND)!=0
23570 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29  , seekResult.  )
23580 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
23590 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
235a0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
235b0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
235c0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
235d0 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
235e0 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
235f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
23600 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
23610 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
23620 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64  z ){.    zDb = d
23630 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
23640 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20  zName;.    zTbl 
23650 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
23660 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20   op = ((pOp->p5 
23670 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
23680 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
23690 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45  TE : SQLITE_INSE
236a0 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  RT);.    assert(
236b0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
236c0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
236d0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
236e0 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
236f0 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20   zTbl, iKey);.  
23700 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
23710 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72  b>=0 );.  }.  br
23720 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23730 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20  e: Delete P1 P2 
23740 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65  * P4 P5.**.** De
23750 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  lete the record 
23760 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20  at which the P1 
23770 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e  cursor is curren
23780 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
23790 0a 2a 2a 20 49 66 20 74 68 65 20 50 35 20 70 61  .** If the P5 pa
237a0 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 6e 2d 7a  rameter is non-z
237b0 65 72 6f 2c 20 74 68 65 20 63 75 72 73 6f 72 20  ero, the cursor 
237c0 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
237d0 6e 74 69 6e 67 20 61 74 20 0a 2a 2a 20 65 69 74  nting at .** eit
237e0 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
237f0 74 68 65 20 70 72 65 76 69 6f 75 73 20 72 65 63  the previous rec
23800 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
23810 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
23820 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  .** pointing at 
23830 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c  the next record,
23840 20 74 68 65 6e 20 74 68 65 20 6e 65 78 74 20 4e   then the next N
23850 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
23860 77 69 6c 6c 20 62 65 20 61 20 0a 2a 2a 20 6e 6f  will be a .** no
23870 2d 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74  -op. As a result
23880 2c 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 69  , in this case i
23890 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
238a0 65 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  e a record from 
238b0 77 69 74 68 69 6e 20 61 0a 2a 2a 20 4e 65 78 74  within a.** Next
238c0 20 6c 6f 6f 70 2e 20 49 66 20 50 35 20 69 73 20   loop. If P5 is 
238d0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63  zero, then the c
238e0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 69 6e  ursor is left in
238f0 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74   an undefined st
23900 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ate..**.** If th
23910 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
23920 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73   flag of P2 is s
23930 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
23940 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
23950 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
23960 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
23970 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e  .**.** P1 must n
23980 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62  ot be pseudo-tab
23990 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62  le.  It has to b
239a0 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77  e a real table w
239b0 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  ith.** multiple 
239c0 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  rows..**.** If P
239d0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  4 is not NULL, t
239e0 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61  hen it is the na
239f0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
23a00 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f  that P1 is.** po
23a10 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20  inting to.  The 
23a20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c  update hook will
23a30 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20   be invoked, if 
23a40 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66  it exists..** If
23a50 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20   P4 is not NULL 
23a60 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73  then the P1 curs
23a70 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65  or must have bee
23a80 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20  n positioned.** 
23a90 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e  using OP_NotFoun
23aa0 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b  d prior to invok
23ab0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
23ac0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65  .*/.case OP_Dele
23ad0 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
23ae0 6f 72 20 2a 70 43 3b 0a 20 20 75 38 20 68 61 73  or *pC;.  u8 has
23af0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3b 0a  UpdateCallback;.
23b00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23b10 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
23b20 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23b30 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23b40 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23b50 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
23b60 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
23b70 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79  r!=0 );  /* Only
23b80 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20   valid for real 
23b90 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64  tables, no pseud
23ba0 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73  otables */.  ass
23bb0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
23bc0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20  dMoveto==0 );.. 
23bd0 20 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62 61   hasUpdateCallba
23be0 63 6b 20 3d 20 64 62 2d 3e 78 55 70 64 61 74 65  ck = db->xUpdate
23bf0 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
23c00 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54  >p4.z && pC->isT
23c10 61 62 6c 65 3b 0a 20 20 69 66 28 20 70 4f 70 2d  able;.  if( pOp-
23c20 3e 70 35 20 26 26 20 68 61 73 55 70 64 61 74 65  >p5 && hasUpdate
23c30 43 61 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Callback ){.    
23c40 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
23c50 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
23c60 20 26 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67   &pC->movetoTarg
23c70 65 74 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  et);.  }..#ifdef
23c80 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
23c90 2f 2a 20 54 68 65 20 73 65 65 6b 20 6f 70 65 72  /* The seek oper
23ca0 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74  ation that posit
23cb0 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
23cc0 20 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44 65 6c   prior to OP_Del
23cd0 65 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20 68 61  ete will.  ** ha
23ce0 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  ve also set the 
23cf0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
23d00 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f   field to the ro
23d10 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 74  wid of the row t
23d20 68 61 74 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e  hat.  ** is bein
23d30 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 69  g deleted */.  i
23d40 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20  f( pOp->p4.z && 
23d50 70 43 2d 3e 69 73 54 61 62 6c 65 20 26 26 20 70  pC->isTable && p
23d60 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20  Op->p5==0 ){.   
23d70 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a 20   i64 iKey = 0;. 
23d80 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
23d90 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
23da0 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20 20  or, &iKey);.    
23db0 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65  assert( pC->move
23dc0 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29  toTarget==iKey )
23dd0 3b 20 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a  ; .  }.#endif. .
23de0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
23df0 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43  reeDelete(pC->pC
23e00 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
23e10 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
23e20 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
23e30 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
23e40 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
23e50 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
23e60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
23e70 4f 4b 20 26 26 20 68 61 73 55 70 64 61 74 65 43  OK && hasUpdateC
23e80 61 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 64  allback ){.    d
23e90 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
23ea0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
23eb0 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
23ec0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23ed0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44            db->aD
23ee0 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
23ef0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d  , pOp->p4.z, pC-
23f00 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a  >movetoTarget);.
23f10 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
23f20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
23f30 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
23f40 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
23f50 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
23f60 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
23f70 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
23f80 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
23f90 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
23fa0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
23fb0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
23fc0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
23fd0 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
23fe0 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
23ff0 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
24000 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
24010 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
24020 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
24030 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
24040 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
24050 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
24060 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
24070 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
24080 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
24090 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
240a0 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
240b0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
240c0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
240d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
240e0 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
240f0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
24100 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74  :  if key(P1)!=t
24110 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f  rim(r[P3],P4) go
24120 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69  to P2.**.** P1 i
24130 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
24140 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
24150 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70  ion compares a p
24160 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20  refix of the.** 
24170 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72  record blob in r
24180 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e  egister P3 again
24190 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
241a0 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  he entry that .*
241b0 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72  * the sorter cur
241c0 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  sor currently po
241d0 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74  ints to.  Only t
241e0 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c  he first P4 fiel
241f0 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61  ds.** of r[P3] a
24200 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65  nd the sorter re
24210 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65  cord are compare
24220 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  d..**.** If eith
24230 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72  er P3 or the sor
24240 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e  ter contains a N
24250 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68  ULL in one of th
24260 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  eir significant.
24270 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63  ** fields (not c
24280 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66  ounting the P4 f
24290 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
242a0 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72   which are ignor
242b0 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ed) then.** the 
242c0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73  comparison is as
242d0 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61  sumed to be equa
242e0 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68  l..**.** Fall th
242f0 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e  rough to next in
24300 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65  struction if the
24310 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d   two records com
24320 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a  pare equal to.**
24330 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75   each other.  Ju
24340 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79  mp to P2 if they
24350 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a   are different..
24360 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24370 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
24380 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
24390 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e  int res;.  int n
243a0 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20  KeyCol;..  pC = 
243b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
243c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
243d0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61  orter(pC) );.  a
243e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
243f0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
24400 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
24410 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43  Op->p3];.  nKeyC
24420 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ol = pOp->p4.i;.
24430 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
24440 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24450 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70  terCompare(pC, p
24460 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72  In3, nKeyCol, &r
24470 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  es);.  VdbeBranc
24480 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
24490 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
244a0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
244b0 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
244c0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
244d0 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  a P1 P2 P3 * *.*
244e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
244f0 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
24500 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
24510 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20   P2 the current 
24520 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20  sorter data for 
24530 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31  sorter cursor P1
24540 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20  ..** Then clear 
24550 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65  the column heade
24560 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f  r cache on curso
24570 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P3..**.** This
24580 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61   opcode is norma
24590 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20  lly use to move 
245a0 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20  a record out of 
245b0 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69  the sorter and i
245c0 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65  nto.** a registe
245d0 72 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  r that is the so
245e0 75 72 63 65 20 66 6f 72 20 61 20 70 73 65 75 64  urce for a pseud
245f0 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63  o-table cursor c
24600 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
24610 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61  OpenPseudo.  Tha
24620 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  t pseudo-table c
24630 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65  ursor is the one
24640 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 66   that is identif
24650 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65  ied by.** parame
24660 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e  ter P3.  Clearin
24670 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20  g the P3 column 
24680 63 61 63 68 65 20 61 73 20 70 61 72 74 20 6f 66  cache as part of
24690 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76   this opcode sav
246a0 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61  es.** us from ha
246b0 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20  ving to issue a 
246c0 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77  separate NullRow
246d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
246e0 63 6c 65 61 72 20 74 68 61 74 20 63 61 63 68 65  clear that cache
246f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
24700 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  terData: {.  Vdb
24710 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
24720 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
24730 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d  ->p2];.  pC = p-
24740 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24750 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
24760 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20  ter(pC) );.  rc 
24770 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24780 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f  terRowkey(pC, pO
24790 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  ut);.  assert( r
247a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
247b0 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d  (pOut->flags & M
247c0 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73  EM_Blob) );.  as
247d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
247e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
247f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 2d 3e 61  Cursor );.  p->a
24800 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63  pCsr[pOp->p3]->c
24810 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24820 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61  HE_STALE;.  brea
24830 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24840 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a   RowData P1 P2 *
24850 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
24860 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
24870 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
24880 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
24890 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20  mplete row data 
248a0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
248b0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
248c0 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
248d0 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
248e0 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
248f0 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
24900 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
24910 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
24920 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
24930 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
24940 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
24950 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
24960 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
24970 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
24980 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
24990 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
249a0 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  table..*/./* Opc
249b0 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50  ode: RowKey P1 P
249c0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
249d0 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a  sis: r[P2]=key.*
249e0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
249f0 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
24a00 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79  complete row key
24a10 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
24a20 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
24a30 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
24a40 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
24a50 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65  The key is copie
24a60 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
24a70 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
24a80 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
24a90 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
24aa0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
24ab0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
24ac0 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
24ad0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
24ae0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
24af0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
24b00 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
24b10 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
24b20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20  OP_RowKey:.case 
24b30 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
24b40 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24b50 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
24b60 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36  r;.  u32 n;.  i6
24b70 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d  4 n64;..  pOut =
24b80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
24b90 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
24ba0 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
24bb0 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f   /* Note that Ro
24bc0 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61  wKey and RowData
24bd0 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63   are really exac
24be0 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73  tly the same ins
24bf0 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
24c00 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24c10 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24c20 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24c30 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24c40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
24c50 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b  Sorter(pC)==0 );
24c60 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
24c70 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f  sTable || pOp->o
24c80 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74  pcode!=OP_RowDat
24c90 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
24ca0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c  C->isTable==0 ||
24cb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
24cc0 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
24cd0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
24ce0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c   assert( pC->nul
24cf0 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73  lRow==0 );.  ass
24d00 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
24d10 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
24d20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
24d30 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
24d40 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
24d50 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
24d60 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44  wKey and OP_RowD
24d70 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
24d80 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
24d90 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
24da0 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
24db0 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
24dc0 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
24dd0 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  s that might inv
24de0 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65  alidate.  ** the
24df0 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 69   cursor.  If thi
24e00 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20  s where not the 
24e10 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20  case, on of the 
24e20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74  following assert
24e30 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66  ()s.  ** would f
24e40 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69  ail.  Should thi
24e50 73 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62  s ever change (b
24e60 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65  ecause of change
24e70 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20  s in the code.  
24e80 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68  ** generator) th
24e90 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64  en the fix would
24ea0 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20   be to insert a 
24eb0 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c  call to.  ** sql
24ec0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
24ed0 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61  veto()..  */.  a
24ee0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
24ef0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
24f00 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
24f10 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
24f20 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69  lid(pCrsr) );.#i
24f30 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75  f 0  /* Not requ
24f40 69 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20  ired due to the 
24f50 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65  previous to asse
24f60 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
24f70 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
24f80 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
24f90 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21  o(pC);.  if( rc!
24fa0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
24fb0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24fc0 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rror;.#endif..  
24fd0 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  if( pC->isTable=
24fe0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
24ff0 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  ( !pC->isTable )
25000 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72  ;.    VVA_ONLY(r
25010 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
25020 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
25030 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72  &n64);.    asser
25040 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
25050 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62   );    /* True b
25060 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
25070 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
25080 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ove */.    if( n
25090 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  64>db->aLimit[SQ
250a0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
250b0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
250c0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
250d0 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34      n = (u32)n64
250e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
250f0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
25100 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
25110 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20  ze(pCrsr, &n);. 
25120 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
25130 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f  QLITE_OK );    /
25140 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e  * DataSize() can
25150 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20  not fail */.    
25160 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61  if( n>(u32)db->a
25170 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
25180 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
25190 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
251a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 74 65  ;.    }.  }.  te
251b0 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a  stcase( n==0 );.
251c0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
251d0 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69  eMemClearAndResi
251e0 7a 65 28 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33  ze(pOut, MAX(n,3
251f0 32 29 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  2)) ){.    goto 
25200 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f  no_mem;.  }.  pO
25210 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d  ut->n = n;.  Mem
25220 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
25230 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69  , MEM_Blob);.  i
25240 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  f( pC->isTable==
25250 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
25260 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43  lite3BtreeKey(pC
25270 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
25280 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >z);.  }else{.  
25290 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
252a0 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30  reeData(pCrsr, 0
252b0 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
252c0 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
252d0 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
252e0 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
252f0 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20  ob is ever cast 
25300 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44  to text */.  UPD
25310 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
25320 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
25330 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
25340 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
25350 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25360 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
25370 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
25380 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
25390 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
253a0 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
253b0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
253c0 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
253d0 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
253e0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
253f0 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nt to..**.** P1 
25400 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e  can be either an
25410 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
25420 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
25430 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20  le.  There used 
25440 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72  to.** be a separ
25450 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70  ate OP_VRowid op
25460 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74  code for use wit
25470 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  h virtual tables
25480 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e  , but this.** on
25490 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72  e opcode now wor
254a0 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c  ks for both tabl
254b0 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65  e types..*/.case
254c0 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20   OP_Rowid: {    
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
254e0 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
254f0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
25500 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
25510 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
25520 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
25530 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f   *pModule;..  pO
25540 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
25550 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
25560 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25570 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25580 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25590 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
255a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
255b0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
255c0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
255d0 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e  eReg==0 || pC->n
255e0 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20  ullRow );.  if( 
255f0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
25600 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
25610 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62   MEM_Null;.    b
25620 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
25630 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
25640 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
25650 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
25660 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
25670 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25680 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
25690 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
256a0 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  {.    pVtab = pC
256b0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
256c0 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  Vtab;.    pModul
256d0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
256e0 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  le;.    assert( 
256f0 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
25700 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  );.    rc = pMod
25710 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e  ule->xRowid(pC->
25720 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29  pVtabCursor, &v)
25730 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
25740 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
25750 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20   pVtab);.#endif 
25760 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
25770 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20  IRTUALTABLE */. 
25780 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
25790 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
257a0 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
257b0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
257c0 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20  Restore(pC);.   
257d0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
257e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
257f0 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  r;.    if( pC->n
25800 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
25810 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
25820 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72  M_Null;.      br
25830 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  eak;.    }.    r
25840 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25850 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
25860 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 61 73  sor, &v);.    as
25870 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
25880 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79  _OK );  /* Alway
25890 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20  s so because of 
258a0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
258b0 61 62 6f 76 65 20 2a 2f 0a 20 20 7d 0a 20 20 70  above */.  }.  p
258c0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
258d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
258e0 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20  ode: NullRow P1 
258f0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f  * * * *.**.** Mo
25900 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ve the cursor P1
25910 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20   to a null row. 
25920 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   Any OP_Column o
25930 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61  perations.** tha
25940 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68  t occur while th
25950 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74  e cursor is on t
25960 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c  he null row will
25970 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65   always.** write
25980 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65   a NULL..*/.case
25990 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20   OP_NullRow: {. 
259a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
259b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
259c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
259d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
259e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
259f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25a00 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
25a10 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
25a20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
25a30 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
25a40 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73  .  if( pC->pCurs
25a50 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
25a60 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f  3BtreeClearCurso
25a70 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  r(pC->pCursor);.
25a80 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25a90 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20  /* Opcode: Last 
25aa0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
25ab0 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
25ac0 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
25ad0 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69  Column or Prev i
25ae0 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
25af0 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
25b00 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
25b10 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
25b20 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
25b30 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
25b40 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
25b50 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
25b60 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
25b70 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
25b80 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
25b90 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
25ba0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
25bb0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
25bc0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
25bd0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
25be0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
25bf0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
25c00 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
25c10 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
25c20 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
25c30 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
25c40 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
25c50 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
25c60 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
25c70 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
25c80 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
25c90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73  ..*/.case OP_Las
25ca0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
25cb0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
25cc0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
25cd0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
25ce0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
25cf0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25d00 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
25d10 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
25d20 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
25d30 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
25d40 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
25d50 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20  >pCursor;.  res 
25d60 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
25d70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20  Crsr!=0 );.  rc 
25d80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
25d90 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
25da0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
25db0 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
25dc0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
25dd0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
25de0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25df0 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ALE;.  pC->seekR
25e00 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 33 3b  esult = pOp->p3;
25e10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25e20 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
25e30 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e  p = OP_Last;.#en
25e40 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
25e50 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  2>0 ){.    VdbeB
25e60 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
25e70 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
25e80 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
25e90 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
25ea0 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
25eb0 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20   Sort P1 P2 * * 
25ec0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
25ed0 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79  ode does exactly
25ee0 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
25ef0 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63  as OP_Rewind exc
25f00 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69  ept that.** it i
25f10 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64  ncrements an und
25f20 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c  ocumented global
25f30 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66   variable used f
25f40 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a  or testing..**.*
25f50 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63  * Sorting is acc
25f60 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69  omplished by wri
25f70 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74  ting records int
25f80 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  o a sorting inde
25f90 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e  x,.** then rewin
25fa0 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20  ding that index 
25fb0 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62  and playing it b
25fc0 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ack from beginni
25fd0 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57  ng to.** end.  W
25fe0 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72  e use the OP_Sor
25ff0 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64  t opcode instead
26000 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f   of OP_Rewind to
26010 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e   do the.** rewin
26020 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65  ding so that the
26030 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
26040 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65   will be increme
26050 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72  nted and.** regr
26060 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e  ession tests can
26070 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
26080 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70  er or not the op
26090 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f  timizer is.** co
260a0 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69  rrectly optimizi
260b0 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f  ng out sorts..*/
260c0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53  .case OP_SorterS
260d0 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  ort:    /* jump 
260e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a  */.case OP_Sort:
260f0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
26100 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  p */.#ifdef SQLI
26110 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
26120 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a  3_sort_count++;.
26130 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
26140 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66  _count--;.#endif
26150 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
26160 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
26170 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46  _SORT]++;.  /* F
26180 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
26190 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a   OP_Rewind */.}.
261a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e  /* Opcode: Rewin
261b0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
261c0 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
261d0 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
261e0 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
261f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
26200 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
26210 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
26220 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
26230 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
26240 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
26250 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
26260 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d   empty, jump imm
26270 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
26280 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
26290 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
262a0 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
262b0 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ugh to the follo
262c0 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63  wing .** instruc
262d0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
262e0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
262f0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
26300 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
26310 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
26320 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
26330 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
26340 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
26350 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
26360 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
26370 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
26380 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65  ot Prev..*/.case
26390 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
263a0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
263b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
263c0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
263d0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
263e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
263f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
26400 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
26410 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26420 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
26430 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
26440 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
26450 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
26460 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29  ==OP_SorterSort)
26470 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23   );.  res = 1;.#
26480 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26490 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
264a0 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e  = OP_Rewind;.#en
264b0 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74  dif.  if( isSort
264c0 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
264d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
264e0 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26  rterRewind(pC, &
264f0 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
26500 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70     pCrsr = pC->p
26510 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
26520 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
26530 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
26540 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
26550 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
26560 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
26570 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
26580 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
26590 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e  ALE;.  }.  pC->n
265a0 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
265b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
265c0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
265d0 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62  <p->nOp );.  Vdb
265e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
265f0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
26600 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
26610 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
26620 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
26630 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
26640 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
26650 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
26660 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
26670 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
26680 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
26690 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
266a0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
266b0 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
266c0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
266d0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
266e0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
266f0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
26700 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
26710 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
26720 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
26730 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
26740 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
26750 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
26760 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
26770 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
26780 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
26790 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
267a0 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
267b0 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
267c0 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
267d0 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
267e0 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
267f0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
26800 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
26810 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
26820 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
26830 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
26840 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
26850 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
26860 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
26870 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
26880 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
26890 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
268a0 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
268b0 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
268c0 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
268d0 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
268e0 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
268f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
26900 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
26910 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
26920 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
26930 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
26940 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
26950 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
26960 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
26970 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
26980 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
26990 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
269a0 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
269b0 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
269c0 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
269d0 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
269e0 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
269f0 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
26a00 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
26a10 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
26a20 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
26a30 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
26a40 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
26a50 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49  lso: Prev, NextI
26a60 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  fOpen.*/./* Opco
26a70 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50  de: NextIfOpen P
26a80 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
26a90 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
26aa0 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
26ab0 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
26ac0 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
26ad0 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
26ae0 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
26af0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
26b00 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
26b10 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
26b20 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
26b30 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
26b40 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
26b50 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
26b60 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
26b70 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
26b80 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
26b90 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
26ba0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
26bb0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
26bc0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
26bd0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
26be0 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
26bf0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
26c00 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
26c10 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54  o P2..**.**.** T
26c20 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
26c30 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
26c40 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54  lowing an SeekLT
26c50 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20  , SeekLE, or.** 
26c60 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75  OP_Last opcode u
26c70 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
26c80 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65  the cursor.  Pre
26c90 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  v is not allowed
26ca0 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
26cb0 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
26cc0 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a   OP_Rewind..**.*
26cd0 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
26ce0 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
26cf0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
26d00 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
26d10 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
26d20 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
26d30 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
26d40 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
26d50 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
26d60 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
26d70 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
26d80 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
26d90 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
26da0 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
26db0 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
26dc0 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
26dd0 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
26de0 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
26df0 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
26e00 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
26e10 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
26e20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
26e30 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
26e40 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
26e50 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
26e60 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
26e70 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
26e80 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
26e90 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
26ea0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
26eb0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
26ec0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
26ed0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
26ee0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
26ef0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
26f00 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
26f10 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f   Opcode: PrevIfO
26f20 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
26f30 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
26f40 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
26f50 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70 74  like Prev except
26f60 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
26f70 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
26f80 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
26f90 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
26fa0 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
26fb0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
26fc0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
26fd0 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20  nt res;..  pC = 
26fe0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
26ff0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
27000 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
27010 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  es = 0;.  rc = s
27020 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
27030 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65  Next(db, pC, &re
27040 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f  s);.  goto next_
27050 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72  tail;.case OP_Pr
27060 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  evIfOpen:    /* 
27070 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
27080 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f  NextIfOpen:    /
27090 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
270a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
270b0 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ]==0 ) break;.  
270c0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
270d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
270e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
270f0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
27100 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  t:          /* j
27110 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
27120 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27130 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27140 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
27150 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
27160 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
27170 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27180 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73  [pOp->p1];.  res
27190 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
271a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
271b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
271c0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
271d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
271e0 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  pCursor );.  ass
271f0 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28  ert( res==0 || (
27200 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73  res==1 && pC->is
27210 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74  Table==0) );.  t
27220 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20  estcase( res==1 
27230 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27240 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
27250 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  t || pOp->p4.xAd
27260 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
27270 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
27280 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27290 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
272a0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
272b0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
272c0 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ous );.  assert(
272d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
272e0 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70  _NextIfOpen || p
272f0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
27300 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
27310 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
27320 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
27330 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  revIfOpen || pOp
27340 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
27350 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
27360 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  ous);..  /* The 
27370 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
27380 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
27390 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61  eekGT, SeekGE, a
273a0 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20  nd Rewind..  ** 
273b0 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
273c0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
273d0 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  er SeekLT, SeekL
273e0 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a  E, and Last. */.
273f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
27400 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
27410 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
27420 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20  P_NextIfOpen.   
27430 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
27440 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  p==OP_SeekGT || 
27450 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
27460 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekGE.       || 
27470 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52  pC->seekOp==OP_R
27480 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65  ewind || pC->see
27490 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a  kOp==OP_Found);.
274a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
274b0 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
274c0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
274d0 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20  P_PrevIfOpen.   
274e0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
274f0 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  p==OP_SeekLT || 
27500 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
27510 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekLE.       || 
27520 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c  pC->seekOp==OP_L
27530 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70  ast );..  rc = p
27540 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28  Op->p4.xAdvance(
27550 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
27560 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20  s);.next_tail:. 
27570 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
27580 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
27590 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
275a0 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69  n(res==0,2);.  i
275b0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
275c0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
275d0 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65  ;.    p->aCounte
275e0 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69  r[pOp->p5]++;.#i
275f0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
27600 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
27610 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
27620 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  dif.    goto jum
27630 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
27640 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
27650 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
27660 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
27670 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
27680 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
27690 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
276a0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
276b0 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P5.** Synopsis
276c0 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  : key=r[P2].**.*
276d0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
276e0 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78  lds an SQL index
276f0 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
27700 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
27710 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
27720 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
27730 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
27740 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50  into the index P
27750 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65  1.  Data for the
27760 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a   entry is nil..*
27770 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61  *.** P3 is a fla
27780 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20  g that provides 
27790 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
277a0 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20  tree layer that 
277b0 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69  this.** insert i
277c0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
277d0 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
277e0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
277f0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
27800 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
27810 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
27820 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
27830 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
27840 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ion.  If the OPF
27850 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20  LAG_NCHANGE bit 
27860 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65  is clear,.** the
27870 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
27880 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65  nter is unchange
27890 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
278a0 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  as the OPFLAG_US
278b0 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74 20  ESEEKRESULT bit 
278c0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 75  set, then the cu
278d0 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a 2a  rsor must have.*
278e0 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73 65  * just done a se
278f0 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20 77  ek to the spot w
27900 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e 74  here the new ent
27910 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73 65  ry is to be inse
27920 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c  rted..** This fl
27930 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67 20  ag avoids doing 
27940 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a  an extra seek..*
27950 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
27960 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
27970 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
27980 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
27990 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
279a0 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e   tables is OP_In
279b0 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
279c0 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
279d0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63       /* in2 */.c
279e0 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
279f0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
27a00 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
27a10 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 6e 4b 65  r *pC;.  int nKe
27a20 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  y;.  const char 
27a30 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74  *zKey;..  assert
27a40 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
27a50 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
27a60 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
27a70 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27a80 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
27a90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
27aa0 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
27ab0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
27ac0 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70  erInsert) );.  p
27ad0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
27ae0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
27af0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
27b00 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20  M_Blob );.  if( 
27b10 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
27b20 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
27b30 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72  hange++;.  asser
27b40 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
27b50 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27b60 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
27b70 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
27b80 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
27b90 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
27ba0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
27bb0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
27bc0 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 20 20 72  nsert ){.      r
27bd0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
27be0 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
27bf0 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  In2);.    }else{
27c00 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49  .      nKey = pI
27c10 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65  n2->n;.      zKe
27c20 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
27c30 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
27c40 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70  treeInsert(pC->p
27c50 43 75 72 73 6f 72 2c 20 7a 4b 65 79 2c 20 6e 4b  Cursor, zKey, nK
27c60 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
27c70 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20  p->p3, .        
27c80 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
27c90 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
27ca0 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
27cb0 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
27cc0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73      );.      ass
27cd0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
27ce0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
27cf0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
27d00 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
27d10 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  E;.    }.  }.  b
27d20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27d30 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
27d40 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
27d50 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
27d60 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  @P3].**.** The c
27d70 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
27d80 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
27d90 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
27da0 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
27db0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
27dc0 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
27dd0 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
27de0 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
27df0 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
27e00 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
27e10 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
27e20 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
27e30 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
27e40 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
27e50 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
27e60 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
27e70 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
27e80 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
27e90 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
27ea0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
27eb0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73  rsor)+1 );.  ass
27ec0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27ed0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27ee0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
27ef0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27f00 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
27f10 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
27f20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
27f30 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
27f40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27f50 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70  ->p5==0 );.  r.p
27f60 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
27f70 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
27f80 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
27f90 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  3;.  r.default_r
27fa0 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20  c = 0;.  r.aMem 
27fb0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
27fc0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
27fd0 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b  DEBUG.  { int i;
27fe0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
27ff0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
28000 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
28010 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
28020 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c  endif.  rc = sql
28030 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
28040 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
28050 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
28060 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28070 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
28080 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
28090 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72  3BtreeDelete(pCr
280a0 73 72 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 61 73  sr, 0);.  }.  as
280b0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
280c0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
280d0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
280e0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
280f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28100 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
28110 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
28120 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
28130 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
28140 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
28150 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
28160 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
28170 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
28180 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
28190 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
281a0 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
281b0 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
281c0 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
281d0 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
281e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
281f0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
28200 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
28210 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
28220 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
28230 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
28240 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
28250 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
28260 75 74 32 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ut2 */.  BtCurso
28270 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65  r *pCrsr;.  Vdbe
28280 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
28290 34 20 72 6f 77 69 64 3b 0a 0a 20 20 70 4f 75 74  4 rowid;..  pOut
282a0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
282b0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
282c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
282d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
282e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
282f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
28300 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
28310 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
28320 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
28330 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
28340 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
28350 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 61   = MEM_Null;.  a
28360 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
28370 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  le==0 );.  asser
28380 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
28390 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 2f  oveto==0 );..  /
283a0 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73  * sqlite3VbeCurs
283b0 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20  orRestore() can 
283c0 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65  only fail if the
283d0 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e   record has been
283e0 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75   deleted.  ** ou
283f0 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65  t from under the
28400 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77   cursor.  That w
28410 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e  ill never happen
28420 64 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69  d for an IdxRowi
28430 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20 68  d.  ** opcode, h
28440 65 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28 29  ence the NEVER()
28450 20 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68 65   arround the che
28460 63 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e  ck of the return
28470 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 72   value..  */.  r
28480 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
28490 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
284a0 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
284b0 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
284c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
284d0 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21  _error;..  if( !
284e0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
284f0 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f     rowid = 0;  /
28500 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
28510 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
28520 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
28530 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
28540 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
28550 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64  b, pCrsr, &rowid
28560 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
28570 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
28580 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
28590 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
285a0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
285b0 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75 74   rowid;.    pOut
285c0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
285d0 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  t;.  }.  break;.
285e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
285f0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
28600 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
28610 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
28620 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
28630 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
28640 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
28650 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
28660 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
28670 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
28680 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
28690 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
286a0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
286b0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
286c0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
286d0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
286e0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
286f0 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
28700 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
28710 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
28720 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
28730 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
28740 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
28750 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
28760 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
28770 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
28780 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
28790 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
287a0 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50   Opcode: IdxGT P
287b0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
287c0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
287d0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
287e0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
287f0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
28800 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
28810 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
28820 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
28830 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
28840 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
28850 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
28860 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
28870 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
28880 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
28890 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
288a0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
288b0 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
288c0 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
288d0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
288e0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
288f0 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
28900 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
28910 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
28920 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
28930 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
28940 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
28950 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
28960 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
28970 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
28980 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
28990 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
289a0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
289b0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
289c0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
289d0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
289e0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
289f0 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
28a00 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
28a10 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
28a20 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
28a30 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
28a40 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
28a50 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
28a60 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
28a70 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
28a80 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
28a90 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
28aa0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
28ab0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
28ac0 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
28ad0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
28ae0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
28af0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
28b00 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31  Opcode: IdxLE P1
28b10 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
28b20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
28b30 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
28b40 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
28b50 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
28b60 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
28b70 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
28b80 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
28b90 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
28ba0 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
28bb0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
28bc0 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
28bd0 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
28be0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
28bf0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
28c00 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
28c10 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
28c20 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
28c30 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
28c40 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
28c50 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
28c60 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
28c70 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  e then jump.** t
28c80 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20  o P2. Otherwise 
28c90 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
28ca0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
28cb0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
28cc0 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20  _IdxLE:         
28cd0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
28ce0 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20   OP_IdxGT:      
28cf0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
28d00 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
28d10 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28d20 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
28d30 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d    {       /* jum
28d40 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
28d50 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
28d60 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
28d70 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
28d80 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28d90 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28da0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28db0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28dc0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28dd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28de0 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
28df0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
28e00 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
28e10 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
28e20 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
28e30 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
28e40 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
28e50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28e60 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
28e70 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
28e80 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
28e90 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
28ea0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
28eb0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
28ec0 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
28ed0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
28ee0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
28ef0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
28f00 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
28f10 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
28f20 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
28f30 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
28f40 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
28f50 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
28f60 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
28f70 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
28f80 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
28f90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
28fa0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28fb0 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
28fc0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
28fd0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
28fe0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
28ff0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
29000 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
29010 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
29020 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
29030 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
29040 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
29050 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
29060 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73  db, pC, &r, &res
29070 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
29080 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
29090 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
290a0 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
290b0 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
290c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
290d0 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
290e0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
290f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
29100 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
29110 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
29120 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
29130 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
29140 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
29150 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
29160 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
29170 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
29180 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
29190 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a  Taken(res>0,2);.
291a0 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f    if( res>0 ) go
291b0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
291c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
291d0 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31  code: Destroy P1
291e0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
291f0 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72   Delete an entir
29200 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
29210 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
29220 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
29230 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
29240 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
29250 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
29260 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  e being destroye
29270 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  d is in the main
29280 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
29290 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P3==0.  If.** 
292a0 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P3==1 then the t
292b0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
292c0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
292d0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
292e0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
292f0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
29300 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
29310 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
29320 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
29330 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65   AUTOVACUUM is e
29340 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69  nabled then it i
29350 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
29360 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67  another root pag
29370 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f  e.** might be mo
29380 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77  ved into the new
29390 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20  ly deleted root 
293a0 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  page in order to
293b0 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f   keep all.** roo
293c0 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f  t pages contiguo
293d0 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  us at the beginn
293e0 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62  ing of the datab
293f0 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72  ase.  The former
29400 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65  .** value of the
29410 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20   root page that 
29420 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75  moved - its valu
29430 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76  e before the mov
29440 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20  e occurred -.** 
29450 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
29460 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f  ister P2.  If no
29470 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65   page .** moveme
29480 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
29490 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62  (because the tab
294a0 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
294b0 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a   was already .**
294c0 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
294d0 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
294e0 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
294f0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
29500 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56   P2..** If AUTOV
29510 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
29520 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  d then a zero is
29530 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
29540 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
29550 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f  e also: Clear.*/
29560 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79  .case OP_Destroy
29570 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20  : {     /* out2 
29580 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
29590 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61  .  int iDb;..  a
295a0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
295b0 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  ly==0 );.  pOut 
295c0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
295d0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
295e0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
295f0 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56  ll;.  if( db->nV
29600 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56  dbeRead > db->nV
29610 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20  Destroy+1 ){.   
29620 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
29630 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
29640 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
29650 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rt;.  }else{.   
29660 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
29670 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
29680 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
29690 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20  ask, iDb) );.   
296a0 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a   iMoved = 0;  /*
296b0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
296c0 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ly to silence a 
296d0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
296e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
296f0 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61  eDropTable(db->a
29700 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70  Db[iDb].pBt, pOp
29710 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
29720 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
29730 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
29740 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65  Out->u.i = iMove
29750 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  d;.#ifndef SQLIT
29760 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
29770 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  M.    if( rc==SQ
29780 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65  LITE_OK && iMove
29790 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  d!=0 ){.      sq
297a0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
297b0 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76  ed(db, iDb, iMov
297c0 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  ed, pOp->p1);.  
297d0 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65      /* All OP_De
297e0 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
297f0 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61   occur on the sa
29800 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20  me btree */.    
29810 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53    assert( resetS
29820 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20  chemaOnFault==0 
29830 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  || resetSchemaOn
29840 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a  Fault==iDb+1 );.
29850 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
29860 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31  aOnFault = iDb+1
29870 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
29880 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
29890 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
298a0 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
298b0 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
298c0 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
298d0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
298e0 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
298f0 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
29900 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
29910 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
29920 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
29930 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
29940 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
29950 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
29960 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
29970 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
29980 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
29990 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
299a0 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
299b0 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
299c0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
299d0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
299e0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
299f0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
29a00 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
29a10 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
29a20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
29a30 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
29a40 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
29a50 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
29a60 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
29a70 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
29a80 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
29a90 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
29aa0 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
29ab0 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
29ac0 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
29ad0 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
29ae0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
29af0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
29b00 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
29b10 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
29b20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
29b30 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
29b40 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
29b50 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
29b60 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
29b70 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
29b80 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
29b90 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
29ba0 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
29bb0 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
29bc0 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
29bd0 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
29be0 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65  nge;. .  nChange
29bf0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
29c00 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
29c10 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
29c20 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
29c30 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b  ask, pOp->p2) );
29c40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
29c50 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
29c60 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
29c70 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
29c80 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
29c90 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
29ca0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
29cb0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
29cc0 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
29cd0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
29ce0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
29cf0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
29d00 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
29d10 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
29d20 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
29d30 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
29d40 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75   aMem[pOp->p3].u
29d50 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  .i += nChange;. 
29d60 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
29d70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29d80 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a  ResetSorter P1 *
29d90 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c   * * *.**.** Del
29da0 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
29db0 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65   from the epheme
29dc0 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72  ral table or sor
29dd0 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f  ter.** that is o
29de0 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31  pen on cursor P1
29df0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
29e00 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ode only works f
29e10 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64 20  or cursors used 
29e20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a  for sorting and.
29e30 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f  ** opened with O
29e40 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
29e50 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  or OP_SorterOpen
29e60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
29e70 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64  etSorter: {.  Vd
29e80 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a  beCursor *pC;. .
29e90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29ea0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29eb0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
29ec0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
29ed0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29ee0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
29ef0 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29 7b 0a   pC->pSorter ){.
29f00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
29f10 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70  orterReset(db, p
29f20 43 2d 3e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d  C->pSorter);.  }
29f30 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
29f40 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
29f50 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  l );.    rc = sq
29f60 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
29f70 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d  ableOfCursor(pC-
29f80 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
29f90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29fa0 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
29fb0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
29fc0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
29fd0 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
29fe0 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
29ff0 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
2a000 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2a010 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2a020 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
2a030 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2a040 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
2a050 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2a060 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
2a070 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
2a080 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
2a090 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
2a0a0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
2a0b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
2a0c0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
2a0d0 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
2a0e0 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
2a0f0 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
2a100 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
2a110 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
2a120 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
2a130 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
2a140 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
2a150 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
2a160 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
2a170 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
2a180 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
2a190 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
2a1a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2a1b0 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
2a1c0 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
2a1d0 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69  te a new index i
2a1e0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2a1f0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2a200 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
2a210 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2a220 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
2a230 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
2a240 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
2a250 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
2a260 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2a270 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
2a280 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
2a290 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
2a2a0 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
2a2b0 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62   on OP_CreateTab
2a2c0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
2a2d0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
2a2e0 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2a2f0 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20  Index:          
2a300 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73    /* out2 */.cas
2a310 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
2a320 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
2a330 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67  out2 */.  int pg
2a340 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b  no;.  int flags;
2a350 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70  .  Db *pDb;..  p
2a360 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
2a370 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
2a380 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
2a390 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2a3a0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2a3b0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
2a3c0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
2a3d0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
2a3e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
2a3f0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2a400 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
2a410 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2a420 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
2a430 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
2a440 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
2a450 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
2a460 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
2a470 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
2a480 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
2a490 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
2a4a0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c  flags = BTREE_BL
2a4b0 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20  OBKEY;.  }.  rc 
2a4c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
2a4d0 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
2a4e0 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
2a4f0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
2a500 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
2a510 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
2a520 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a  rseSchema P1 * *
2a530 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64   P4 *.**.** Read
2a540 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65   and parse all e
2a550 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
2a560 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61  SQLITE_MASTER ta
2a570 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ble of database 
2a580 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68  P1.** that match
2a590 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2a5a0 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  e P4. .**.** Thi
2a5b0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2a5c0 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63   the parser to c
2a5d0 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
2a5e0 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20  ual machine,.** 
2a5f0 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65  then runs the ne
2a600 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
2a610 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61  e.  It is thus a
2a620 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f   re-entrant opco
2a630 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  de..*/.case OP_P
2a640 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20  arseSchema: {.  
2a650 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74  int iDb;.  const
2a660 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
2a670 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
2a680 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
2a690 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65  a;..  /* Any pre
2a6a0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2a6b0 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69  that invokes thi
2a6c0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f  s opcode will ho
2a6d0 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20  ld mutexes.  ** 
2a6e0 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20  on every btree. 
2a6f0 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65   This is a prere
2a700 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f  quisite for invo
2a710 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74  king .  ** sqlit
2a720 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29  e3InitCallback()
2a730 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ..  */.#ifdef SQ
2a740 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
2a750 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e  (iDb=0; iDb<db->
2a760 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20  nDb; iDb++){.   
2a770 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20   assert( iDb==1 
2a780 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48  || sqlite3BtreeH
2a790 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44  oldsMutex(db->aD
2a7a0 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20  b[iDb].pBt) );. 
2a7b0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62   }.#endif..  iDb
2a7c0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
2a7d0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
2a7e0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
2a7f0 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72   assert( DbHasPr
2a800 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
2a810 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
2a820 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f   );.  /* Used to
2a830 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61   be a conditiona
2a840 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74  l */ {.    zMast
2a850 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c  er = SCHEMA_TABL
2a860 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74  E(iDb);.    init
2a870 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
2a880 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
2a890 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e   pOp->p1;.    in
2a8a0 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
2a8b0 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  = &p->zErrMsg;. 
2a8c0 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
2a8d0 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
2a8e0 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
2a8f0 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
2a900 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
2a910 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
2a920 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62  owid",.       db
2a930 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65  ->aDb[iDb].zName
2a940 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e  , zMaster, pOp->
2a950 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a  p4.z);.    if( z
2a960 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
2a970 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2a980 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  M;.    }else{.  
2a990 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
2a9a0 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a  init.busy==0 );.
2a9b0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
2a9c0 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69  usy = 1;.      i
2a9d0 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c  nitData.rc = SQL
2a9e0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73  ITE_OK;.      as
2a9f0 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f  sert( !db->mallo
2aa00 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20  cFailed );.     
2aa10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2aa20 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c  ec(db, zSql, sql
2aa30 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
2aa40 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
2aa50 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2aa60 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20  QLITE_OK ) rc = 
2aa70 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20  initData.rc;.   
2aa80 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
2aa90 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  (db, zSql);.    
2aaa0 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2aab0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
2aac0 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65   if( rc ) sqlite
2aad0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
2aae0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
2aaf0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2ab00 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
2ab10 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2ab20 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
2ab30 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2ab40 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2ab50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
2ab60 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
2ab70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
2ab80 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
2ab90 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
2aba0 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
2abb0 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
2abc0 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
2abd0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
2abe0 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
2abf0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
2ac00 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
2ac10 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
2ac20 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
2ac30 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
2ac40 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
2ac50 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
2ac60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2ac70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2ac80 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
2ac90 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
2aca0 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
2acb0 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
2acc0 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
2acd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
2ace0 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  ALYZE) */../* Op
2acf0 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
2ad00 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2ad10 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2ad20 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2ad30 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2ad40 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2ad50 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
2ad60 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
2ad70 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
2ad80 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
2ad90 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
2ada0 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2adb0 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2adc0 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
2add0 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
2ade0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2adf0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2ae00 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2ae10 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2ae20 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2ae30 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
2ae40 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2ae50 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
2ae60 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2ae70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2ae80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ae90 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a  DropIndex P1 * *
2aea0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2aeb0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2aec0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2aed0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2aee0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2aef0 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20   index named P4 
2af00 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2af10 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2af20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a  after an index.*
2af30 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2af40 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2af50 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2af60 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f  ).** in order to
2af70 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
2af80 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2af90 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2afa0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2afb0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2afc0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2afd0 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
2afe0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2aff0 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
2b000 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2b010 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2b020 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
2b030 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
2b040 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2b050 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2b060 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2b070 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2b080 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
2b090 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
2b0a0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
2b0b0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
2b0c0 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
2b0d0 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2b0e0 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2b0f0 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2b100 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2b110 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2b120 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2b130 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2b140 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2b150 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2b160 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2b170 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20  ropTrigger: {.  
2b180 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2b190 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62  DeleteTrigger(db
2b1a0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2b1b0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
2b1c0 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
2b1d0 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
2b1e0 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64  Y_CHECK./* Opcod
2b1f0 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50  e: IntegrityCk P
2b200 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
2b210 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
2b220 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
2b230 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
2b240 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
2b250 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
2b260 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
2b270 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
2b280 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
2b290 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
2b2a0 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
2b2b0 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
2b2c0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2b2d0 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
2b2e0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61   contains the ma
2b2f0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
2b300 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
2b310 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
2b320 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
2b330 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
2b340 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2b350 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
2b360 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
2b370 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
2b380 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
2b390 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
2b3a0 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
2b3b0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2b3c0 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
2b3d0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
2b3e0 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
2b3f0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
2b400 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72   integer.** stor
2b410 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72  ed in reg(P1), r
2b420 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31  eg(P1+1), reg(P1
2b430 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65  +2), ....  There
2b440 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a   are P2 tables.*
2b450 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49  * total..**.** I
2b460 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
2b470 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
2b480 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
2b490 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
2b4a0 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
2b4b0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2b4c0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
2b4d0 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
2b4e0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
2b4f0 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
2b500 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
2b510 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
2b520 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
2b530 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
2b540 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
2b550 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
2b560 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
2b570 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
2b580 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
2b590 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
2b5a0 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
2b5b0 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20  ked */.  int j; 
2b5c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
2b5d0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
2b5e0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a  t nErr;       /*
2b5f0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
2b600 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20  s reported */.  
2b610 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20  char *z;        
2b620 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65  /* Text of the e
2b630 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20  rror report */. 
2b640 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20   Mem *pnErr;    
2b650 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65   /* Register kee
2b660 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72  ping track of er
2b670 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a  rors remaining *
2b680 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2b690 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e  bIsReader );.  n
2b6a0 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
2b6b0 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
2b6c0 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
2b6d0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
2b6e0 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  w(db, sizeof(int
2b6f0 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
2b700 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
2b710 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
2b720 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2b730 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2b740 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2b750 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  ) );.  pnErr = &
2b760 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2b770 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
2b780 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2b790 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
2b7a0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2b7b0 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
2b7c0 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
2b7d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2b7e0 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
2b7f0 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
2b800 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
2b810 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
2b820 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
2b830 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
2b840 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2b850 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
2b860 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2b870 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2b880 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
2b890 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
2b8a0 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
2b8b0 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
2b8c0 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
2b8d0 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
2b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8f0 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
2b900 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
2b910 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
2b920 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70  (db, aRoot);.  p
2b930 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
2b940 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  r;.  sqlite3Vdbe
2b950 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
2b960 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  ;.  if( nErr==0 
2b970 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a  ){.    assert( z
2b980 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ==0 );.  }else i
2b990 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67  f( z==0 ){.    g
2b9a0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65  oto no_mem;.  }e
2b9b0 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
2b9c0 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
2b9d0 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
2b9e0 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
2b9f0 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
2ba00 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2ba10 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
2ba20 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2ba30 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
2ba40 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
2ba50 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2ba60 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
2ba70 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
2ba80 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
2ba90 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2baa0 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28  nopsis:  rowset(
2bab0 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2bac0 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2bad0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2bae0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2baf0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
2bb00 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
2bb10 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2bb20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2bb30 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2bb40 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2bb50 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2bb60 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2bb70 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2bb80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2bb90 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2bba0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2bbb0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2bbc0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2bbd0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2bbe0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2bbf0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2bc00 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2bc10 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2bc20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2bc30 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2bc40 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2bc50 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2bc60 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2bc70 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2bc80 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2bc90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2bca0 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2bcb0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2bcc0 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73  sis:  r[P3]=rows
2bcd0 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74  et(P1).**.** Ext
2bce0 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
2bcf0 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
2bd00 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
2bd10 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
2bd20 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
2bd30 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
2bd40 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
2bd50 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
2bd60 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
2bd70 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
2bd80 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2bd90 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2bda0 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
2bdb0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2bdc0 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
2bdd0 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  val;..  pIn1 = &
2bde0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2bdf0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2be00 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2be10 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  =0 .   || sqlite
2be20 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31  3RowSetNext(pIn1
2be30 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61  ->u.pRowSet, &va
2be40 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
2be50 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
2be60 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
2be70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2be80 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2be90 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2bea0 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67  aken(1,2);.    g
2beb0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
2bec0 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
2bed0 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b  errupt;.  }else{
2bee0 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
2bef0 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
2bf00 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
2bf10 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2bf20 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74  (0,2);.    sqlit
2bf30 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2bf40 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
2bf50 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f  , val);.  }.  go
2bf60 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2bf70 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2bf80 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74  code: RowSetTest
2bf90 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
2bfa0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2bfb0 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29  3] in rowset(P1)
2bfc0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2bfd0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
2bfe0 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
2bff0 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
2c000 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
2c010 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
2c020 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
2c030 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
2c040 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
2c050 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
2c060 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
2c070 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
2c080 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
2c090 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
2c0a0 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
2c0b0 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
2c0c0 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
2c0d0 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
2c0e0 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
2c0f0 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
2c100 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
2c110 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20  here successive 
2c120 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  sets.** of integ
2c130 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20  ers, where each 
2c140 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
2c150 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68  duplicates. Each
2c160 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65   set.** of value
2c170 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  s is identified 
2c180 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
2c190 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
2c1a0 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
2c1b0 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
2c1c0 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34  l set P4=-1.  P4
2c1d0 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
2c1e0 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67  -1 or.** non-neg
2c1f0 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d  ative.  For non-
2c200 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
2c210 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c  of P4 only the l
2c220 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61  ower 4.** bits a
2c230 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  re significant..
2c240 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
2c250 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
2c260 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
2c270 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2c280 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
2c290 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f  rowset object fo
2c2a0 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
2c2b0 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
2c2c0 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
2c2d0 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
2c2e0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2c2f0 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
2c300 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
2c310 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
2c320 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
2c330 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
2c340 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
2c350 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
2c360 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
2c370 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
2c380 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
2c390 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
2c3a0 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
2c3b0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
2c3c0 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
2c3d0 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
2c3e0 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
2c3f0 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
2c400 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
2c410 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c430 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2c440 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
2c450 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
2c460 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  s;..  pIn1 = &aM
2c470 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
2c480 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
2c490 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70  >p3];.  iSet = p
2c4a0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65  Op->p4.i;.  asse
2c4b0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26  rt( pIn3->flags&
2c4c0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a  MEM_Int );..  /*
2c4d0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   If there is any
2c4e0 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e  thing other than
2c4f0 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74   a rowset object
2c500 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
2c510 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20  P1,.  ** delete 
2c520 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69  it now and initi
2c530 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e  alize P1 with an
2c540 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20   empty rowset.  
2c550 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
2c560 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2c570 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2c580 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2c590 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2c5a0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2c5b0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2c5c0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2c5d0 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
2c5e0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2c5f0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
2c600 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20  rt( iSet==-1 || 
2c610 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28  iSet>=0 );.  if(
2c620 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69   iSet ){.    exi
2c630 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77  sts = sqlite3Row
2c640 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e  SetTest(pIn1->u.
2c650 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70  pRowSet, iSet, p
2c660 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56  In3->u.i);.    V
2c670 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65  dbeBranchTaken(e
2c680 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
2c690 20 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f   if( exists ) go
2c6a0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2c6b0 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
2c6c0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2c6d0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2c6e0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2c6f0 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
2c700 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2c710 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2c720 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
2c730 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
2c740 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
2c750 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
2c760 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
2c770 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
2c780 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
2c790 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
2c7a0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
2c7b0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2c7c0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
2c7d0 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
2c7e0 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
2c7f0 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
2c800 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
2c810 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
2c820 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
2c830 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2c840 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
2c850 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
2c860 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
2c870 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
2c880 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
2c890 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
2c8a0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2c8b0 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
2c8c0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2c8d0 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
2c8e0 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
2c8f0 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
2c900 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
2c910 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
2c920 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
2c930 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
2c940 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2c950 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
2c960 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2c970 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  am..**.** If P5 
2c980 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2c990 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67  n recursive prog
2c9a0 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69  ram invocation i
2c9b0 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61  s enabled..*/.ca
2c9c0 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b  se OP_Program: {
2c9d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c9e0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
2c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ca00 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
2ca10 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73   registers for s
2ca20 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2ca30 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20  int nByte;      
2ca40 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
2ca50 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63   of runtime spac
2ca60 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73  e required for s
2ca70 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2ca80 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20  Mem *pRt;       
2ca90 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
2caa0 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ter to allocate 
2cab0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f  runtime space */
2cac0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2cad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2cae0 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
2caf0 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c  rough memory cel
2cb00 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e  ls */.  Mem *pEn
2cb10 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2cb20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63  /* Last memory c
2cb30 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79  ell in new array
2cb40 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2cb50 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  *pFrame;      /*
2cb60 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20   New vdbe frame 
2cb70 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f  to execute in */
2cb80 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
2cb90 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75  Program;   /* Su
2cba0 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  b-program to exe
2cbb0 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  cute */.  void *
2cbc0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2cbd0 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74    /* Token ident
2cbe0 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a  ifying trigger *
2cbf0 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20  /..  pProgram = 
2cc00 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d  pOp->p4.pProgram
2cc10 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b  ;.  pRt = &aMem[
2cc20 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
2cc30 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  rt( pProgram->nO
2cc40 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49  p>0 );.  .  /* I
2cc50 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73  f the p5 flag is
2cc60 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63   clear, then rec
2cc70 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2cc80 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73  n of triggers is
2cc90 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20   .  ** disabled 
2cca0 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  for backwards co
2ccb0 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20  mpatibility (p5 
2ccc0 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73  is set if this s
2ccd0 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  ub-program.  ** 
2cce0 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67  is really a trig
2ccf0 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69  ger, not a forei
2cd00 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61  gn key action, a
2cd10 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a  nd the flag set.
2cd20 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64    ** and cleared
2cd30 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20   by the "PRAGMA 
2cd40 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
2cd50 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63  rs" command is c
2cd60 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a  lear)..  ** .  *
2cd70 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
2cd80 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
2cd90 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
2cda0 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
2cdb0 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2cdc0 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
2cdd0 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
2cde0 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
2cdf0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
2ce00 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
2ce10 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
2ce20 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
2ce30 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
2ce40 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
2ce50 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
2ce60 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
2ce70 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
2ce80 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2ce90 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
2cea0 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
2ceb0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
2cec0 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
2ced0 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
2cee0 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28  iable.  */.  if(
2cef0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
2cf00 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  t = pProgram->to
2cf10 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72  ken;.    for(pFr
2cf20 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2cf30 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d  Frame && pFrame-
2cf40 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d  >token!=t; pFram
2cf50 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2cf60 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61  t);.    if( pFra
2cf70 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  me ) break;.  }.
2cf80 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65  .  if( p->nFrame
2cf90 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  >=db->aLimit[SQL
2cfa0 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
2cfb0 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20  R_DEPTH] ){.    
2cfc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2cfd0 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  R;.    sqlite3Vd
2cfe0 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20  beError(p, "too 
2cff0 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74  many levels of t
2d000 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e  rigger recursion
2d010 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ");.    break;. 
2d020 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
2d030 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
2d040 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
2d050 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
2d060 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
2d070 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
2d080 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
2d090 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2d0a0 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
2d0b0 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
2d0c0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2d0d0 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
2d0e0 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
2d0f0 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
2d100 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
2d110 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
2d120 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
2d130 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
2d140 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
2d150 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65  >flags&MEM_Frame
2d160 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53  )==0 ){.    /* S
2d170 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69  ubProgram.nMem i
2d180 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
2d190 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
2d1a0 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20  lls used by the 
2d1b0 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
2d1c0 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f  stored in SubPro
2d1d0 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c  gram.aOp. As wel
2d1e0 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20  l as these, one 
2d1f0 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65  memory.    ** ce
2d200 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ll is required f
2d210 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75  or each cursor u
2d220 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
2d230 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20  am. Set local.  
2d240 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d    ** variable nM
2d250 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56  em (and later, V
2d260 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d  dbeFrame.nChildM
2d270 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75  em) to this valu
2d280 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d  e..    */.    nM
2d290 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em = pProgram->n
2d2a0 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem + pProgram->
2d2b0 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20  nCsr;.    nByte 
2d2c0 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
2d2d0 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
2d2e0 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
2d2f0 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
2d300 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
2d310 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
2d320 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2d330 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  r *).           
2d340 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2d350 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38  Once * sizeof(u8
2d360 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  );.    pFrame = 
2d370 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
2d380 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
2d390 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
2d3a0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2d3b0 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2d3c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2d3d0 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
2d3e0 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
2d3f0 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
2d400 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
2d410 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
2d420 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
2d430 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
2d440 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2d450 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
2d460 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2d470 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28    pFrame->pc = (
2d480 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
2d490 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
2d4a0 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
2d4b0 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
2d4c0 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
2d4d0 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
2d4e0 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
2d4f0 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
2d500 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
2d510 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
2d520 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2d530 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
2d540 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
2d550 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2d560 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2d570 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e  nceFlag = p->aOn
2d580 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61  ceFlag;.    pFra
2d590 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20  me->nOnceFlag = 
2d5a0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69  p->nOnceFlag;.#i
2d5b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2d5c0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2d5d0 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  US.    pFrame->a
2d5e0 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65  nExec = p->anExe
2d5f0 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70  c;.#endif..    p
2d600 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
2d610 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
2d620 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
2d630 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
2d640 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2d650 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
2d660 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
2d670 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
2d680 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20  Undefined;.     
2d690 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
2d6a0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2d6b0 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d     pFrame = pRt-
2d6c0 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61  >u.pFrame;.    a
2d6d0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2d6e0 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
2d6f0 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2d700 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61  hildMem );.    a
2d710 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2d720 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2d730 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20  ChildCsr );.    
2d740 61 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f  assert( (int)(pO
2d750 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65  p - aOp)==pFrame
2d760 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
2d770 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
2d780 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
2d790 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
2d7a0 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
2d7b0 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46   lastRowid;.  pF
2d7c0 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
2d7d0 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46  p->nChange;.  pF
2d7e0 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20  rame->nDbChange 
2d7f0 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65  = p->db->nChange
2d800 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
2d810 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
2d820 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
2d830 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64  Mem = aMem = &Vd
2d840 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2d850 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65  e)[-1];.  p->nMe
2d860 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2d870 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2d880 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2d890 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2d8a0 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2d8b0 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2d8c0 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d  p->nMem+1];.  p-
2d8d0 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
2d8e0 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
2d8f0 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
2d900 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65  >nOp;.  p->aOnce
2d910 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d  Flag = (u8 *)&p-
2d920 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f  >apCsr[p->nCurso
2d930 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c  r];.  p->nOnceFl
2d940 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ag = pProgram->n
2d950 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c  Once;.#ifdef SQL
2d960 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2d970 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e  SCANSTATUS.  p->
2d980 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64  anExec = 0;.#end
2d990 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  if.  pOp = &aOp[
2d9a0 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d  -1];.  memset(p-
2d9b0 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70  >aOnceFlag, 0, p
2d9c0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20  ->nOnceFlag);.. 
2d9d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2d9e0 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
2d9f0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2da00 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
2da10 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
2da20 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
2da30 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
2da40 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
2da50 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
2da60 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
2da70 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
2da80 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
2da90 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
2daa0 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
2dab0 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
2dac0 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
2dad0 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
2dae0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
2daf0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
2db00 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
2db10 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
2db20 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
2db30 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
2db40 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
2db50 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
2db60 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
2db70 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
2db80 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2db90 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
2dba0 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2dbb0 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
2dbc0 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
2dbd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2dbe0 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
2dbf0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
2dc00 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ut2 */.  VdbeFra
2dc10 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65  me *pFrame;.  Me
2dc20 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d  m *pIn;.  pOut =
2dc30 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2dc40 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d  p, pOp);.  pFram
2dc50 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
2dc60 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e   pIn = &pFrame->
2dc70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70  aMem[pOp->p1 + p
2dc80 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d  Frame->aOp[pFram
2dc90 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20  e->pc].p1];   . 
2dca0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2dcb0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
2dcc0 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29   pIn, MEM_Ephem)
2dcd0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65  ;.  break;.}..#e
2dce0 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
2dcf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2dd00 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  GER */..#ifndef 
2dd10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2dd20 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64  IGN_KEY./* Opcod
2dd30 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20  e: FkCounter P1 
2dd40 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2dd50 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b  psis: fkctr[P1]+
2dd60 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  =P2.**.** Increm
2dd70 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
2dd80 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
2dd90 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
2dda0 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
2ddb0 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
2ddc0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
2ddd0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2dde0 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
2ddf0 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
2de00 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
2de10 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
2de20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
2de30 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
2de40 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
2de50 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2de60 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
2de70 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2de80 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
2de90 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
2dea0 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
2deb0 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  & SQLITE_DeferFK
2dec0 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  s ){.    db->nDe
2ded0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d  ferredImmCons +=
2dee0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2def0 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b  e if( pOp->p1 ){
2df00 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2df10 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
2df20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
2df30 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2df40 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2df50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2df60 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
2df70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2df80 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63  Synopsis: if fkc
2df90 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50  tr[P1]==0 goto P
2dfa0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
2dfb0 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66  ode tests if a f
2dfc0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2dfd0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
2dfe0 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e   currently zero.
2dff0 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20  .** If so, jump 
2e000 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
2e010 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2e020 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2e030 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72  e next .** instr
2e040 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
2e050 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2e060 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69   then the jump i
2e070 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64  s taken if the d
2e080 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
2e090 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73  nt-counter.** is
2e0a0 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74   zero (the one t
2e0b0 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72  hat counts defer
2e0c0 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  red constraint v
2e0d0 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50  iolations). If P
2e0e0 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68  1 is.** zero, th
2e0f0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2e100 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  if the statement
2e110 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2e120 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28  ter is zero.** (
2e130 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2e140 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2e150 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f   violations)..*/
2e160 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72  .case OP_FkIfZer
2e170 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  o: {         /* 
2e180 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f  jump */.  if( pO
2e190 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62  p->p1 ){.    Vdb
2e1a0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d  eBranchTaken(db-
2e1b0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2e1c0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2e1d0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
2e1e0 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  ;.    if( db->nD
2e1f0 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2e200 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2e210 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f  mmCons==0 ) goto
2e220 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
2e230 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
2e240 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b  anchTaken(p->nFk
2e250 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
2e260 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2e270 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
2e280 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73    if( p->nFkCons
2e290 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d  traint==0 && db-
2e2a0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2e2b0 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  s==0 ) goto jump
2e2c0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
2e2d0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2e2e0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2e2f0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2e300 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2e310 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2e320 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
2e330 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
2e340 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2e350 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31  : r[P1]=max(r[P1
2e360 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50  ],r[P2]).**.** P
2e370 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
2e380 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
2e390 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
2e3a0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
2e3b0 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
2e3c0 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
2e3d0 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
2e3e0 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
2e3f0 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
2e400 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
2e410 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
2e420 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2e430 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
2e440 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
2e450 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
2e460 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2e470 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
2e480 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
2e490 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2e4a0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2e4b0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
2e4c0 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
2e4d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
2e4e0 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
2e4f0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  in2 */.  VdbeFra
2e500 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66  me *pFrame;.  if
2e510 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
2e520 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
2e530 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
2e540 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
2e550 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2e560 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70  );.    pIn1 = &p
2e570 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
2e580 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >p1];.  }else{. 
2e590 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b     pIn1 = &aMem[
2e5a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20  pOp->p1];.  }.  
2e5b0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2e5c0 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71  id(pIn1) );.  sq
2e5d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2e5e0 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
2e5f0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2e600 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
2e610 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
2e620 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70  y(pIn2);.  if( p
2e630 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75  In1->u.i<pIn2->u
2e640 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  .i){.    pIn1->u
2e650 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  .i = pIn2->u.i;.
2e660 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2e670 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2e680 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
2e690 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
2e6a0 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33  : IfPos P1 P2 P3
2e6b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2e6c0 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65  : if r[P1]>0 the
2e6d0 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74  n r[P1]-=P3, got
2e6e0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2e6f0 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2e700 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
2e710 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2e720 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2e730 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2e740 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d  subtract P3 from
2e750 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
2e760 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20   P1 and jump to 
2e770 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
2e780 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
2e790 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2e7a0 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68   less than 1, th
2e7b0 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
2e7c0 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  is unchanged and
2e7d0 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20   control passes 
2e7e0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2e7f0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2e800 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2e810 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2e820 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2e830 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2e840 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e850 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2e860 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2e870 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75  chTaken( pIn1->u
2e880 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i>0, 2);.  if( 
2e890 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
2e8a0 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20     pIn1->u.i -= 
2e8b0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74  pOp->p3;.    got
2e8c0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2e8d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2e8e0 20 4f 70 63 6f 64 65 3a 20 53 65 74 49 66 4e 6f   Opcode: SetIfNo
2e8f0 74 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20  tPos P1 P2 P3 * 
2e900 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2e910 66 20 72 5b 50 31 5d 3c 3d 30 20 74 68 65 6e 20  f r[P1]<=0 then 
2e920 72 5b 50 32 5d 3d 50 33 0a 2a 2a 0a 2a 2a 20 52  r[P2]=P3.**.** R
2e930 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2e940 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2e950 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  er..** If the va
2e960 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2e970 50 31 20 69 73 20 6e 6f 74 20 70 6f 73 69 74 69  P1 is not positi
2e980 76 65 20 28 69 66 20 69 74 20 69 73 20 6c 65 73  ve (if it is les
2e990 73 20 74 68 61 6e 20 31 29 20 74 68 65 6e 0a 2a  s than 1) then.*
2e9a0 2a 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  * set the value 
2e9b0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
2e9c0 6f 20 62 65 20 74 68 65 20 69 6e 74 65 67 65 72  o be the integer
2e9d0 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
2e9e0 53 65 74 49 66 4e 6f 74 50 6f 73 3a 20 7b 20 20  SetIfNotPos: {  
2e9f0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2ea00 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2ea10 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2ea20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2ea30 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2ea40 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d   if( pIn1->u.i<=
2ea50 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  0 ){.    pOut = 
2ea60 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2ea70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 70 4f 75 74  , pOp);.    pOut
2ea80 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 3b  ->u.i = pOp->p3;
2ea90 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2eaa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
2eab0 74 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  tZero P1 P2 P3 *
2eac0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ead0 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e  if r[P1]!=0 then
2eae0 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
2eaf0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
2eb00 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2eb10 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2eb20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
2eb30 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2eb40 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f  .** initially no
2eb50 6e 7a 65 72 6f 2c 20 74 68 65 6e 20 73 75 62 74  nzero, then subt
2eb60 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65  ract P3 from the
2eb70 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2eb80 65 72 20 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d  er P1 and.** jum
2eb90 70 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67  p to P2.  If reg
2eba0 69 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74  ister P1 is init
2ebb0 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76  ially zero, leav
2ebc0 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a  e it unchanged.*
2ebd0 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  * and fall throu
2ebe0 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  gh..*/.case OP_I
2ebf0 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20  fNotZero: {     
2ec00 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2ec10 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2ec20 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2ec30 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2ec40 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2ec50 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2ec60 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
2ec70 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20    if( pIn1->u.i 
2ec80 29 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e  ){.     pIn1->u.
2ec90 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i -= pOp->p3;.  
2eca0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2ecb0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2ecc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2ecd0 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
2ece0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2ecf0 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
2ed00 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
2ed10 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2ed20 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
2ed30 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
2ed40 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
2ed50 69 73 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e  ister P1.** then
2ed60 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   jump to P2 if t
2ed70 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
2ed80 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f  exactly zero..*/
2ed90 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d  .case OP_DecrJum
2eda0 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a  pZero: {      /*
2edb0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2edc0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2edd0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2ede0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2edf0 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  _Int );.  pIn1->
2ee00 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61  u.i--;.  VdbeBra
2ee10 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2ee20 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
2ee30 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20   pIn1->u.i==0 ) 
2ee40 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2ee50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
2ee60 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72   Opcode: JumpZer
2ee70 6f 49 6e 63 72 20 50 31 20 50 32 20 2a 20 2a 20  oIncr P1 P2 * * 
2ee80 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2ee90 66 20 28 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29  f (r[P1]++)==0 )
2eea0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
2eeb0 68 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d  he register P1 m
2eec0 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
2eed0 6e 74 65 67 65 72 2e 20 20 49 66 20 72 65 67 69  nteger.  If regi
2eee0 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69  ster P1 is initi
2eef0 61 6c 6c 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68  ally.** zero, th
2ef00 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2ef10 49 6e 63 72 65 6d 65 6e 74 20 72 65 67 69 73 74  Increment regist
2ef20 65 72 20 50 31 20 72 65 67 61 72 64 6c 65 73 73  er P1 regardless
2ef30 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 0a 2a   of whether or.*
2ef40 2a 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69  * not the jump i
2ef50 73 20 74 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65  s taken..*/.case
2ef60 20 4f 50 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72   OP_JumpZeroIncr
2ef70 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2ef80 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2ef90 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2efa0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2efb0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2efc0 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2efd0 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2efe0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
2eff0 70 49 6e 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20  pIn1->u.i++)==0 
2f000 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2f010 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2f020 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
2f030 70 30 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  p0 * P2 P3 P4 P5
2f040 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
2f050 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
2f060 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
2f070 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
2f080 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2f090 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
2f0a0 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
2f0b0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
2f0c0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2f0d0 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a  to the FuncDef.*
2f0e0 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  * structure that
2f0f0 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
2f100 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
2f110 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20  er P3 is the.** 
2f120 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
2f130 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
2f140 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
2f150 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
2f160 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
2f170 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sors..*/./* Opco
2f180 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
2f190 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2f1a0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
2f1b0 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
2f1c0 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
2f1d0 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2f1e0 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
2f1f0 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
2f200 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
2f210 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
2f220 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2f230 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a  qlite3_context.*
2f240 2a 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73  * object that is
2f250 20 75 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65   used to run the
2f260 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69   function.  Regi
2f270 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73  ster P3 is.** as
2f280 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2f290 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
2f2a0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
2f2b0 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
2f2c0 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
2f2d0 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a  uccessors..**.**
2f2e0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
2f2f0 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20  initially coded 
2f300 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20  as OP_AggStep0. 
2f310 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61   On first evalua
2f320 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e  tion,.** the Fun
2f330 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50  cDef stored in P
2f340 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69  4 is converted i
2f350 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63  nto an sqlite3_c
2f360 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68  ontext and.** th
2f370 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e  e opcode is chan
2f380 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61  ged.  In this wa
2f390 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  y, the initializ
2f3a0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2f3b0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2f3c0 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63  only happens onc
2f3d0 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e  e, instead of on
2f3e0 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68   each call to th
2f3f0 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69  e.** step functi
2f400 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  on..*/.case OP_A
2f410 67 67 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74  ggStep0: {.  int
2f420 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   n;.  sqlite3_co
2f430 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20  ntext *pCtx;..  
2f440 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2f450 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
2f460 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  );.  n = pOp->p5
2f470 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2f480 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2f490 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
2f4a0 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
2f4b0 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
2f4c0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
2f4d0 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  2+n<=(p->nMem-p-
2f4e0 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
2f4f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f500 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
2f510 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
2f520 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69  );.  pCtx = sqli
2f530 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
2f540 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29  b, sizeof(*pCtx)
2f550 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28   + (n-1)*sizeof(
2f560 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29  sqlite3_value*))
2f570 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20  ;.  if( pCtx==0 
2f580 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
2f590 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b   pCtx->pMem = 0;
2f5a0 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d  .  pCtx->pFunc =
2f5b0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
2f5c0 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69    pCtx->iOp = (i
2f5d0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
2f5e0 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20    pCtx->pVdbe = 
2f5f0 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20  p;.  pCtx->argc 
2f600 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79  = n;.  pOp->p4ty
2f610 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b  pe = P4_FUNCCTX;
2f620 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20  .  pOp->p4.pCtx 
2f630 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f  = pCtx;.  pOp->o
2f640 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74  pcode = OP_AggSt
2f650 65 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ep;.  /* Fall th
2f660 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67  rough into OP_Ag
2f670 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20  gStep */.}.case 
2f680 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
2f690 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33  int i;.  sqlite3
2f6a0 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
2f6b0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
2f6c0 65 6d 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  em t;..  assert(
2f6d0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2f6e0 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
2f6f0 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
2f700 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65  x;.  pMem = &aMe
2f710 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f  m[pOp->p3];..  /
2f720 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69  * If this functi
2f730 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20  on is inside of 
2f740 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72  a trigger, the r
2f750 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e  egister array in
2f760 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67   aMem[].  ** mig
2f770 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f  ht change from o
2f780 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f  ne evaluation to
2f790 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20   the next.  The 
2f7a0 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  next block of co
2f7b0 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74  de.  ** checks t
2f7c0 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67  o see if the reg
2f7d0 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20  ister array has 
2f7e0 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20  changed, and if 
2f7f0 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69  so it.  ** reini
2f800 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c  tializes the rel
2f810 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74  avant parts of t
2f820 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  he sqlite3_conte
2f830 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69  xt object */.  i
2f840 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d  f( pCtx->pMem !=
2f850 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74   pMem ){.    pCt
2f860 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a  x->pMem = pMem;.
2f870 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
2f880 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
2f890 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
2f8a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2f8b0 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  +i];.  }..#ifdef
2f8c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2f8d0 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d  for(i=0; i<pCtx-
2f8e0 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  >argc; i++){.   
2f8f0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2f900 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69  lid(pCtx->argv[i
2f910 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
2f920 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
2f930 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  +i, pCtx->argv[i
2f940 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ]);.  }.#endif..
2f950 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73    pMem->n++;.  s
2f960 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69  qlite3VdbeMemIni
2f970 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75  t(&t, db, MEM_Nu
2f980 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75  ll);.  pCtx->pOu
2f990 74 20 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e  t = &t;.  pCtx->
2f9a0 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b  fErrorOrAux = 0;
2f9b0 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  .  pCtx->skipFla
2f9c0 67 20 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e  g = 0;.  (pCtx->
2f9d0 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 70 43  pFunc->xStep)(pC
2f9e0 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43  tx,pCtx->argc,pC
2f9f0 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d  tx->argv); /* IM
2fa00 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
2fa10 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e   */.  if( pCtx->
2fa20 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20  fErrorOrAux ){. 
2fa30 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45     if( pCtx->isE
2fa40 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71  rror ){.      sq
2fa50 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
2fa60 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
2fa70 76 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b  value_text(&t));
2fa80 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78  .      rc = pCtx
2fa90 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d  ->isError;.    }
2faa0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2fab0 4d 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a  MemRelease(&t);.
2fac0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2fad0 65 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45  ert( t.flags==ME
2fae0 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20  M_Null );.  }.  
2faf0 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  if( pCtx->skipFl
2fb00 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ag ){.    assert
2fb10 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
2fb20 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
2fb30 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e      i = pOp[-1].
2fb40 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20  p1;.    if( i ) 
2fb50 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2fb60 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
2fb70 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   1);.  }.  break
2fb80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2fb90 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
2fba0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2fbb0 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e  s: accum=r[P1] N
2fbc0 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  =P2.**.** Execut
2fbd0 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
2fbe0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2fbf0 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
2fc00 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
2fc10 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
2fc20 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2fc30 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
2fc40 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
2fc50 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
2fc60 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
2fc70 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
2fc80 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
2fc90 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2fca0 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
2fcb0 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
2fcc0 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
2fcd0 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
2fce0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
2fcf0 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
2fd00 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
2fd10 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
2fd20 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
2fd30 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
2fd40 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
2fd50 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
2fd60 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
2fd70 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
2fd80 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
2fd90 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
2fda0 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
2fdb0 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
2fdc0 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
2fdd0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2fde0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2fdf0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
2fe00 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2fe10 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  r) );.  pMem = &
2fe20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2fe30 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
2fe40 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
2fe50 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
2fe60 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2fe70 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
2fe80 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
2fe90 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
2fea0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2feb0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
2fec0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2fed0 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
2fee0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2fef0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
2ff00 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
2ff10 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2ff20 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
2ff30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2ff40 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
2ff50 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2ff60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2ff70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ff80 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
2ff90 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
2ffa0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2ffb0 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
2ffc0 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
2ffd0 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
2ffe0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2fff0 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
30000 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
30010 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
30020 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
30030 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41  , FULL,.** RESTA
30040 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e  RT, or TRUNCATE.
30050 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
30060 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
30070 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
30080 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
30090 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
300a0 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
300b0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
300c0 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
300d0 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
300e0 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
300f0 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
30100 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
30110 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
30120 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
30130 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
30140 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
30150 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
30160 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
30170 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
30180 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
30190 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
301a0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
301b0 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
301c0 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
301d0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
301e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
301f0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
30200 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
30210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30220 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
30230 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
30240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30250 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
30260 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
30270 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
30280 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
30290 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
302a0 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
302b0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
302c0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
302d0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
302e0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
302f0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
30300 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
30310 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
30320 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
30330 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c  ESTART.       ||
30340 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
30350 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
30360 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d  CATE.  );.  rc =
30370 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
30380 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
30390 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
303a0 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
303b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
303c0 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  USY ){.    rc = 
303d0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
303e0 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
303f0 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
30400 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
30410 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
30420 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
30430 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
30440 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
30450 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
30460 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
30470 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
30480 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
30490 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
304a0 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
304b0 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  *.**.** Change t
304c0 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
304d0 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
304e0 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
304f0 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
30500 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
30510 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
30520 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
30530 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
30540 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
30550 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
30560 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
30570 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
30580 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
30590 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
305a0 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
305b0 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
305c0 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
305d0 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
305e0 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
305f0 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
30600 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
30610 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
30620 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
30630 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
30640 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
30650 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
30660 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65  * out2 */.  Btre
30670 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
30680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
30690 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a  tree to change j
306a0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a  ournal mode of *
306b0 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  /.  Pager *pPage
306c0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
306d0 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73      /* Pager ass
306e0 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74  ociated with pBt
306f0 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20   */.  int eNew; 
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30710 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75        /* New jou
30720 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  rnal mode */.  i
30730 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20  nt eOld;        
30740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30750 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61  * The old journa
30760 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65  l mode */.#ifnde
30770 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
30780 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  L.  const char *
30790 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20  zFilename;      
307a0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64      /* Name of d
307b0 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
307c0 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69   pPager */.#endi
307d0 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  f..  pOut = out2
307e0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
307f0 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70  p);.  eNew = pOp
30800 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
30810 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
30820 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a  NALMODE_DELETE .
30830 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
30840 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
30850 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20  E_TRUNCATE .    
30860 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
30870 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
30880 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c  RSIST .       ||
30890 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
308a0 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20  RNALMODE_OFF.   
308b0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
308c0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
308d0 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20  EMORY.       || 
308e0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
308f0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20  NALMODE_WAL.    
30900 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
30910 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
30920 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ERY.  );.  asser
30930 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
30940 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
30950 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
30960 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
30970 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
30980 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
30990 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
309a0 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
309b0 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74  ;.  eOld = sqlit
309c0 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61  e3PagerGetJourna
309d0 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20  lMode(pPager);. 
309e0 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
309f0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
30a00 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  RY ) eNew = eOld
30a10 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  ;.  if( !sqlite3
30a20 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a  PagerOkToChangeJ
30a30 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
30a40 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  r) ) eNew = eOld
30a50 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
30a60 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69  E_OMIT_WAL.  zFi
30a70 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  lename = sqlite3
30a80 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50  PagerFilename(pP
30a90 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20  ager, 1);..  /* 
30aa0 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
30ab0 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
30ac0 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
30ad0 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
30ae0 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
30af0 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
30b00 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
30b10 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
30b20 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
30b30 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
30b40 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
30b50 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  & (sqlite3Strlen
30b60 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30  30(zFilename)==0
30b70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
30b80 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
30b90 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
30ba0 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
30bb0 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
30bc0 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
30bd0 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
30be0 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
30bf0 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
30c00 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
30c10 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
30c20 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
30c30 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
30c40 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
30c50 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
30c60 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56  Commit || db->nV
30c70 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20  dbeRead>1 ){.   
30c80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
30c90 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69  RROR;.      sqli
30ca0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
30cb0 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
30cc0 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
30cd0 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
30ce0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
30cf0 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
30d00 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
30d10 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
30d20 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
30d30 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61     );.      brea
30d40 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a  k;.    }else{. .
30d50 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d        if( eOld==
30d60 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
30d70 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  E_WAL ){.       
30d80 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57   /* If leaving W
30d90 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74  AL mode, close t
30da0 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20  he log file. If 
30db0 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20  successful, the 
30dc0 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  call.        ** 
30dd0 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  to PagerCloseWal
30de0 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61  () checkpoints a
30df0 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77  nd deletes the w
30e00 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a  rite-ahead-log .
30e10 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
30e20 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   An EXCLUSIVE lo
30e30 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  ck may still be 
30e40 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61  held on the data
30e50 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20  base file .     
30e60 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75     ** after a su
30e70 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e  ccessful return.
30e80 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20   .        */.   
30e90 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
30ea0 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70  3PagerCloseWal(p
30eb0 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  Pager);.        
30ec0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
30ed0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
30ee0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
30ef0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
30f00 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
30f10 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
30f20 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
30f30 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
30f40 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
30f50 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
30f60 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
30f70 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
30f80 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
30f90 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
30fa0 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
30fb0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
30fc0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
30fd0 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
30fe0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
30ff0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
31000 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
31010 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
31020 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
31030 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
31040 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
31050 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
31060 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
31070 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
31080 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
31090 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
310a0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
310b0 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
310c0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
310d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
310e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
310f0 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
31100 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
31110 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
31120 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
31130 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
31140 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
31150 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
31160 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  /..  if( rc ){. 
31170 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
31180 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c    }.  eNew = sql
31190 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
311a0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
311b0 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e  eNew);..  pOut->
311c0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
311d0 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
311e0 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
311f0 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
31200 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
31210 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
31220 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
31230 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
31240 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
31250 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
31260 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
31270 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
31280 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ng);.  break;.};
31290 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
312a0 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
312b0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
312c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
312d0 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
312e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
312f0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
31300 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
31310 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
31320 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
31330 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
31340 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
31350 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
31360 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
31370 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
31380 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
31390 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
313a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
313b0 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
313c0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   {.  assert( p->
313d0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
313e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
313f0 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
31400 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
31410 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
31420 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
31430 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
31440 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
31450 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
31460 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
31470 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
31480 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
31490 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
314a0 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
314b0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
314c0 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
314d0 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
314e0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
314f0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
31500 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
31510 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
31520 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
31530 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
31540 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
31550 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
31560 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
31570 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
31580 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
31590 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
315a0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
315b0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
315c0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
315d0 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
315e0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
315f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
31600 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
31610 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  t);.  VdbeBranch
31620 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
31630 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20  _DONE,2);.  if( 
31640 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
31650 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
31660 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20  TE_OK;.    goto 
31670 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
31680 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
31690 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78  f../* Opcode: Ex
316a0 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  pire P1 * * * *.
316b0 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63  **.** Cause prec
316c0 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
316d0 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57  ts to expire.  W
316e0 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73  hen an expired s
316f0 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65  tatement.** is e
31700 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71  xecuted using sq
31710 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20  lite3_step() it 
31720 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f  will either auto
31730 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70  matically.** rep
31740 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69  repare itself (i
31750 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61  f it was origina
31760 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e  lly created usin
31770 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
31780 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74  e_v2()).** or it
31790 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
317a0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a  SQLITE_SCHEMA..*
317b0 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
317c0 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
317d0 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
317e0 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
317f0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
31800 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
31810 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
31820 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  g statement is e
31830 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  xpired..*/.case 
31840 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
31850 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
31860 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
31870 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
31880 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
31890 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
318a0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
318b0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
318c0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
318d0 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
318e0 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
318f0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
31900 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f  psis: iDb=P1 roo
31910 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a  t=P2 write=P3.**
31920 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
31930 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
31940 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
31950 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
31960 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
31970 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
31980 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
31990 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
319a0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
319b0 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
319c0 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
319d0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
319e0 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
319f0 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
31a00 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
31a10 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
31a20 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
31a30 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
31a40 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
31a50 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
31a60 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
31a70 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
31a80 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
31a90 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
31aa0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
31ab0 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
31ac0 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
31ad0 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
31ae0 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
31af0 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
31b00 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
31b10 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
31b20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
31b30 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
31b40 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
31b50 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
31b60 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
31b70 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
31b80 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
31b90 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
31ba0 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
31bb0 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
31bc0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
31bd0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20  >btreeMask, p1) 
31be0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
31bf0 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
31c00 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
31c10 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
31c20 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c  te3BtreeLockTabl
31c30 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  e(db->aDb[p1].pB
31c40 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72  t, pOp->p2, isWr
31c50 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66  iteLock);.    if
31c60 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c  ( (rc&0xFF)==SQL
31c70 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
31c80 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
31c90 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
31ca0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
31cb0 45 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61  Error(p, "databa
31cc0 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
31cd0 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
31ce0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
31cf0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31d00 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
31d10 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ACHE */..#ifndef
31d20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31d30 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
31d40 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20  ode: VBegin * * 
31d50 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
31d60 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72  may be a pointer
31d70 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76   to an sqlite3_v
31d80 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49  tab structure. I
31d90 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a  f so, call the .
31da0 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  ** xBegin method
31db0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
31dc0 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65  .**.** Also, whe
31dd0 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69  ther or not P4 i
31de0 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61  s set, check tha
31df0 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65  t this is not be
31e00 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a  ing called from.
31e10 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  ** within a call
31e20 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61  back to a virtua
31e30 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20  l table xSync() 
31e40 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73  method. If it is
31e50 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63  , the error.** c
31e60 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ode will be set 
31e70 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
31e80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
31e90 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20  gin: {.  VTable 
31ea0 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20  *pVTab;.  pVTab 
31eb0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
31ec0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
31ed0 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54  tabBegin(db, pVT
31ee0 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62  ab);.  if( pVTab
31ef0 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d   ) sqlite3VtabIm
31f00 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
31f10 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62  Tab->pVtab);.  b
31f20 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
31f30 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
31f40 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
31f50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31f60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
31f70 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
31f80 74 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  te P1 P2 * * *.*
31f90 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67  *.** P2 is a reg
31fa0 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
31fb0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
31fc0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
31fd0 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e  database .** P1.
31fe0 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
31ff0 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  e method for tha
32000 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
32010 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
32020 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
32030 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
32040 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
32050 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
32060 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
32070 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  b;  /* Name of t
32080 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
32090 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73   */..  memset(&s
320a0 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
320b0 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62  Mem));.  sMem.db
320c0 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61   = db;.  /* Beca
320d0 75 73 65 20 50 32 20 69 73 20 61 6c 77 61 79 73  use P2 is always
320e0 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67   a static string
320f0 2c 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  , it is impossib
32100 6c 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  le for the.  ** 
32110 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f  sqlite3VdbeMemCo
32120 70 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a  py() to fail */.
32130 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
32140 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26  pOp->p2].flags &
32150 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a   MEM_Str)!=0 );.
32160 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
32170 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26  pOp->p2].flags &
32180 20 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20   MEM_Static)!=0 
32190 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
321a0 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d  3VdbeMemCopy(&sM
321b0 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  em, &aMem[pOp->p
321c0 32 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  2]);.  assert( r
321d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
321e0 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20    zTab = (const 
321f0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
32200 6c 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b  lue_text(&sMem);
32210 0a 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20  .  assert( zTab 
32220 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
32230 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61  led );.  if( zTa
32240 62 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  b ){.    rc = sq
32250 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
32260 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
32270 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d   zTab, &p->zErrM
32280 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  sg);.  }.  sqlit
32290 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
322a0 28 26 73 4d 65 6d 29 3b 0a 20 20 62 72 65 61 6b  (&sMem);.  break
322b0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
322c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
322d0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
322e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
322f0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
32300 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
32310 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
32320 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
32330 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
32340 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
32350 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
32360 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
32370 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
32380 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
32390 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44  roy: {.  db->nVD
323a0 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d  estroy++;.  rc =
323b0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
323c0 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
323d0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
323e0 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79  .  db->nVDestroy
323f0 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  --;.  break;.}.#
32400 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
32410 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
32420 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
32430 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
32440 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
32450 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50  : VOpen P1 * * P
32460 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
32470 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
32480 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
32490 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
324a0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
324b0 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
324c0 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  r number.  This 
324d0 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63  opcode opens a c
324e0 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72  ursor to the vir
324f0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  tual.** table an
32500 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75  d stores that cu
32510 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63  rsor in P1..*/.c
32520 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a  ase OP_VOpen: {.
32530 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
32540 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
32550 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
32560 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
32570 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
32580 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
32590 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
325a0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
325b0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75  sReader );.  pCu
325c0 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75  r = 0;.  pVtabCu
325d0 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  rsor = 0;.  pVta
325e0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
325f0 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20  b->pVtab;.  if( 
32600 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45  pVtab==0 || NEVE
32610 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  R(pVtab->pModule
32620 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  ==0) ){.    rc =
32630 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
32640 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
32650 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
32660 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20  ->pModule;.  rc 
32670 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e  = pModule->xOpen
32680 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75  (pVtab, &pVtabCu
32690 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  rsor);.  sqlite3
326a0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
326b0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
326c0 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
326d0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
326e0 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
326f0 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
32700 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
32710 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
32720 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
32730 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63  nitialize vdbe c
32740 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
32750 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
32760 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
32770 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
32780 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
32790 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
327a0 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
327b0 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 56  Cursor;.      pV
327c0 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 20  tab->nRef++;.   
327d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
327e0 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63  sert( db->malloc
327f0 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
32800 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
32810 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
32820 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
32830 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
32840 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
32850 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
32860 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
32870 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32880 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
32890 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
328a0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
328b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61  * Synopsis: ipla
328c0 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50  n=r[P3] zplan='P
328d0 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  4'.**.** P1 is a
328e0 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
328f0 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
32900 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
32910 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
32920 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
32930 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
32940 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
32950 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
32960 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
32970 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
32980 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
32990 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
329a0 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
329b0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
329c0 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
329d0 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
329e0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
329f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
32a00 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
32a10 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
32a20 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
32a30 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
32a40 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
32a50 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
32a60 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
32a70 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
32a80 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
32a90 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
32aa0 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
32ab0 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
32ac0 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
32ad0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
32ae0 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
32af0 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
32b00 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
32b10 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
32b20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
32b30 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
32b40 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
32b50 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
32b60 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
32b70 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
32b80 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
32b90 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
32ba0 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
32bb0 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
32bc0 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
32bd0 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
32be0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
32bf0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
32c00 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
32c10 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
32c20 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
32c30 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
32c40 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
32c50 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
32c60 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
32c70 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
32c80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
32c90 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
32ca0 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
32cb0 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
32cc0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
32cd0 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70  3];.  pArgc = &p
32ce0 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72  Query[1];.  pCur
32cf0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
32d00 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
32d10 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72  memIsValid(pQuer
32d20 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  y) );.  REGISTER
32d30 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
32d40 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
32d50 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
32d60 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43  rsor );.  pVtabC
32d70 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56  ursor = pCur->pV
32d80 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74  tabCursor;.  pVt
32d90 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  ab = pVtabCursor
32da0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
32db0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
32dc0 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
32dd0 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
32de0 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
32df0 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
32e00 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
32e10 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
32e20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
32e30 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
32e40 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
32e50 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
32e60 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
32e70 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
32e80 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
32e90 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  */.  res = 0;.  
32ea0 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
32eb0 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69  ;.  for(i = 0; i
32ec0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
32ed0 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
32ee0 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72  gc[i+1];.  }.  r
32ef0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
32f00 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72  lter(pVtabCursor
32f10 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70  , iQuery, pOp->p
32f20 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  4.z, nArg, apArg
32f30 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
32f40 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
32f50 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
32f60 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
32f70 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
32f80 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
32f90 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 43 75 72 2d  or);.  }.  pCur-
32fa0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
32fb0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
32fc0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
32fd0 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
32fe0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
32ff0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
33000 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
33010 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
33020 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
33030 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
33040 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31  code: VColumn P1
33050 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
33060 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63  nopsis: r[P3]=vc
33070 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20  olumn(P2).**.** 
33080 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
33090 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
330a0 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
330b0 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
330c0 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
330d0 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
330e0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
330f0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
33100 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
33110 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
33120 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
33130 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
33140 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
33150 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
33160 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
33170 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
33180 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
33190 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
331a0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
331b0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
331c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
331d0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
331e0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
331f0 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  or) );.  pDest =
33200 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
33210 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
33220 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
33230 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
33240 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
33250 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
33260 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61  pDest);.    brea
33270 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
33280 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
33290 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
332a0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
332b0 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
332c0 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
332d0 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73  n );.  memset(&s
332e0 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65  Context, 0, size
332f0 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20  of(sContext));. 
33300 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d   sContext.pOut =
33310 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65 74   pDest;.  MemSet
33320 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
33330 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20  MEM_Null);.  rc 
33340 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  = pModule->xColu
33350 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  mn(pCur->pVtabCu
33360 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c  rsor, &sContext,
33370 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c   pOp->p2);.  sql
33380 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
33390 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
333a0 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69    if( sContext.i
333b0 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63  sError ){.    rc
333c0 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72   = sContext.isEr
333d0 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
333e0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
333f0 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f  ding(pDest, enco
33400 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45  ding);.  REGISTE
33410 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
33420 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54   pDest);.  UPDAT
33430 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
33440 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71  Dest);..  if( sq
33450 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
33460 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ig(pDest) ){.   
33470 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
33480 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
33490 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
334a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
334b0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
334c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
334d0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
334e0 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
334f0 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
33500 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
33510 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
33520 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
33530 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
33540 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
33550 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
33560 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
33570 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
33580 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
33590 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
335a0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
335b0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
335c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
335d0 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
335e0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
335f0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
33600 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
33610 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
33620 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
33630 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
33640 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
33650 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
33660 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
33670 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
33680 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
33690 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
336a0 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
336b0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
336c0 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
336d0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
336e0 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
336f0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
33700 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
33710 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
33720 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
33730 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
33740 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
33750 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
33760 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
33770 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
33780 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
33790 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
337a0 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
337b0 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
337c0 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
337d0 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
337e0 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
337f0 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
33800 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
33810 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
33820 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
33830 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
33840 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
33850 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
33860 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
33870 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
33880 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74  >xNext(pCur->pVt
33890 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
338a0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
338b0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
338c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
338d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
338e0 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
338f0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
33900 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  );.  }.  VdbeBra
33910 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29  nchTaken(!res,2)
33920 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ;.  if( !res ){.
33930 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
33940 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
33950 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20   P2 */.    goto 
33960 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
33970 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
33980 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  pt;.  }.  goto c
33990 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
339a0 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  pt;.}.#endif /* 
339b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
339c0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
339d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
339e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
339f0 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
33a00 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
33a10 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
33a20 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
33a30 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
33a40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
33a50 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
33a60 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
33a70 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
33a80 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
33a90 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
33aa0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
33ab0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
33ac0 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
33ad0 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
33ae0 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
33af0 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
33b00 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
33b10 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
33b20 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
33b30 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
33b40 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
33b50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
33b60 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
33b70 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
33b80 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
33b90 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
33ba0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
33bb0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47  Only==0 );.  REG
33bc0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
33bd0 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61  >p1, pName);.  a
33be0 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c  ssert( pName->fl
33bf0 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b  ags & MEM_Str );
33c00 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
33c10 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
33c20 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61  UTF8 );.  testca
33c30 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
33c40 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
33c50 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
33c60 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
33c70 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63  _UTF16LE );.  rc
33c80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
33c90 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61  angeEncoding(pNa
33ca0 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  me, SQLITE_UTF8)
33cb0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
33cc0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
33cd0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
33ce0 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
33cf0 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20   pName->z);.    
33d00 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
33d10 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
33d20 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
33d30 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
33d40 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
33d50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33d60 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
33d70 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
33d80 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
33d90 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61  .** Synopsis: da
33da0 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a  ta=r[P3@P2].**.*
33db0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
33dc0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
33dd0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
33de0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
33df0 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
33e00 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
33e10 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
33e20 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
33e30 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
33e40 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
33e50 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
33e60 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
33e70 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
33e80 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
33e90 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
33ea0 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
33eb0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
33ec0 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
33ed0 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
33ee0 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
33ef0 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
33f00 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
33f10 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
33f20 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
33f30 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
33f40 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
33f50 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
33f60 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
33f70 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
33f80 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
33f90 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
33fa0 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
33fb0 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
33fc0 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
33fd0 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
33fe0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
33ff0 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
34000 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
34010 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
34020 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
34030 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
34040 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
34050 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
34060 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
34070 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
34080 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
34090 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
340a0 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
340b0 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
340c0 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
340d0 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
340e0 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
340f0 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
34100 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
34110 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
34120 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
34130 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
34140 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
34150 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
34160 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
34170 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
34180 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
34190 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
341a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
341b0 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
341c0 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a  ust inserted..**
341d0 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65 72  .** P5 is the er
341e0 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f  ror actions (OE_
341f0 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c  Replace, OE_Fail
34200 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63  , OE_Ignore, etc
34210 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e  ) to.** apply in
34220 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 63   the case of a c
34230 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72  onstraint failur
34240 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f  e on an insert o
34250 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73  r update..*/.cas
34260 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a  e OP_VUpdate: {.
34270 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
34280 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
34290 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
342a0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
342b0 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
342c0 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
342d0 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
342e0 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
342f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
34300 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  =1        || pOp
34310 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20  ->p5==OE_Fail   
34320 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
34330 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20  ollback .       
34340 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41  || pOp->p5==OE_A
34350 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  bort || pOp->p5=
34360 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f  =OE_Ignore || pO
34370 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
34380 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e.  );.  assert(
34390 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
343a0 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  );.  pVtab = pOp
343b0 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
343c0 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d  b;.  if( pVtab==
343d0 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62  0 || NEVER(pVtab
343e0 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b  ->pModule==0) ){
343f0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
34400 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 62 72 65  _LOCKED;.    bre
34410 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c  ak;.  }.  pModul
34420 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
34430 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
34440 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
34450 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
34460 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
34470 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
34480 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
34490 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
344a0 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
344b0 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
344c0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
344d0 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
344e0 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
344f0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
34500 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
34510 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
34520 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
34530 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
34540 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
34550 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
34560 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
34570 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
34580 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
34590 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
345a0 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
345b0 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
345c0 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
345d0 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
345e0 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69  nflict;.    sqli
345f0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
34600 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
34610 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
34620 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
34630 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
34640 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
34650 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
34660 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
34670 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
34680 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
34690 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
346a0 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
346b0 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
346c0 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
346d0 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
346e0 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
346f0 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
34700 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
34710 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
34720 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
34730 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
34740 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
34750 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
34760 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
34770 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
34780 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
34790 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
347a0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
347b0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
347c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
347d0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
347e0 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
347f0 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
34800 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
34810 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
34820 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
34830 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
34840 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
34850 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
34860 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
34870 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
34880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
34890 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
348a0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
348b0 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
348c0 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
348d0 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62  LastPage(db->aDb
348e0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a  [pOp->p1].pBt);.
348f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
34900 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  f...#ifndef  SQL
34910 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
34920 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
34930 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32  : MaxPgcnt P1 P2
34940 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72   P3 * *.**.** Tr
34950 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78  y to set the max
34960 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
34970 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
34980 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
34990 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65  P3..** Do not le
349a0 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  t the maximum pa
349b0 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65  ge count fall be
349c0 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20  low the current 
349d0 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a  page count and.*
349e0 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20  * do not change 
349f0 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
34a00 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20   count value if 
34a10 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f  P3==0..**.** Sto
34a20 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  re the maximum p
34a30 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20  age count after 
34a40 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65  the change in re
34a50 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
34a60 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20  se OP_MaxPgcnt: 
34a70 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
34a80 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  out2 */.  unsign
34a90 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20  ed int newMax;. 
34aa0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
34ab0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
34ac0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
34ad0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
34ae0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e  Op->p1].pBt;.  n
34af0 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28  ewMax = 0;.  if(
34b00 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
34b10 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33  newMax = sqlite3
34b20 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42  BtreeLastPage(pB
34b30 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d  t);.    if( newM
34b40 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70  ax < (unsigned)p
34b50 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20  Op->p3 ) newMax 
34b60 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  = (unsigned)pOp-
34b70 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >p3;.  }.  pOut-
34b80 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
34b90 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28  reeMaxPageCount(
34ba0 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20  pBt, newMax);.  
34bb0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
34bc0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69  ../* Opcode: Ini
34bd0 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  t * P2 * P4 *.**
34be0 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61 72   Synopsis:  Star
34bf0 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72  t at P2.**.** Pr
34c00 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61  ograms contain a
34c10 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65   single instance
34c20 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
34c30 61 73 20 74 68 65 20 76 65 72 79 20 66 69 72 73  as the very firs
34c40 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  t.** opcode..**.
34c50 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73  ** If tracing is
34c60 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65   enabled (by the
34c70 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
34c80 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65  ) interface, the
34c90 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73  n.** the UTF-8 s
34ca0 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20  tring contained 
34cb0 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64  in P4 is emitted
34cc0 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61   on the trace ca
34cd0 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66  llback..** Or if
34ce0 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73   P4 is blank, us
34cf0 65 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 74  e the string ret
34d00 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
34d10 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  _sql()..**.** If
34d20 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
34d30 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
34d40 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
34d50 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20   OP_Init: {     
34d60 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
34d70 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a    char *zTrace;.
34d80 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 23 69 66 6e    char *z;..#ifn
34d90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
34da0 54 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e  TRACE.  if( db->
34db0 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d  xTrace.   && !p-
34dc0 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26  >doingRerun.   &
34dd0 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
34de0 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
34df0 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
34e00 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73  0.  ){.    z = s
34e10 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64  qlite3VdbeExpand
34e20 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a  Sql(p, zTrace);.
34e30 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
34e40 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29  b->pTraceArg, z)
34e50 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
34e60 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a  ree(db, z);.  }.
34e70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
34e80 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20  E_FCNTL_TRACE.  
34e90 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
34ea0 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
34eb0 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66  : p->zSql);.  if
34ec0 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ( zTrace ){.    
34ed0 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69  int i;.    for(i
34ee0 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
34ef0 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44  ++){.      if( D
34f00 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
34f10 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20  eeMask, i)==0 ) 
34f20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
34f30 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
34f40 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62  trol(db, db->aDb
34f50 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54  [i].zName, SQLIT
34f60 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a  E_FCNTL_TRACE, z
34f70 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20  Trace);.    }.  
34f80 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
34f90 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41  TE_USE_FCNTL_TRA
34fa0 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  CE */.#ifdef SQL
34fb0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
34fc0 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
34fd0 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
34fe0 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
34ff0 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
35000 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
35010 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
35020 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
35030 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
35040 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
35050 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
35060 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
35070 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
35080 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 69 66  IT_TRACE */.  if
35090 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f  ( pOp->p2 ) goto
350a0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
350b0 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
350c0 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20  ode: Noop * * * 
350d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74  * *.**.** Do not
350e0 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74  hing.  This inst
350f0 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e  ruction is often
35100 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d   useful as a jum
35110 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e  p.** destination
35120 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  ..*/./*.** The m
35130 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63  agic Explain opc
35140 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73  ode are only ins
35150 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61  erted when expla
35160 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20  in==2 (which.** 
35170 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74  is to say when t
35180 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
35190 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20   PLAN syntax is 
351a0 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f  used.).** This o
351b0 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e  pcode records in
351c0 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
351d0 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49  he optimizer.  I
351e0 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20  t is the.** the 
351f0 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e  same as a no-op.
35200 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65    This opcodesne
35210 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61  ver appears in a
35220 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d   real VM program
35230 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20  ..*/.default: { 
35240 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73           /* This
35250 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f   is really OP_No
35260 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69  op and OP_Explai
35270 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
35280 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
35290 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  oop || pOp->opco
352a0 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
352b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
352c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
352d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
352e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
352f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
35310 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65  The cases of the
35320 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
35330 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e  t above this lin
35340 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20  e should all be 
35350 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36  indented.** by 6
35360 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68   spaces.  But th
35370 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70  e left-most 6 sp
35380 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72  aces have been r
35390 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76  emoved to improv
353a0 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69  e the.** readabi
353b0 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73  lity.  From this
353c0 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20   point on down, 
353d0 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e  the normal inden
353e0 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65  tation rules are
353f0 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a  .** restored..**
35400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20  ***********/.   
35450 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f   }..#ifdef VDBE_
35460 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20  PROFILE.    {.  
35470 20 20 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20      u64 endTime 
35480 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
35490 29 3b 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64  );.      if( end
354a0 54 69 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 72  Time>start ) pOr
354b0 69 67 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20  igOp->cycles += 
354c0 65 6e 64 54 69 6d 65 20 2d 20 73 74 61 72 74 3b  endTime - start;
354d0 0a 20 20 20 20 20 20 70 4f 72 69 67 4f 70 2d 3e  .      pOrigOp->
354e0 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e  cnt++;.    }.#en
354f0 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  dif..    /* The 
35500 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61  following code a
35510 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  dds nothing to t
35520 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69  he actual functi
35530 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f  onality.    ** o
35540 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20  f the program.  
35550 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20  It is only here 
35560 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20  for testing and 
35570 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a  debugging..    *
35580 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68  * On the other h
35590 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72  and, it does bur
355a0 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65  n CPU cycles eve
355b0 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a  ry time through.
355c0 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75      ** the evalu
355d0 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77  ator loop.  So w
355e0 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f  e can leave it o
355f0 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69  ut when NDEBUG i
35600 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
35610 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
35620 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
35630 3e 3d 26 61 4f 70 5b 2d 31 5d 20 26 26 20 70 4f  >=&aOp[-1] && pO
35640 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d  p<&aOp[p->nOp-1]
35650 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
35660 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
35670 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
35680 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b  ITE_VdbeTrace ){
35690 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 30  .      if( rc!=0
356a0 20 29 20 70 72 69 6e 74 66 28 22 72 63 3d 25 64   ) printf("rc=%d
356b0 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69  \n",rc);.      i
356c0 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c  f( pOrigOp->opfl
356d0 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
356e0 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  2) ){.        re
356f0 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 72 69  gisterTrace(pOri
35700 67 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  gOp->p2, &aMem[p
35710 4f 72 69 67 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  OrigOp->p2]);.  
35720 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
35730 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73  pOrigOp->opflags
35740 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b   & OPFLG_OUT3 ){
35750 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
35760 72 54 72 61 63 65 28 70 4f 72 69 67 4f 70 2d 3e  rTrace(pOrigOp->
35770 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 72 69 67 4f  p3, &aMem[pOrigO
35780 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
35790 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f  .    }.#endif  /
357a0 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
357b0 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45  /.#endif  /* NDE
357c0 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54  BUG */.  }  /* T
357d0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f  he end of the fo
357e0 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c  r(;;) loop the l
357f0 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63  oops through opc
35800 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  odes */..  /* If
35810 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
35820 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74  oint, it means t
35830 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73  hat execution is
35840 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20   finished with. 
35850 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20   ** an error of 
35860 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a  some kind..  */.
35870 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a  vdbe_error_halt:
35880 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b  .  assert( rc );
35890 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
358a0 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
358b0 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
358c0 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69  Log!=0 );.  sqli
358d0 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61  te3_log(rc, "sta
358e0 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74  tement aborts at
358f0 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a   %d: [%s] %s", .
35900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35910 20 20 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61     (int)(pOp - a
35920 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d  Op), p->zSql, p-
35930 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c  >zErrMsg);.  sql
35940 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
35950 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
35960 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20  E_IOERR_NOMEM ) 
35970 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
35980 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   = 1;.  rc = SQL
35990 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  ITE_ERROR;.  if(
359a0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
359b0 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c  ult>0 ){.    sql
359c0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
359d0 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63 68 65  ma(db, resetSche
359e0 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20  maOnFault-1);.  
359f0 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20  }..  /* This is 
35a00 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74  the only way out
35a10 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75   of this procedu
35a20 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a  re.  We have to.
35a30 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65    ** release the
35a40 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65   mutexes on btre
35a50 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71  es that were acq
35a60 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a  uired at the.  *
35a70 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72  * top. */.vdbe_r
35a80 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73  eturn:.  db->las
35a90 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
35aa0 69 64 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  id;.  testcase( 
35ab0 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70  nVmStep>0 );.  p
35ac0 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
35ad0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
35ae0 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56  STEP] += (int)nV
35af0 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33  mStep;.  sqlite3
35b00 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20  VdbeLeave(p);.  
35b10 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a  return rc;..  /*
35b20 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
35b30 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
35b40 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51  b larger than SQ
35b50 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a  LITE_MAX_LENGTH.
35b60 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65    ** is encounte
35b70 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69  red..  */.too_bi
35b80 67 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  g:.  sqlite3Vdbe
35b90 45 72 72 6f 72 28 70 2c 20 22 73 74 72 69 6e 67  Error(p, "string
35ba0 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67   or blob too big
35bb0 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
35bc0 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f  E_TOOBIG;.  goto
35bd0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
35be0 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
35bf0 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63  here if a malloc
35c00 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e  () fails..  */.n
35c10 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c  o_mem:.  db->mal
35c20 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
35c30 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
35c40 72 28 70 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  r(p, "out of mem
35c50 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  ory");.  rc = SQ
35c60 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f  LITE_NOMEM;.  go
35c70 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
35c80 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
35c90 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f  o here for any o
35ca0 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74  ther kind of fat
35cb0 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22  al error.  The "
35cc0 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a  rc" variable.  *
35cd0 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  * should hold th
35ce0 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a  e error number..
35cf0 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
35d00 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72  o_error:.  asser
35d10 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  t( p->zErrMsg==0
35d20 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   );.  if( db->ma
35d30 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20  llocFailed ) rc 
35d40 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
35d50 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
35d60 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
35d70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
35d80 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
35d90 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
35da0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
35db0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
35dc0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
35dd0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
35de0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
35df0 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
35e00 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
35e10 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
35e20 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
35e30 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
35e40 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
35e50 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
35e60 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
35e70 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rc;.  sqlite3Vdb
35e80 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
35e90 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
35ea0 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  ));.  goto vdbe_
35eb0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a        error_halt;.}.