/ Hex Artifact Content
Login

Artifact 10d66354fec90acb5fc908ad36da404ef9796170:


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 75 33 32 20 6c 65 6e 3b  nt */.  u32 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 2c  ec, file_format,
15fc0 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20   &len);.    if( 
15fd0 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
15fe0 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
15ff0 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20  if( nData ){.   
16000 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
16010 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
16020 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e  b(pRec) ) goto n
16030 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
16040 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
16050 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
16060 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
16070 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
16080 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
16090 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
160a0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
160b0 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
160c0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
160d0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
160e0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
160f0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
16100 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
16110 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
16120 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65  _type);.  }while
16130 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74  ( (--pRec)>=pDat
16140 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44  a0 );..  /* EVID
16150 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34  ENCE-OF: R-22564
16160 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65  -11647 The heade
16170 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
16180 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20  single varint.  
16190 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  ** which determi
161a0 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
161b0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
161c0 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65   the header. The
161d0 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c   varint.  ** val
161e0 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f  ue is the size o
161f0 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20  f the header in 
16200 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20  bytes including 
16210 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a  the size varint.
16220 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a    ** itself. */.
16230 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
16240 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
16250 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
16260 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
16270 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
16280 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
16290 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
162a0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
162b0 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
162c0 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
162d0 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
162e0 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
162f0 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
16300 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
16310 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
16320 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
16330 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
16340 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
16350 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20  dr+nData;.  if( 
16360 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e  nByte+nZero>db->
16370 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
16380 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
16390 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
163a0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
163b0 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
163c0 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
163d0 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
163e0 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
163f0 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
16400 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
16410 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
16420 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
16430 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
16440 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
16450 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
16460 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
16470 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
16480 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
16490 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c  esize() could cl
164a0 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
164b0 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
164c0 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  d)..  */.  if( s
164d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
164e0 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
164f0 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b  , (int)nByte) ){
16500 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
16510 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f  ;.  }.  zNewReco
16520 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d  rd = (u8 *)pOut-
16530 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20  >z;..  /* Write 
16540 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16550 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28  i = putVarint32(
16560 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72  zNewRecord, nHdr
16570 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20  );.  j = nHdr;. 
16580 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c   assert( pData0<
16590 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63  =pLast );.  pRec
165a0 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b   = pData0;.  do{
165b0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
165c0 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a   = pRec->uTemp;.
165d0 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
165e0 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36  OF: R-06529-4736
165f0 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  2 Following the 
16600 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20  size varint are 
16610 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20  one or more.    
16620 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61  ** additional va
16630 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63  rints, one per c
16640 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20  olumn. */.    i 
16650 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26  += putVarint32(&
16660 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73  zNewRecord[i], s
16670 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20  erial_type);    
16680 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61          /* seria
16690 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a  l type */.    /*
166a0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
166b0 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65 20  64536-51728 The 
166c0 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20  values for each 
166d0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65  column in the re
166e0 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65  cord.    ** imme
166f0 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74  diately follow t
16700 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
16710 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    j += sqlite3Vd
16720 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
16730 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63  wRecord[j], pRec
16740 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
16750 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  /* content */.  
16760 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29  }while( (++pRec)
16770 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73  <=pLast );.  ass
16780 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a  ert( i==nHdr );.
16790 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79    assert( j==nBy
167a0 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  te );..  assert(
167b0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
167c0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
167d0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
167e0 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
167f0 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
16800 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
16810 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
16820 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
16830 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
16840 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
16850 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
16860 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
16870 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
16880 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
16890 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
168a0 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
168b0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
168c0 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
168d0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
168e0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
168f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
16900 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
16910 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
16920 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
16930 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
16940 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
16950 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
16960 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
16970 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
16980 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
16990 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
169a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
169b0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
169c0 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
169d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
169e0 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
169f0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
16a00 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
16a10 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
16a20 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
16a30 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
16a40 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
16a50 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
16a60 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
16a70 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
16a80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16a90 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
16aa0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74  &nEntry);.  pOut
16ab0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
16ac0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
16ad0 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
16ae0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
16af0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
16b00 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
16b10 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
16b20 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
16b30 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
16b40 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
16b50 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
16b60 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
16b70 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
16b80 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
16b90 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
16ba0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
16bb0 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
16bc0 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
16bd0 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
16be0 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
16bf0 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
16c00 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
16c10 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
16c40 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
16c50 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
16c80 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
16c90 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
16ca0 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
16cb0 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
16cc0 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
16cd0 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
16ce0 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
16cf0 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
16d00 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
16d10 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
16d20 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
16d30 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
16d40 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
16d50 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
16d60 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
16d70 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
16d80 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
16d90 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
16da0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
16db0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
16dc0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
16dd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
16de0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
16df0 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
16e00 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
16e10 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
16e20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
16e30 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
16e40 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16e50 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
16e60 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
16e70 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
16e80 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
16e90 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
16ea0 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
16eb0 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
16ec0 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57    if( db->nVdbeW
16ed0 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
16ee0 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
16ef0 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
16f00 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
16f10 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
16f20 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
16f30 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
16f40 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
16f50 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
16f60 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
16f70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
16f80 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
16f90 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
16fa0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
16fb0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
16fc0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
16fd0 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
16fe0 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
16ff0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
17000 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66  zName);..#ifndef
17010 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
17020 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20  TUALTABLE.      
17030 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20  /* This call is 
17040 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20  Ok even if this 
17050 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74  savepoint is act
17060 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74  ually a transact
17070 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ion.      ** sav
17080 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72  epoint (and ther
17090 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74  efore should not
170a0 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69   prompt xSavepoi
170b0 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e  nt()) callbacks.
170c0 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69  .      ** If thi
170d0 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
170e0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  on savepoint bei
170f0 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73  ng opened, it is
17100 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20   guaranteed.    
17110 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62    ** that the db
17120 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61  ->aVTrans[] arra
17130 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a  y is empty.  */.
17140 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
17150 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17160 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d  || db->nVTrans==
17170 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
17180 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
17190 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
171a0 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20  NT_BEGIN,.      
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
171d0 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61  tatement+db->nSa
171e0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
171f0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17200 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
17210 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
17220 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  dif..      /* Cr
17230 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
17240 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
17250 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
17260 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
17270 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  aw(db, sizeof(Sa
17280 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
17290 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
172a0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
172b0 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
172c0 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
172d0 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
172e0 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
172f0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
17300 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
17310 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
17320 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
17330 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
17340 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
17350 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
17360 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
17370 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
17380 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
17390 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
173a0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
173b0 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
173c0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
173d0 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
173e0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
173f0 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
17400 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20         }.    .  
17410 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
17420 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
17430 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
17440 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
17450 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
17460 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
17470 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17480 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
17490 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
174a0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
174b0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
174c0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
174d0 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
174e0 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  dImmCons = db->n
174f0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
17500 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17510 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76   }else{.    iSav
17520 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  epoint = 0;..   
17530 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d   /* Find the nam
17540 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  ed savepoint. If
17550 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
17560 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65  h savepoint, the
17570 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65  n an.    ** an e
17580 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
17590 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a   to the user.  *
175a0 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20  /.    for(.     
175b0 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   pSavepoint = db
175c0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20  ->pSavepoint; . 
175d0 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
175e0 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  && sqlite3StrICm
175f0 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e  p(pSavepoint->zN
17600 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  ame, zName);.   
17610 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
17620 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
17630 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69  t.    ){.      i
17640 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
17650 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76   }.    if( !pSav
17660 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
17670 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
17680 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  (p, "no such sav
17690 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
176a0 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
176b0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
176c0 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
176d0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20  nVdbeWrite>0 && 
176e0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
176f0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f  LEASE ){.      /
17700 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  * It is not poss
17710 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20  ible to release 
17720 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70  (commit) a savep
17730 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72  oint if there ar
17740 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69  e .      ** acti
17750 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65  ve write stateme
17760 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nts..      */.  
17770 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
17780 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
17790 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e  release savepoin
177a0 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  t - ".          
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177c0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
177d0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
177e0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
177f0 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
17800 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65  {..      /* Dete
17810 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
17820 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74   not this is a t
17830 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
17840 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20  oint. If so,.   
17850 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69     ** and this i
17860 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  s a RELEASE comm
17870 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  and, then the cu
17880 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
17890 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63  n .      ** is c
178a0 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20  ommitted. .     
178b0 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73   */.      int is
178c0 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53  Transaction = pS
178d0 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d  avepoint->pNext=
178e0 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e  =0 && db->isTran
178f0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
17900 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72  ;.      if( isTr
17910 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d  ansaction && p1=
17920 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
17930 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  SE ){.        if
17940 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
17950 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
17960 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
17970 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
17980 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17990 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
179a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
179b0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
179c0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
179d0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
179e0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63  .          p->pc
179f0 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
17a00 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  Op);.          d
17a10 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17a20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
17a30 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
17a40 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
17a50 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17a60 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
17a70 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
17a80 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
17a90 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
17aa0 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
17ab0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
17ac0 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  t isSchemaChange
17ad0 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  ;.        iSavep
17ae0 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
17af0 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
17b00 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
17b10 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
17b20 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
17b30 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
17b40 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c  Change = (db->fl
17b50 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 74  ags & SQLITE_Int
17b60 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a  ernChanges)!=0;.
17b70 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
17b80 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
17b90 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
17ba0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17bb0 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
17bc0 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
17bd0 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bf0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
17c00 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
17c10 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
17c40 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20  aChange==0);.   
17c50 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
17c60 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
17c70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17c80 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
17c90 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
17ca0 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
17cb0 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  emaChange = 0;. 
17cc0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17cd0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
17ce0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
17cf0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
17d00 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
17d10 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
17d20 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
17d30 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
17d40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17d50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
17d60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17d70 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
17d80 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
17d90 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68         if( isSch
17da0 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20  emaChange ){.   
17db0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
17dc0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
17dd0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
17de0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
17df0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
17e00 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
17e10 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
17e20 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
17e30 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
17e40 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
17e50 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
17e60 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
17e70 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
17e80 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
17e90 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
17ea0 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
17eb0 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
17ec0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
17ed0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
17ee0 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
17ef0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
17f00 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
17f10 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
17f20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
17f30 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
17f40 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
17f50 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
17f60 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
17f70 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
17f80 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
17f90 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
17fa0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
17fb0 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
17fc0 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
17fd0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
17fe0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
17ff0 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
18000 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
18010 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
18020 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
18030 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
18040 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
18050 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
18060 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
18070 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
18080 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
18090 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
180a0 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
180b0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
180c0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
180d0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
180e0 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
180f0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
18100 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
18110 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
18120 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
18130 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
18140 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
18150 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
18160 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
18170 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
18180 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
18190 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
181a0 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
181b0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
181c0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
181d0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
181e0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
181f0 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
18200 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
18210 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
18220 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
18230 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d  ansaction || p1=
18240 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
18250 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ACK ){.        r
18260 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
18270 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
18280 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
18290 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
182a0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
182b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
182c0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
182d0 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
182e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
182f0 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
18300 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
18310 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
18320 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
18330 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
18340 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
18350 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
18360 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
18370 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
18380 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
18390 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
183a0 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
183b0 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
183c0 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
183d0 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
183e0 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
183f0 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
18400 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
18410 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
18420 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
18430 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
18440 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
18450 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
18460 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
18470 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
18480 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
18490 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
184a0 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
184b0 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
184c0 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
184d0 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
184e0 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
184f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
18500 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
18510 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
18520 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
18530 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
18540 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
18550 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
18560 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
18570 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
18580 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65  ssert( db->nVdbe
18590 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20  Active>0 );  /* 
185a0 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
185b0 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
185c0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  /.  assert( p->b
185d0 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
185e0 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21  f( turnOnAC && !
185f0 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
18600 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
18610 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
18620 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
18630 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
18640 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
18650 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a  e writing.    **
18660 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
18670 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
18680 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
18690 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
186a0 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
186b0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
186c0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  (p, "cannot comm
186d0 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
186e0 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
186f0 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
18700 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
18710 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
18720 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18730 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
18740 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
18750 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
18760 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61  .    if( iRollba
18770 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
18780 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
18790 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
187a0 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
187b0 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f  kAll(db, SQLITE_
187c0 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b  ABORT_ROLLBACK);
187d0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
187e0 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
187f0 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
18800 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
18810 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
18820 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
18830 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18840 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18850 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
18860 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
18870 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
18880 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
18890 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
188a0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
188b0 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
188c0 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64   - aOp);.      d
188d0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
188e0 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
188f0 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
18900 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18910 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18920 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
18930 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  n;.    }.    ass
18940 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
18950 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
18960 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
18970 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
18980 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
18990 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
189a0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
189b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
189c0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
189d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
189e0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
189f0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
18a00 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
18a10 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
18a20 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
18a30 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
18a40 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
18a50 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
18a60 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
18a70 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
18a80 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
18a90 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
18aa0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
18ab0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
18ac0 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
18ad0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
18ae0 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
18af0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
18b00 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OR;.  }.  break;
18b10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
18b20 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
18b30 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
18b40 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
18b50 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20  ion on database 
18b60 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74  P1 if a transact
18b70 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61  ion is not alrea
18b80 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a  dy.** active..**
18b90 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
18ba0 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
18bb0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
18bc0 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61  started, or if a
18bd0 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61   .** read-transa
18be0 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79  ction is already
18bf0 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75   active, it is u
18c00 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69  pgraded to a wri
18c10 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  te-transaction..
18c20 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f  ** If P2 is zero
18c30 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72  , then a read-tr
18c40 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
18c50 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  rted..**.** P1 i
18c60 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
18c70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
18c80 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72   on which the tr
18c90 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
18ca0 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20  started.  Index 
18cb0 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
18cc0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
18cd0 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a  index 1 is the.*
18ce0 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  * file used for 
18cf0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
18d00 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20  .  Indices of 2 
18d10 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64  or more are used
18d20 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64   for.** attached
18d30 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
18d40 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61  * If a write-tra
18d50 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
18d60 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65  ted and the Vdbe
18d70 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  .usesStmtJournal
18d80 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65   flag is.** true
18d90 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73   (this flag is s
18da0 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d  et if the Vdbe m
18db0 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74  ay modify more t
18dc0 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20  han one row and 
18dd0 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20  may.** throw an 
18de0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29  ABORT exception)
18df0 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
18e00 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c  ansaction may al
18e10 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a  so be opened..**
18e20 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c   More specifical
18e30 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ly, a statement 
18e40 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f  transaction is o
18e50 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61  pened iff the da
18e60 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
18e70 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
18e80 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d  y not in autocom
18e90 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20  mit mode, or if 
18ea0 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a  there are other.
18eb0 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ** active statem
18ec0 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e  ents. A statemen
18ed0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  t transaction al
18ee0 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73  lows the changes
18ef0 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a   made by this.**
18f00 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c   VDBE to be roll
18f10 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
18f20 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
18f30 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
18f40 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
18f50 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66   transaction. If
18f60 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63   no error is enc
18f70 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74  ountered, the st
18f80 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18f90 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f  ion.** will auto
18fa0 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74  matically commit
18fb0 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68   when the VDBE h
18fc0 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  alts..**.** If P
18fd0 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f  5!=0 then this o
18fe0 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b  pcode also check
18ff0 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  s the schema coo
19000 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a  kie against P3.*
19010 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61  * and the schema
19020 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
19030 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a  ter against P4..
19040 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
19050 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
19060 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
19070 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
19080 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
19090 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
190a0 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
190b0 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
190c0 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
190d0 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
190e0 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
190f0 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
19100 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73  chema.  If the s
19110 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20  chema.** cookie 
19120 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72  in P3 differs fr
19130 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  om the schema co
19140 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61  okie in the data
19150 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a  base header or.*
19160 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20  * if the schema 
19170 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
19180 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73  er in P4 differs
19190 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
191a0 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20  t.** generation 
191b0 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e  counter, then an
191c0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65   SQLITE_SCHEMA e
191d0 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61  rror is raised a
191e0 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20  nd execution.** 
191f0 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69  halts.  The sqli
19200 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70  te3_step() wrapp
19210 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68  er function migh
19220 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65  t then reprepare
19230 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   the.** statemen
19240 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66  t and rerun it f
19250 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
19260 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  g..*/.case OP_Tr
19270 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42  ansaction: {.  B
19280 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74  tree *pBt;.  int
19290 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47   iMeta;.  int iG
192a0 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  en;..  assert( p
192b0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
192c0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
192d0 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Only==0 || pOp->
192e0 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p2==0 );.  asser
192f0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
19300 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
19310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
19320 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
19330 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
19340 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
19350 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26   && (db->flags &
19360 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
19370 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  y)!=0 ){.    rc 
19380 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  = SQLITE_READONL
19390 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  Y;.    goto abor
193a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
193b0 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e    }.  pBt = db->
193c0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
193d0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
193e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
193f0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
19400 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
19410 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d     testcase( rc=
19420 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41  =SQLITE_BUSY_SNA
19430 50 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73  PSHOT );.    tes
19440 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
19450 45 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20  E_BUSY_RECOVERY 
19460 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
19470 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xff)==SQLITE_BUS
19480 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
19490 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
194a0 4f 70 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63  Op);.      p->rc
194b0 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 67 6f 74   = rc;.      got
194c0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
194d0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
194e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
194f0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19500 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19510 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
19520 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
19530 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
19540 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
19550 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
19560 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
19570 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
19580 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
19590 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
195a0 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
195b0 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
195c0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
195d0 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
195e0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
195f0 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
19600 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
19610 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
19620 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
19630 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
19640 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
19650 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
19660 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
19670 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
19680 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
19690 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
196a0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
196b0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
196c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
196d0 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
196e0 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
196f0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
19700 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
19710 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
19720 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
19730 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
19740 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
19750 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
19760 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
19770 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
19780 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
19790 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
197a0 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
197b0 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
197c0 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
197d0 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
197e0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
197f0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
19800 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
19810 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
19820 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
19830 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
19840 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
19850 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
19860 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c  ing:.    ** IMPL
19870 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
19880 2d 33 32 31 39 35 2d 31 39 34 36 35 20 54 68 65  -32195-19465 The
19890 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
198a0 69 73 20 75 73 65 64 20 62 79 20 53 51 4c 69 74  is used by SQLit
198b0 65 0a 20 20 20 20 2a 2a 20 65 61 63 68 20 74 69  e.    ** each ti
198c0 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78  me a query is ex
198d0 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65  ecuted to ensure
198e0 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e   that the intern
198f0 61 6c 20 63 61 63 68 65 20 6f 66 20 74 68 65 0a  al cache of the.
19900 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 75 73      ** schema us
19910 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
19920 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20  g the SQL query 
19930 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65  matches the sche
19940 6d 61 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  ma of the.    **
19950 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73   database agains
19960 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70  t which the comp
19970 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63  iled query is ac
19980 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e  tually executed.
19990 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
199a0 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
199b0 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d  pBt, BTREE_SCHEM
199c0 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20  A_VERSION, (u32 
199d0 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69  *)&iMeta);.    i
199e0 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  Gen = db->aDb[pO
199f0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
19a00 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d  iGeneration;.  }
19a10 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d  else{.    iGen =
19a20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
19a30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19a40 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  5==0 || pOp->p4t
19a50 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
19a60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
19a70 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  & (iMeta!=pOp->p
19a80 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e  3 || iGen!=pOp->
19a90 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c  p4.i) ){.    sql
19aa0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
19ab0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
19ac0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
19ad0 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
19ae0 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
19af0 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b  a has changed");
19b00 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73  .    /* If the s
19b10 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f  chema-cookie fro
19b20 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
19b30 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20  ile matches the 
19b40 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73  cookie .    ** s
19b50 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69  tored with the i
19b60 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65  n-memory represe
19b70 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
19b80 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a  chema, do.    **
19b90 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20   not reload the 
19ba0 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20  schema from the 
19bb0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
19bc0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
19bd0 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61  virtual-tables a
19be0 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20  re in use, this 
19bf0 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f  is not just an o
19c00 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20  ptimization..   
19c10 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62   ** Often, v-tab
19c20 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20  les store their 
19c30 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51  data in other SQ
19c40 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69  Lite tables, whi
19c50 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75  ch.    ** are qu
19c60 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69  eried from withi
19c70 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74  n xNext() and ot
19c80 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  her v-table meth
19c90 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a  ods using.    **
19ca0 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65   prepared querie
19cb0 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65  s. If such a que
19cc0 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74  ry is out-of-dat
19cd0 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e  e, we do not wan
19ce0 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63  t to.    ** disc
19cf0 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ard the database
19d00 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20   schema, as the 
19d10 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d  user code implem
19d20 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a  enting the.    *
19d30 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20  * v-table would 
19d40 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79  have to be ready
19d50 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
19d60 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20  _vtab structure 
19d70 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f  itself.    ** to
19d80 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
19d90 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33  whenever sqlite3
19da0 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65  _step() is calle
19db0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20  d from within . 
19dc0 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20     ** a v-table 
19dd0 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20  method..    */. 
19de0 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70     if( db->aDb[p
19df0 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
19e00 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d  >schema_cookie!=
19e10 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73  iMeta ){.      s
19e20 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
19e30 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31  hema(db, pOp->p1
19e40 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e  );.    }.    p->
19e50 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20  expired = 1;.   
19e60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48   rc = SQLITE_SCH
19e70 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  EMA;.  }.  break
19e80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19e90 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32  ReadCookie P1 P2
19ea0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
19eb0 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  ad cookie number
19ec0 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73   P3 from databas
19ed0 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69  e P1 and write i
19ee0 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
19ef0 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20  P2..** P3==1 is 
19f00 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
19f10 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68  on.  P3==2 is th
19f20 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
19f30 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74  t..** P3==3 is t
19f40 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
19f50 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c  ager cache size,
19f60 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
19f70 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20  P1==0 is.** the 
19f80 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
19f90 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
19fa0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
19fb0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
19fc0 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
19fd0 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  les..**.** There
19fe0 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
19ff0 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
1a000 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
1a010 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
1a020 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
1a030 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
1a040 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
1a050 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
1a060 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1a070 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
1a080 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
1a090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
1a0a0 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ut2 */.  int iMe
1a0b0 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  ta;.  int iDb;. 
1a0c0 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20   int iCookie;.. 
1a0d0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1a0e0 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d  eader );.  iDb =
1a0f0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
1a100 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1a110 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1a120 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
1a130 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
1a140 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1a150 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1a160 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
1a170 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
1a180 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1a190 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
1a1a0 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65  Db) );..  sqlite
1a1b0 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
1a1c0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
1a1d0 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
1a1e0 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20  &iMeta);.  pOut 
1a1f0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
1a200 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
1a210 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
1a220 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a230 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
1a240 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1a250 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e  ** Write the con
1a260 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1a270 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64   P3 (interpreted
1a280 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a   as an integer).
1a290 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ** into cookie n
1a2a0 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
1a2b0 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20  base P1.  P2==1 
1a2c0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
1a2d0 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d  rsion.  .** P2==
1a2e0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
1a2f0 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20  e format. P2==3 
1a300 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
1a310 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a  ed pager cache .
1a320 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  ** size, and so 
1a330 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
1a340 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1a350 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
1a360 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74  1 is the .** dat
1a370 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
1a380 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61  to store tempora
1a390 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
1a3a0 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
1a3b0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
1a3c0 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
1a3d0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
1a3e0 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
1a3f0 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
1a400 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
1a410 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a420 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
1a430 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1a440 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1a450 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
1a460 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1a470 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1a480 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
1a490 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1a4a0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
1a4b0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1a4c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1a4d0 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
1a4e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
1a4f0 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
1a500 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  eld(db, pOp->p1,
1a510 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20   0) );.  pIn3 = 
1a520 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1a530 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1a540 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
1a550 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
1a560 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1a570 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1a580 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1a590 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1a5a0 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1a5b0 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70   pOp->p2, (int)p
1a5c0 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28  In3->u.i);.  if(
1a5d0 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
1a5e0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29  SCHEMA_VERSION )
1a5f0 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68  {.    /* When th
1a600 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
1a610 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20  changes, record 
1a620 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69  the new cookie i
1a630 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20  nternally */.   
1a640 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73   pDb->pSchema->s
1a650 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28  chema_cookie = (
1a660 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  int)pIn3->u.i;. 
1a670 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
1a680 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
1a690 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66  nges;.  }else if
1a6a0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1a6b0 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
1a6c0 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
1a6d0 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
1a6e0 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
1a6f0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1a700 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29  le_format = (u8)
1a710 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn3->u.i;.  }. 
1a720 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20   if( pOp->p1==1 
1a730 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69  ){.    /* Invali
1a740 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65  date all prepare
1a750 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  d statements whe
1a760 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64  never the TEMP d
1a770 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73  atabase.    ** s
1a780 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64  chema is changed
1a790 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20  .  Ticket #1644 
1a7a0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  */.    sqlite3Ex
1a7b0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
1a7c0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
1a7d0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
1a7e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1a7f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
1a800 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
1a810 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1a820 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1a830 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1a840 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
1a850 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1a860 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
1a870 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
1a880 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
1a890 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
1a8a0 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
1a8b0 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
1a8c0 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
1a8d0 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
1a8e0 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
1a8f0 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
1a900 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1a910 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
1a920 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
1a930 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
1a940 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
1a950 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
1a960 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
1a970 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
1a980 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
1a990 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
1a9a0 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
1a9b0 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
1a9c0 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
1a9d0 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
1a9e0 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
1a9f0 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
1aa00 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
1aa10 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1aa20 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
1aa30 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
1aa40 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
1aa50 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
1aa60 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
1aa70 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
1aa80 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
1aa90 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
1aaa0 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
1aab0 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
1aac0 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
1aad0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
1aae0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
1aaf0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
1ab00 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
1ab10 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
1ab20 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
1ab30 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
1ab40 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
1ab50 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1ab60 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
1ab70 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
1ab80 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
1ab90 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
1aba0 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
1abb0 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
1abc0 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
1abd0 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
1abe0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1abf0 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
1ac00 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
1ac10 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
1ac20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
1ac30 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
1ac40 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
1ac50 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
1ac60 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1ac70 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1ac80 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1ac90 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1aca0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1acb0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1acc0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1acd0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1ace0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1acf0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1ad00 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1ad10 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1ad20 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1ad30 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1ad40 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1ad50 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1ad60 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1ad70 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1ad80 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1ad90 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1ada0 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
1adb0 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69  ee also: OpenWri
1adc0 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f  te, ReopenIdx.*/
1add0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70  ./* Opcode: Reop
1ade0 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50  enIdx P1 P2 P3 P
1adf0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1ae00 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1ae10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1ae20 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b  nIdx opcode work
1ae30 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52  s exactly like R
1ae40 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74  eadOpen except t
1ae50 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1ae60 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1ae70 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1ae80 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1ae90 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61  n with a root pa
1aea0 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  ge.** number of 
1aeb0 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20  P2 and if it is 
1aec0 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f  this opcode beco
1aed0 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e  mes a no-op.  In
1aee0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a   other words,.**
1aef0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
1af00 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
1af10 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74  do not reopen it
1af20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  ..**.** The Reop
1af30 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79  enIdx opcode may
1af40 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69   only be used wi
1af50 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74  th P5==0 and wit
1af60 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20  h P4 being.** a 
1af70 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
1af80 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
1af90 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1afa0 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
1afb0 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72  s.** every other
1afc0 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
1afd0 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
1afe0 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ame cursor numbe
1aff0 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  r..**.** See the
1b000 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65   OpenRead opcode
1b010 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
1b020 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1b030 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
1b040 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
1b050 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
1b060 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1b070 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1b080 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
1b090 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
1b0a0 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
1b0b0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
1b0c0 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
1b0d0 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
1b0e0 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
1b0f0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1b100 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
1b110 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
1b120 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1b130 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1b140 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1b150 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1b160 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1b170 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1b180 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1b190 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1b1a0 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1b1b0 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1b1c0 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1b1d0 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1b1e0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1b1f0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1b200 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1b210 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1b220 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1b230 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1b240 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1b250 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1b260 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  s in the table, 
1b270 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72  or to the.** lar
1b280 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e  gest index of an
1b290 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  y column of the 
1b2a0 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63  table that is ac
1b2b0 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a  tually used..**.
1b2c0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1b2d0 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
1b2e0 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
1b2f0 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1b300 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
1b310 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
1b320 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
1b330 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
1b340 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
1b350 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
1b360 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
1b370 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
1b380 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
1b390 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1b3a0 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
1b3b0 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1b3c0 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1b3d0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1b3e0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1b3f0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1b400 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1b410 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1b420 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1b430 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1b440 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1b450 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1b460 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1b470 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1b480 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1b490 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1b4a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1b4b0 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1b4c0 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1b4d0 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1b4e0 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1b4f0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1b500 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1b510 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1b520 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1b530 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1b540 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1b550 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1b560 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1b570 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1b580 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1b590 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1b5a0 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1b5b0 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1b5c0 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1b5d0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1b5e0 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1b5f0 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1b600 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47  (pOp->p5&(OPFLAG
1b610 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f  _P2ISREG|OPFLAG_
1b620 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53  BULKCSR|OPFLAG_S
1b630 45 45 4b 45 51 29 29 3d 3d 70 4f 70 2d 3e 70 35  EEKEQ))==pOp->p5
1b640 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b650 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1b660 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
1b670 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1b680 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1b690 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1b6a0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
1b6b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1b6c0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20  de==OP_OpenRead 
1b6d0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1b6e0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20  OP_ReopenIdx.   
1b6f0 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61         || p->rea
1b700 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
1b710 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
1b720 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1b730 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b  _ABORT_ROLLBACK;
1b740 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
1b750 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
1b760 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
1b770 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
1b780 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
1b790 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1b7a0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1b7b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1b7c0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1b7d0 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
1b7e0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1b7f0 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1b800 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1b810 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1b820 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1b830 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1b840 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
1b850 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1b860 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1b870 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1b880 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1b890 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1b8a0 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1b8b0 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1b8c0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1b8d0 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1b8e0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1b8f0 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1b900 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1b910 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1b920 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1b930 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1b940 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1b950 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1b960 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
1b970 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  ) );.    pIn2 = 
1b980 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
1b990 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1b9a0 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
1b9b0 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
1b9c0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1b9d0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
1b9e0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1b9f0 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
1ba00 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
1ba10 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
1ba20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
1ba30 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
1ba40 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1ba50 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
1ba60 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
1ba70 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
1ba80 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
1ba90 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
1baa0 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
1bab0 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
1bac0 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
1bad0 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
1bae0 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
1baf0 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
1bb00 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
1bb10 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66  ction. */.    if
1bb20 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20  ( NEVER(p2<2) ) 
1bb30 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
1bb40 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1bb50 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
1bb60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1bb70 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
1bb80 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1bb90 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
1bba0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1bbb0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1bbc0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1bbd0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1bbe0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1bbf0 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1bc00 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1bc10 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1bc20 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65  +pKeyInfo->nXFie
1bc30 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1bc40 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1bc50 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1bc60 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1bc70 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1bc80 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1bc90 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1bca0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1bcb0 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1bcc0 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1bcd0 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1bce0 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1bcf0 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1bd00 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1bd10 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1bd20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  iDb, 1);.  if( p
1bd30 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1bd40 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1bd50 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1bd60 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1bd70 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f  ;.  pCur->pgnoRo
1bd80 6f 74 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20  ot = p2;.  rc = 
1bd90 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1bda0 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1bdb0 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1bdc0 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  r->pCursor);.  p
1bdd0 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1bde0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53  pKeyInfo;.  /* S
1bdf0 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  et the VdbeCurso
1be00 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62  r.isTable variab
1be10 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  le. Previous ver
1be20 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
1be30 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
1be40 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
1be50 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
1be60 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
1be70 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
1be80 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
1be90 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
1bea0 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
1beb0 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
1bec0 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
1bed0 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
1bee0 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
1bef0 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
1bf00 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
1bf10 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  O;..open_cursor_
1bf20 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73  set_hints:.  ass
1bf30 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  ert( OPFLAG_BULK
1bf40 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c  CSR==BTREE_BULKL
1bf50 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28  OAD );.  assert(
1bf60 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d   OPFLAG_SEEKEQ==
1bf70 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b  BTREE_SEEK_EQ );
1bf80 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
1bf90 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55  ->p5 & OPFLAG_BU
1bfa0 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20  LKCSR );.#ifdef 
1bfb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
1bfc0 52 53 4f 52 5f 48 49 4e 54 0a 20 20 74 65 73 74  RSOR_HINT.  test
1bfd0 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20  case( pOp->p2 & 
1bfe0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1bff0 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65  .#endif.  sqlite
1c000 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1c010 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20  (pCur->pCursor, 
1c020 42 54 52 45 45 5f 48 49 4e 54 5f 46 4c 41 47 53  BTREE_HINT_FLAGS
1c030 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1c040 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
1c050 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
1c060 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1c070 4b 45 51 29 29 29 3b 0a 20 20 62 72 65 61 6b 3b  KEQ)));.  break;
1c080 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1c090 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1c0a0 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
1c0b0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1c0c0 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
1c0d0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1c0e0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1c0f0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1c100 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1c110 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1c120 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1c130 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1c140 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1c150 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1c160 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1c170 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1c180 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1c190 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1c1a0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1c1b0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1c1c0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1c1d0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1c1e0 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1c1f0 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1c200 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1c210 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1c220 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1c230 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1c240 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1c250 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1c260 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1c270 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1c280 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1c290 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
1c2a0 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
1c2b0 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
1c2c0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
1c2d0 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
1c2e0 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
1c2f0 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
1c300 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
1c310 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
1c320 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
1c330 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
1c340 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
1c350 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
1c360 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
1c370 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
1c380 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
1c390 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1c3a0 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
1c3b0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1c3c0 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
1c3d0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
1c3e0 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
1c3f0 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
1c400 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
1c410 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
1c420 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
1c430 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
1c440 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
1c450 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1c460 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
1c470 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
1c480 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1c490 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
1c4a0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1c4b0 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
1c4c0 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
1c4d0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
1c4e0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
1c4f0 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
1c500 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1c510 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
1c520 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
1c530 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
1c540 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
1c550 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1c560 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
1c570 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
1c580 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
1c590 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
1c5a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1c5b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1c5c0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1c5d0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1c5e0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1c5f0 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
1c600 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1c610 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1c620 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1c630 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1c640 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1c650 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1c660 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1c670 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
1c680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1c690 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1c6a0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1c6b0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1c6c0 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1c6d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c6e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c6f0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1c700 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1c710 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1c720 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1c730 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1c740 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1c750 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1c760 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1c770 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1c780 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1c790 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1c7a0 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1c7b0 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1c7c0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1c7d0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1c7e0 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1c7f0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1c800 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1c810 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1c820 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1c830 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1c840 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20    if( (pKeyInfo 
1c850 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1c860 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1c870 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1c880 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1c890 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1c8a0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1c8b0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1c8c0 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1c8d0 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1c8e0 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1c8f0 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1c900 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c910 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1c920 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1c930 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1c940 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1c950 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1c960 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1c970 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1c980 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1c990 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1c9a0 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  fo;.        rc =
1c9b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1c9c0 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1c9d0 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f 2c  no, 1, pKeyInfo,
1c9e0 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
1c9f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1ca00 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
1ca10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1ca20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ca30 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1ca40 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
1ca50 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73  1, 0, pCx->pCurs
1ca60 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
1ca70 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1ca80 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73   }.  }.  pCx->is
1ca90 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1caa0 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1cab0 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  RED);.  break;.}
1cac0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
1cad0 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33  terOpen P1 P2 P3
1cae0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1caf0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1cb00 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1cb10 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1cb20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1cb30 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1cb40 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1cb50 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1cb60 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1cb70 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1cb80 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1cb90 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a   algorithm..**.*
1cba0 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33  * If argument P3
1cbb0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1cbc0 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20  en it indicates 
1cbd0 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
1cbe0 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68  may.** assume th
1cbf0 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74  at a stable sort
1cc00 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65   considering the
1cc10 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73   first P3 fields
1cc20 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20   of each.** key 
1cc30 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f  is sufficient to
1cc40 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71   produce the req
1cc50 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a  uired results..*
1cc60 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1cc70 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1cc80 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1cc90 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1cca0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1ccb0 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1ccc0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1ccd0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1cce0 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1ccf0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1cd00 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1cd10 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
1cd20 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1cd30 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1cd40 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1cd50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  );.  assert( pCx
1cd60 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ->pKeyInfo->enc=
1cd70 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63  =ENC(db) );.  rc
1cd80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
1cd90 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70  rterInit(db, pOp
1cda0 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 62 72  ->p3, pCx);.  br
1cdb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1cdc0 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20  e: SequenceTest 
1cdd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1cde0 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72  ynopsis: if( cur
1cdf0 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20  sor[P1].ctr++ ) 
1ce00 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  pc = P2.**.** P1
1ce10 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
1ce20 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75  sor. If the sequ
1ce30 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ence counter is 
1ce40 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20  currently zero, 
1ce50 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52  jump.** to P2. R
1ce60 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
1ce70 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1ce80 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69  jump is taken, i
1ce90 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  ncrement the.** 
1cea0 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c  the sequence val
1ceb0 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ue..*/.case OP_S
1cec0 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20  equenceTest: {. 
1ced0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1cee0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cef0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1cf00 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1cf10 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1cf20 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1cf30 74 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29  t( pC->pSorter )
1cf40 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1cf50 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1cf60 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1cf70 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1cf80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1cf90 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1cfa0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1cfb0 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1cfc0 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1cfd0 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1cfe0 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1cff0 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1d000 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1d010 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1d020 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1d030 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1d040 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1d050 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1d060 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1d070 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1d080 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1d090 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1d0a0 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1d0b0 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1d0c0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1d0d0 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1d0e0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1d0f0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1d100 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1d110 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1d120 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1d130 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1d140 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1d150 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1d160 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1d170 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1d180 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1d190 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1d1a0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1d1b0 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1d1c0 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1d1d0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1d1e0 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1d1f0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1d200 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1d210 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1d220 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1d230 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1d240 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1d250 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d260 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1d270 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1d280 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1d290 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1d2a0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1d2b0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1d2c0 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43  -1, 0);.  if( pC
1d2d0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1d2e0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1d2f0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  ow = 1;.  pCx->p
1d300 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20  seudoTableReg = 
1d310 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
1d320 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61  isTable = 1;.  a
1d330 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1d340 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
1d350 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
1d360 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
1d370 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
1d380 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
1d390 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
1d3a0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
1d3b0 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
1d3c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1d3d0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1d3e0 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
1d3f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1d400 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1d410 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
1d420 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1d430 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
1d440 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
1d450 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
1d460 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  0;.  break;.}..#
1d470 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1d480 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1d490 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MASK./* Opcode: 
1d4a0 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a  ColumnsUsed P1 *
1d4b0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1d4c0 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68  is opcode (which
1d4d0 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20   only exists if 
1d4e0 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69  SQLite was compi
1d4f0 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  led with.** SQLI
1d500 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1d510 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e  _USED_MASK) iden
1d520 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c  tifies which col
1d530 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74  umns of the.** t
1d540 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f  able or index fo
1d550 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20  r cursor P1 are 
1d560 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36  used.  P4 is a 6
1d570 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
1d580 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77   (P4_INT64) in w
1d590 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36  hich the first 6
1d5a0 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66  3 bits are one f
1d5b0 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a  or each of the.*
1d5c0 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d  * first 63 colum
1d5d0 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
1d5e0 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  or index that ar
1d5f0 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a  e actually used.
1d600 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72  ** by the cursor
1d610 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65  .  The high-orde
1d620 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20  r bit is set if 
1d630 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72  any column after
1d640 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20  .** the 64th is 
1d650 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  used..*/.case OP
1d660 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a  _ColumnsUsed: {.
1d670 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d680 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1d690 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1d6a0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1d6b0 72 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55  r );.  pC->maskU
1d6c0 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70  sed = *(u64*)pOp
1d6d0 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
1d6e0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
1d6f0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
1d700 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1d710 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1d720 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1d730 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1d740 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1d750 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1d760 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1d770 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1d780 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1d790 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
1d7a0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1d7b0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1d7c0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1d7d0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1d7e0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1d7f0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1d800 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1d810 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1d820 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1d830 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1d840 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1d850 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1d860 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1d870 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1d880 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1d890 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1d8a0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1d8b0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
1d8c0 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1d8d0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1d8e0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1d8f0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1d900 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1d910 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1d920 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1d930 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1d940 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1d950 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1d960 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1d970 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1d980 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1d990 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1d9a0 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1d9b0 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1d9c0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1d9d0 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1d9e0 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1d9f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1da00 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1da10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1da20 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1da30 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1da40 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1da50 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1da60 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1da70 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1da80 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1da90 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1daa0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1dab0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1dac0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1dad0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1dae0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1daf0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1db00 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1db10 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1db20 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1db30 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1db40 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1db50 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1db60 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1db70 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1db80 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1db90 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1dba0 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1dbb0 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1dbc0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1dbd0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1dbe0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1dbf0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1dc00 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1dc10 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1dc20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1dc30 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1dc40 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1dc50 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1dc60 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1dc70 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1dc80 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1dc90 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1dca0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1dcb0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1dcc0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1dcd0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1dce0 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1dcf0 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1dd00 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1dd10 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1dd20 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1dd30 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1dd40 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1dd50 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1dd60 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1dd70 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1dd80 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1dd90 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1dda0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1ddb0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1ddc0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1ddd0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1dde0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1ddf0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1de00 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1de10 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1de20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1de30 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1de40 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1de50 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1de60 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1de70 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1de80 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1de90 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1dea0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1deb0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1dec0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1ded0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1dee0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1def0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1df00 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1df10 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1df20 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1df30 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1df40 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1df50 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1df60 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1df70 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1df80 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1df90 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1dfa0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1dfb0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1dfc0 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1dfd0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1dfe0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1dff0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1e000 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1e010 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1e020 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1e030 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1e040 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1e050 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1e060 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1e070 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1e080 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1e090 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1e0a0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1e0b0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1e0c0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1e0d0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1e0e0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1e0f0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1e100 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1e110 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1e120 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1e130 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1e140 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1e150 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1e160 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1e170 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1e180 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1e190 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1e1a0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1e1b0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1e1c0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e1d0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1e1e0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1e1f0 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1e200 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1e210 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1e220 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1e230 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e240 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1e250 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1e260 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1e270 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1e280 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e290 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1e2a0 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1e2b0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20  ase OP_SeekLT:  
1e2c0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e2d0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e2e0 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f  eekLE:         /
1e2f0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1e300 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
1e310 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e320 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e330 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
1e340 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1e350 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
1e360 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  oc;.  VdbeCursor
1e370 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64   *pC;.  Unpacked
1e380 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20  Record r;.  int 
1e390 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b  nField;.  i64 iK
1e3a0 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ey;      /* The 
1e3b0 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20  rowid we are to 
1e3c0 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  seek to */..  as
1e3d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e3e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e3f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1e400 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
1e410 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e420 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e430 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1e440 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1e450 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1e460 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1e470 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
1e480 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
1e490 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
1e4a0 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
1e4b0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1e4c0 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
1e4d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1e4e0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1e4f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1e500 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20  rsor!=0 );.  oc 
1e510 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
1e520 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1e530 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1e540 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
1e550 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
1e560 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 46  ;.#endif..  /* F
1e570 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69 74 68  or a cursor with
1e580 20 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   the BTREE_SEEK_
1e590 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68  EQ hint, only th
1e5a0 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a  e OP_SeekGE and.
1e5b0 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f    ** OP_SeekLE o
1e5c0 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77  pcodes are allow
1e5d0 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75  ed, and these mu
1e5e0 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c  st be immediatel
1e5f0 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 2a 2a 20  y followed.  ** 
1e600 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f  by an OP_IdxGT o
1e610 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64  r OP_IdxLT opcod
1e620 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  e, respectively,
1e630 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
1e640 65 79 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20  ey..  */.#ifdef 
1e650 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
1e660 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  f( sqlite3BtreeC
1e670 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
1e680 3e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  >pCursor, BTREE_
1e690 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20  SEEK_EQ) ){.    
1e6a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1e6b0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c  ode==OP_SeekGE |
1e6c0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1e6d0 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
1e6e0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
1e6f0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
1e700 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
1e710 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
1e720 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
1e730 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29  .p1==pOp[0].p1 )
1e740 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1e750 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p2==pOp[0].
1e760 70 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  p2 );.    assert
1e770 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70  ( pOp[1].p3==pOp
1e780 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 61 73  [0].p3 );.    as
1e790 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e  sert( pOp[1].p4.
1e7a0 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29  i==pOp[0].p4.i )
1e7b0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20  ;.  }.#endif. . 
1e7c0 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1e7d0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 69   ){.    /* The i
1e7e0 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
1e7f0 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
1e800 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
1e810 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
1e820 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
1e830 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
1e840 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
1e850 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
1e860 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73   do.    ** the s
1e870 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20  eek, so convert 
1e880 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20  it. */.    pIn3 
1e890 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1e8a0 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  ;.    if( (pIn3-
1e8b0 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
1e8c0 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
1e8d0 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
1e8e0 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  .      applyNume
1e8f0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
1e900 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
1e910 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  iKey = sqlite3Vd
1e920 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29  beIntValue(pIn3)
1e930 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
1e940 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
1e950 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1e960 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
1e970 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20   without.    ** 
1e980 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1e990 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1e9a0 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1e9b0 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1e9c0 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1e9d0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
1e9e0 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  0 ){.      if( (
1e9f0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1ea00 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
1ea10 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1ea20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  P3 value cannot 
1ea30 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1ea40 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20  o any kind of a 
1ea50 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20  number,.        
1ea60 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b  ** then the seek
1ea70 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1ea80 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20  , so jump to P2 
1ea90 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  */.        VdbeB
1eaa0 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
1eab0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1eac0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
1ead0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1eae0 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
1eaf0 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
1eb00 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
1eb10 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
1eb20 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
1eb30 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20  , substitute >= 
1eb40 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20  for > and < for 
1eb50 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20  <=. e.g. if the 
1eb60 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20  search term.    
1eb70 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20    ** is 4.9 and 
1eb80 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72  the integer appr
1eb90 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20  oximation 5:.   
1eba0 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20     **.      **  
1ebb0 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29        (x >  4.9)
1ebc0 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d      ->     (x >=
1ebd0 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   5).      **    
1ebe0 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20      (x <= 4.9)  
1ebf0 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35    ->     (x <  5
1ec00 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ).      */.     
1ec10 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28   if( pIn3->u.r<(
1ec20 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1ec30 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1ec40 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65  P_SeekGE==(OP_Se
1ec50 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekGT-1) );.     
1ec60 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1ec70 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45  ekLT==(OP_SeekLE
1ec80 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1ec90 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1eca0 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  E & 0x0001)==(OP
1ecb0 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
1ecc0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1ecd0 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1ece0 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1ecf0 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20  001) ) oc--;.   
1ed00 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1ed10 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1ed20 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c  ion iKey is smal
1ed30 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ler than the act
1ed40 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1ed50 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1ed60 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72  ubstitute <= for
1ed70 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e   < and > for >=.
1ed80 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20    */.      else 
1ed90 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64  if( pIn3->u.r>(d
1eda0 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
1edb0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1edc0 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65  _SeekLE==(OP_See
1edd0 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kLT+1) );.      
1ede0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1edf0 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b  kGT==(OP_SeekGE+
1ee00 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1ee10 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54  sert( (OP_SeekLT
1ee20 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1ee30 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29  SeekGE & 0x0001)
1ee40 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1ee50 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
1ee60 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
1ee70 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20  01) ) oc++;.    
1ee80 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72    }.    } .    r
1ee90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1eea0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1eeb0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1eec0 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
1eed0 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65  s);.    pC->move
1eee0 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
1eef0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
1ef00 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66  Delete */.    if
1ef10 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1ef20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1ef30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ef40 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1ef50 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1ef60 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
1ef70 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1ef80 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1ef90 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1efa0 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
1efb0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1efc0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1efd0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1efe0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
1eff0 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
1f000 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
1f010 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
1f020 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
1f030 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
1f040 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
1f050 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
1f060 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
1f070 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
1f080 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
1f090 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
1f0a0 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
1f0b0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
1f0c0 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
1f0d0 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
1f0e0 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
1f0f0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
1f100 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1f110 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
1f120 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
1f130 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1f140 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1f150 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
1f160 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1f170 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
1f180 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1f190 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1f1a0 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
1f1b0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
1f1c0 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
1f1d0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
1f1e0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
1f1f0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1f200 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
1f210 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
1f220 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
1f230 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d   ExpandBlob(r.aM
1f240 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  em);.    rc = sq
1f250 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1f260 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1f270 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  rsor, &r, 0, 0, 
1f280 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
1f290 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1f2a0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1f2b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f2c0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64     }.  }.  pC->d
1f2d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1f2e0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1f2f0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1f300 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1f310 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
1f320 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1f330 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63  .#endif.  if( oc
1f340 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20  >=OP_SeekGE ){  
1f350 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1f360 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGE || oc==OP_
1f370 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66  SeekGT );.    if
1f380 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1f390 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1f3a0 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kGT) ){.      re
1f3b0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1f3c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
1f3d0 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  xt(pC->pCursor, 
1f3e0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1f3f0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f400 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1f410 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
1f420 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  lse{.      res =
1f430 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   0;.    }.  }els
1f440 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  e{.    assert( o
1f450 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c==OP_SeekLT || 
1f460 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  oc==OP_SeekLE );
1f470 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c  .    if( res>0 |
1f480 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1f490 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20  =OP_SeekLT) ){. 
1f4a0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1f4b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1f4c0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
1f4d0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1f4e0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1f4f0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1f500 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f510 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
1f520 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
1f530 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
1f540 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
1f550 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
1f560 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65  k to.      ** se
1f570 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
1f580 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a   case..      */.
1f590 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
1f5a0 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
1f5b0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
1f5c0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1f5d0 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62  p->p2>0 );.  Vdb
1f5e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
1f5f0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
1f600 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  s ){.    goto ju
1f610 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
1f620 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1f630 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20  ode: Seek P1 P2 
1f640 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1f650 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d  s:  intkey=r[P2]
1f660 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
1f670 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f  open table curso
1f680 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f  r and P2 is a ro
1f690 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72  wid integer.  Ar
1f6a0 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20  range.** for P1 
1f6b0 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20  to move so that 
1f6c0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1f6d0 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20   rowid given by 
1f6e0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
1f6f0 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66  s actually a def
1f700 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
1f710 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
1f720 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
1f730 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
1f740 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
1f750 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
1f760 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
1f770 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
1f780 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
1f790 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1f7a0 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f  : {    /* in2 */
1f7b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f7c0 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
1f7d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f7e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f7f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f800 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f810 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1f820 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1f830 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
1f840 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1f850 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
1f860 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20  w = 0;.  pIn2 = 
1f870 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
1f880 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1f890 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1f8a0 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1f8b0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1f8c0 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61  veto = 1;.  brea
1f8d0 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1f8e0 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1f8f0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1f900 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1f910 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1f920 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1f930 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1f940 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1f950 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1f960 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1f970 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1f980 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1f990 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1f9a0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1f9b0 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
1f9c0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1f9d0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1f9e0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1f9f0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1fa00 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
1fa10 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1fa20 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1fa30 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
1fa40 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
1fa50 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
1fa60 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1fa70 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
1fa80 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
1fa90 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1faa0 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62  e where it can b
1fab0 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
1fac0 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72   the forward dir
1fad0 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78  ection.  The Nex
1fae0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
1faf0 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20  ll work,.** but 
1fb00 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73  not the Prev ins
1fb10 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1fb20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1fb30 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
1fb40 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
1fb50 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1fb60 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
1fb70 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1fb80 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1fb90 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1fba0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1fbb0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1fbc0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1fbd0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1fbe0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1fbf0 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1fc00 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1fc10 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1fc20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1fc30 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
1fc40 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1fc50 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1fc60 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1fc70 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1fc80 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
1fc90 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1fca0 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1fcb0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1fcc0 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
1fcd0 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
1fce0 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
1fcf0 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
1fd00 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
1fd10 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
1fd20 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
1fd30 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1fd40 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
1fd50 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1fd60 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
1fd70 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
1fd80 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
1fd90 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
1fda0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
1fdb0 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
1fdc0 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
1fdd0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
1fde0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
1fdf0 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
1fe00 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
1fe10 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
1fe20 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
1fe30 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1fe40 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f   NotExists, NoCo
1fe50 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  nflict.*/./* Opc
1fe60 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
1fe70 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1fe80 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1fe90 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1fea0 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1feb0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1fec0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1fed0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1fee0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1fef0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1ff00 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1ff10 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1ff20 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1ff30 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
1ff40 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
1ff50 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
1ff60 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1ff70 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
1ff80 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
1ff90 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
1ffa0 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
1ffb0 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
1ffc0 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
1ffd0 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
1ffe0 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
1fff0 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
20000 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
20010 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
20020 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
20030 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
20040 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
20050 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
20060 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
20070 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
20080 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
20090 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
200a0 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
200b0 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
200c0 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
200d0 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
200e0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
200f0 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
20100 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
20110 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
20120 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
20130 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
20140 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
20150 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
20160 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
20170 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
20180 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20190 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
201a0 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
201b0 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
201c0 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
201d0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
201e0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
201f0 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
20200 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
20210 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
20220 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20230 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
20240 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
20250 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  ase OP_NoConflic
20260 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  t:     /* jump, 
20270 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
20280 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
20290 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
202a0 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
202b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
202c0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
202d0 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e  eadyExists;.  in
202e0 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e  t takeJump;.  in
202f0 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73  t ii;.  VdbeCurs
20300 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
20310 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65  s;.  char *pFree
20320 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
20330 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
20340 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
20350 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
20360 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
20370 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
20380 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20  + sizeof(Mem)*4 
20390 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
203a0 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20  LITE_TEST.  if( 
203b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
203c0 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c  NoConflict ) sql
203d0 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
203e0 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  ++;.#endif..  as
203f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20400 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20410 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
20420 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
20430 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
20440 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20450 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20460 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
20470 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
20480 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
20490 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
204a0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
204b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
204c0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
204d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
204e0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
204f0 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20  ;.  pFree = 0;. 
20500 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
20510 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
20520 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
20530 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
20540 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
20550 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70  ;.    r.aMem = p
20560 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d  In3;.    for(ii=
20570 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
20580 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73  ii++){.      ass
20590 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
205a0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a  &r.aMem[ii]) );.
205b0 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
205c0 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23  (&r.aMem[ii]);.#
205d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
205e0 55 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20  UG.      if( ii 
205f0 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ) REGISTER_TRACE
20600 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e  (pOp->p3+ii, &r.
20610 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69  aMem[ii]);.#endi
20620 66 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78  f.    }.    pIdx
20630 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73  Key = &r;.  }els
20640 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  e{.    pIdxKey =
20650 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f   sqlite3VdbeAllo
20660 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  cUnpackedRecord(
20670 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65  .        pC->pKe
20680 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c  yInfo, aTempRec,
20690 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63   sizeof(aTempRec
206a0 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b  ), &pFree.    );
206b0 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
206c0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
206d0 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
206e0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
206f0 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 45 78 70  _Blob );.    Exp
20700 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
20710 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
20720 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
20730 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
20740 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
20750 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
20760 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
20770 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d   0;.  takeJump =
20780 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
20790 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
207a0 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
207b0 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
207c0 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
207d0 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
207e0 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
207f0 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
20800 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
20810 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
20820 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
20830 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
20840 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49   for(ii=0; ii<pI
20850 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69  dxKey->nField; i
20860 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
20870 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69  pIdxKey->aMem[ii
20880 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
20890 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61  ll ){.        ta
208a0 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20  keJump = 1;.    
208b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
208c0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
208d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
208e0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
208f0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  C->pCursor, pIdx
20900 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
20910 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
20920 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
20930 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
20940 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  K ){.    break;.
20950 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
20960 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
20970 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
20980 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
20990 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
209a0 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
209b0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
209c0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
209d0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
209e0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
209f0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
20a00 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
20a10 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
20a20 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
20a30 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
20a40 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
20a50 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
20a60 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
20a70 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65  n(takeJump||alre
20a80 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b  adyExists==0,2);
20a90 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d  .    if( takeJum
20aa0 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69  p || !alreadyExi
20ab0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
20ac0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
20ad0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20ae0 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
20af0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
20b00 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
20b10 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
20b20 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
20b30 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
20b40 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
20b50 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
20b60 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61   keys).  P3 is a
20b70 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  n integer rowid.
20b80 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74    If P1 does not
20b90 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
20ba0 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20  d with.** rowid 
20bb0 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  P3 then jump imm
20bc0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
20bd0 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
20be0 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c   raise an.** SQL
20bf0 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f  ITE_CORRUPT erro
20c00 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  r. If P1 does co
20c10 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
20c20 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
20c30 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
20c40 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
20c50 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
20c60 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
20c70 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
20c80 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
20c90 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
20ca0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
20cb0 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
20cc0 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
20cd0 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
20ce0 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
20cf0 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
20d00 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
20d10 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
20d20 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
20d30 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
20d40 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
20d50 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
20d60 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
20d70 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
20d80 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
20d90 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
20da0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
20db0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20dc0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
20dd0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
20de0 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
20df0 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
20e00 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
20e10 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
20e20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
20e30 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
20e40 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
20e50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
20e60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
20e70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
20e80 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
20e90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
20ea0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
20eb0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
20ec0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
20ed0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
20ee0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
20ef0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
20f00 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61   = 0;.#endif.  a
20f10 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20f20 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
20f30 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
20f40 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  eg==0 );.  pCrsr
20f50 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
20f60 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
20f70 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  =0 );.  res = 0;
20f80 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e  .  iKey = pIn3->
20f90 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  u.i;.  rc = sqli
20fa0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
20fb0 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
20fc0 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
20fd0 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
20fe0 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d  QLITE_OK || res=
20ff0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  =0 );.  pC->move
21000 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
21010 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
21020 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e  Delete */.  pC->
21030 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
21040 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21050 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
21060 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
21070 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  to = 0;.  VdbeBr
21080 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
21090 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ,2);.  pC->seekR
210a0 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69  esult = res;.  i
210b0 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
210c0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
210d0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66  ITE_OK );.    if
210e0 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
210f0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
21100 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
21110 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21120 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
21130 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
21140 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21150 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50  e: Sequence P1 P
21160 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
21170 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f  sis: r[P2]=curso
21180 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a  r[P1].ctr++.**.*
21190 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
211a0 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
211b0 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
211c0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
211d0 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
211e0 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
211f0 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
21200 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
21210 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
21220 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
21230 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
21240 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
21250 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
21260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
21270 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
21280 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21290 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
212a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
212b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d  apCsr[pOp->p1]!=
212c0 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  0 );.  pOut = ou
212d0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
212e0 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
212f0 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
21300 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
21310 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
21320 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
21330 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
21340 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
21350 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
21360 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
21370 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
21380 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
21390 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
213a0 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
213b0 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
213c0 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
213d0 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
213e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
213f0 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
21400 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
21410 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
21420 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
21430 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
21440 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
21450 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
21460 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
21470 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
21480 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
21490 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a  DBE that holds .
214a0 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ** the largest p
214b0 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
214c0 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
214d0 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  r. No new record
214e0 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20   numbers are.** 
214f0 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
21500 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ss than this val
21510 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61  ue. When this va
21520 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
21530 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20  maximum, .** an 
21540 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f  SQLITE_FULL erro
21550 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
21560 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
21570 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
21580 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74  the '.** generat
21590 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
215a0 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e  . This P3 mechan
215b0 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
215c0 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
215d0 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
215e0 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
215f0 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
21600 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
21610 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b  out2 */.  i64 v;
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
21640 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
21650 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
21660 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
21670 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
21680 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
21690 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
216a0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
216b0 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
216c0 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
216d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
216e0 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
216f0 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
21700 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
21710 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
21720 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
21730 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
21740 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
21750 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
21760 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
21770 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
21780 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
21790 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
217a0 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f   = 0;.  pOut = o
217b0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
217c0 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
217d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
217e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
217f0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
21800 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21810 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
21820 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21830 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
21840 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
21850 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
21860 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
21870 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
21880 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
21890 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
218a0 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
218b0 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
218c0 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
218d0 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
218e0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
218f0 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
21900 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
21910 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
21920 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
21930 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
21940 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
21950 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
21960 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
21970 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
21980 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
21990 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
219a0 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
219b0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
219c0 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
219d0 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
219e0 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
219f0 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
21a00 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
21a10 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
21a20 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
21a30 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
21a40 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
21a50 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
21a60 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
21a70 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
21a80 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
21a90 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
21aa0 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e  up to 100 times.
21ab0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
21ac0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
21ad0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
21ae0 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20  E_32BIT_ROWID.# 
21af0 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
21b00 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65  ID 0x7fffffff.#e
21b10 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20  lse.    /* Some 
21b20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61  compilers compla
21b30 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e  in about constan
21b40 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30  ts of the form 0
21b50 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
21b60 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73  f..    ** Others
21b70 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
21b80 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
21b90 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c  fffLL.  The foll
21ba0 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d  owing macro seem
21bb0 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76  s.    ** to prov
21bc0 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  ide the constant
21bd0 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c   while making al
21be0 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70  l compilers happ
21bf0 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65  y..    */.#   de
21c00 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20  fine MAX_ROWID  
21c10 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78  (i64)( (((u64)0x
21c20 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c  7fffffff)<<32) |
21c30 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66   (u64)0xffffffff
21c40 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69   ).#endif..    i
21c50 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f  f( !pC->useRando
21c60 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
21c70 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
21c80 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  eLast(pC->pCurso
21c90 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
21ca0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
21cb0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
21cc0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
21cd0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
21ce0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
21cf0 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20         v = 1;   
21d00 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d  /* IMP: R-61914-
21d10 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d  48074 */.      }
21d20 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73  else{.        as
21d30 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
21d40 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
21d50 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a  pC->pCursor) );.
21d60 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
21d70 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
21d80 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
21d90 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
21da0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
21db0 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20   );   /* Cannot 
21dc0 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42  fail following B
21dd0 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
21de0 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58        if( v>=MAX
21df0 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20  _ROWID ){.      
21e00 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
21e10 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
21e20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21e30 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
21e40 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
21e50 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  7 */.        }. 
21e60 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69       }.    }..#i
21e70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21e80 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
21e90 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
21ea0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65  ){.      /* Asse
21eb0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
21ec0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
21ed0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  l. */.      asse
21ee0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
21ef0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46  .      if( p->pF
21f00 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  rame ){.        
21f10 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
21f20 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
21f30 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
21f40 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
21f50 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
21f60 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
21f70 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
21f80 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
21f90 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
21fa0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
21fb0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46        pMem = &pF
21fc0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
21fd0 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  p3];.      }else
21fe0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  {.        /* Ass
21ff0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
22000 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
22010 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
22020 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
22030 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
22040 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
22050 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
22060 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ->p3];.        m
22070 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
22080 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  p, pMem);.      
22090 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
220a0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29  memIsValid(pMem)
220b0 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53   );..      REGIS
220c0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
220d0 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
220e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
220f0 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
22100 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
22110 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
22120 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
22130 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
22140 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
22150 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d    if( pMem->u.i=
22160 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43  =MAX_ROWID || pC
22170 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
22180 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
22190 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
221a0 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d  /* IMP: R-12275-
221b0 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20  61338 */.       
221c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
221d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
221e0 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d  }.      if( v<pM
221f0 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20  em->u.i+1 ){.   
22200 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75       v = pMem->u
22210 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a  .i + 1;.      }.
22220 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
22230 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  = v;.    }.#endi
22240 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73  f.    if( pC->us
22250 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
22260 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45        /* IMPLEME
22270 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37  NTATION-OF: R-07
22280 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65  677-41881 If the
22290 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69   largest ROWID i
222a0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20  s equal to the. 
222b0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20       ** largest 
222c0 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72  possible integer
222d0 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37   (92233720368547
222e0 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20  75807) then the 
222f0 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a  database.      *
22300 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20  * engine starts 
22310 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65  picking positive
22320 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44   candidate ROWID
22330 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69  s at random unti
22340 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69  l.      ** it fi
22350 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20  nds one that is 
22360 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
22370 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  sed. */.      as
22380 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30  sert( pOp->p3==0
22390 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f   );  /* We canno
223a0 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72  t be in random r
223b0 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69  owid mode if thi
223c0 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20  s is.           
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223e0 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52    ** an AUTOINCR
223f0 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a  EMENT table. */.
22400 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
22410 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
22420 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
22430 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26  ess(sizeof(v), &
22440 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d  v);.        v &=
22450 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
22460 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65   v++;  /* Ensure
22470 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74   that v is great
22480 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a  er than zero */.
22490 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28        }while(  (
224a0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72  (rc = sqlite3Btr
224b0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
224c0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
224d0 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20   (u64)v,.       
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22500 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65            0, &re
22510 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a  s))==SQLITE_OK).
22520 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
22530 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20  res==0).        
22540 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30      && (++cnt<10
22550 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0));.      if( r
22560 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
22570 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
22580 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
22590 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
225a0 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20  38219-53002 */. 
225b0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
225c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
225d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
225e0 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a  sert( v>0 );  /*
225f0 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35   EV: R-40812-035
22600 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  70 */.    }.    
22610 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
22620 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
22630 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22640 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
22650 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
22660 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22670 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
22680 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
22690 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
226a0 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32  =r[P3] data=r[P2
226b0 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  ].**.** Write an
226c0 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
226d0 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
226e0 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
226f0 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
22700 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
22710 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
22720 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
22730 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
22740 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
22750 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
22760 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
22770 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
22780 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
22790 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
227a0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
227b0 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
227c0 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
227d0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
227e0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
227f0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
22800 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
22810 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
22820 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
22830 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
22840 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
22850 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
22860 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
22870 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
22880 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
22890 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
228a0 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
228b0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
228c0 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
228d0 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
228e0 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
228f0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
22900 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
22910 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74   is set and if t
22920 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
22930 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70  the last seek op
22940 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45  eration (OP_NotE
22950 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63  xists) was a suc
22960 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a  cess, then this.
22970 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c  ** operation wil
22980 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f  l not attempt to
22990 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70   find the approp
229a0 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65  riate row before
229b0 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e   doing.** the in
229c0 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e  sert but will in
229d0 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20  stead overwrite 
229e0 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65  the row that the
229f0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75   cursor is.** cu
22a00 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
22a10 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79   to.  Presumably
22a20 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e  , the prior OP_N
22a30 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a  otExists opcode.
22a40 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70  ** has already p
22a50 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75  ositioned the cu
22a60 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20  rsor correctly. 
22a70 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
22a80 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74  mization.** that
22a90 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61   boosts performa
22aa0 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20  nce by avoiding 
22ab0 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e  redundant seeks.
22ac0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
22ad0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
22ae0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
22af0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70  this opcode is p
22b00 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44  art of an.** UPD
22b10 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ATE operation.  
22b20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68  Otherwise (if th
22b30 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29  e flag is clear)
22b40 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
22b50 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20  e.** is part of 
22b60 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74  an INSERT operat
22b70 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72  ion.  The differ
22b80 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70  ence is only imp
22b90 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  ortant to.** the
22ba0 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a   update hook..**
22bb0 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
22bc0 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
22bd0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
22be0 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  g the table-name
22bf0 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e  , or.** may be N
22c00 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f  ULL. If it is no
22c10 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
22c20 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a   update-hook .**
22c30 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
22c40 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
22c50 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  voked following 
22c60 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
22c70 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
22c80 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
22c90 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
22ca0 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
22cb0 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
22cc0 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
22cd0 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
22ce0 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
22cf0 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
22d00 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
22d10 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
22d20 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
22d30 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
22d40 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
22d50 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
22d60 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
22d70 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
22d80 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
22d90 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
22da0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
22db0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
22dc0 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
22dd0 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
22de0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
22df0 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
22e00 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  xInsert..*/./* O
22e10 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74  pcode: InsertInt
22e20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
22e30 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e  ** Synopsis:  in
22e40 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50  tkey=P3 data=r[P
22e50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  2].**.** This wo
22e60 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
22e70 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70   OP_Insert excep
22e80 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69  t that the key i
22e90 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  s the.** integer
22ea0 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74   value P3, not t
22eb0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
22ec0 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69  integer stored i
22ed0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
22ee0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
22ef0 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  : .case OP_Inser
22f00 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tInt: {.  Mem *p
22f10 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Data;       /* M
22f20 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
22f30 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63  data for the rec
22f40 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
22f50 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65  ed */.  Mem *pKe
22f60 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  y;        /* MEM
22f70 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65   cell holding ke
22f80 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  y  for the recor
22f90 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  d */.  i64 iKey;
22fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22fb0 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72  integer ROWID or
22fc0 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63   key for the rec
22fd0 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
22fe0 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ed */.  VdbeCurs
22ff0 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72  or *pC;   /* Cur
23000 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74  sor to table int
23010 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69  o which insert i
23020 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  s written */.  i
23030 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  nt nZero;       
23040 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
23050 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65  ro-bytes to appe
23060 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b  nd */.  int seek
23070 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73  Result;   /* Res
23080 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65  ult of prior see
23090 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45  k or 0 if no USE
230a0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
230b0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
230c0 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61  *zDb;  /* databa
230d0 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  se name - used b
230e0 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  y the update hoo
230f0 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  k */.  const cha
23100 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c  r *zTbl; /* Tabl
23110 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
23120 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b   the opdate hook
23130 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20   */.  int op;   
23140 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
23150 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f  e for update hoo
23160 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45  k: SQLITE_UPDATE
23170 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52   or SQLITE_INSER
23180 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20  T */..  pData = 
23190 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
231a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
231b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
231c0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
231d0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
231e0 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70  id(pData) );.  p
231f0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23200 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23210 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
23220 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
23230 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23240 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
23250 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
23260 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
23270 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
23280 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
23290 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  a);..  if( pOp->
232a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
232b0 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20  t ){.    pKey = 
232c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
232d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
232e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
232f0 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
23300 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79   memIsValid(pKey
23310 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
23320 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
23330 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79   pKey);.    iKey
23340 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
23350 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
23360 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
23370 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
23380 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e      iKey = pOp->
23390 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  p3;.  }..  if( p
233a0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
233b0 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
233c0 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f  ange++;.  if( pO
233d0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c  p->p5 & OPFLAG_L
233e0 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c  ASTROWID ) db->l
233f0 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
23400 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69  owid = iKey;.  i
23410 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
23420 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
23430 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a    pData->z = 0;.
23440 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30      pData->n = 0
23450 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
23460 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c  ssert( pData->fl
23470 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
23480 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a  MEM_Str) );.  }.
23490 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28    seekResult = (
234a0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
234b0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
234c0 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
234d0 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44  t : 0);.  if( pD
234e0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
234f0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65  _Zero ){.    nZe
23500 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a  ro = pData->u.nZ
23510 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ero;.  }else{.  
23520 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d    nZero = 0;.  }
23530 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23540 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70  treeInsert(pC->p
23550 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c  Cursor, 0, iKey,
23560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23570 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
23580 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e  ->z, pData->n, n
23590 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  Zero,.          
235a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235b0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
235c0 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65  G_APPEND)!=0, se
235d0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
235e0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
235f0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
23600 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
23610 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
23620 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
23630 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
23640 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
23650 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
23660 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
23670 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
23680 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
23690 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
236a0 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f  e;.    zTbl = pO
236b0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20  p->p4.z;.    op 
236c0 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
236d0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
236e0 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
236f0 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b   SQLITE_INSERT);
23700 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
23710 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
23720 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
23730 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
23740 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62  rg, op, zDb, zTb
23750 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
23760 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
23770 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   );.  }.  break;
23780 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
23790 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34  elete P1 P2 * P4
237a0 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P5.**.** Delete
237b0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
237c0 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
237d0 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
237e0 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
237f0 49 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  If the P5 parame
23800 74 65 72 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  ter is non-zero,
23810 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
23820 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
23830 67 20 61 74 20 0a 2a 2a 20 65 69 74 68 65 72 20  g at .** either 
23840 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
23850 70 72 65 76 69 6f 75 73 20 72 65 63 6f 72 64 20  previous record 
23860 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
23870 20 69 74 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20   it is left .** 
23880 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
23890 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
238a0 6e 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  n the next Next 
238b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
238c0 20 62 65 20 61 20 0a 2a 2a 20 6e 6f 2d 6f 70 2e   be a .** no-op.
238d0 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e   As a result, in
238e0 20 74 68 69 73 20 63 61 73 65 20 69 74 20 69 73   this case it is
238f0 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 20 61 20   OK to delete a 
23900 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
23910 69 6e 20 61 0a 2a 2a 20 4e 65 78 74 20 6c 6f 6f  in a.** Next loo
23920 70 2e 20 49 66 20 50 35 20 69 73 20 7a 65 72 6f  p. If P5 is zero
23930 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
23940 72 20 69 73 20 6c 65 66 74 20 69 6e 20 61 6e 20  r is left in an 
23950 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e  undefined state.
23960 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
23970 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
23980 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
23990 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
239a0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
239b0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
239c0 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
239d0 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
239e0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
239f0 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
23a00 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
23a10 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
23a20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
23a30 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
23a40 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
23a50 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
23a60 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
23a70 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
23a80 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
23a90 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
23aa0 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
23ab0 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
23ac0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
23ad0 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
23ae0 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
23af0 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
23b00 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
23b10 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
23b20 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
23b30 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
23b40 70 43 3b 0a 20 20 75 38 20 68 61 73 55 70 64 61  pC;.  u8 hasUpda
23b50 74 65 43 61 6c 6c 62 61 63 6b 3b 0a 0a 20 20 61  teCallback;..  a
23b60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23b70 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23b80 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23b90 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23ba0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23bb0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
23bc0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
23bd0 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c   );  /* Only val
23be0 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c  id for real tabl
23bf0 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62  es, no pseudotab
23c00 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  les */.  assert(
23c10 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23c20 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 68 61 73  eto==0 );..  has
23c30 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 3d  UpdateCallback =
23c40 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
23c50 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
23c60 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  z && pC->isTable
23c70 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
23c80 26 26 20 68 61 73 55 70 64 61 74 65 43 61 6c 6c  && hasUpdateCall
23c90 62 61 63 6b 20 29 7b 0a 20 20 20 20 73 71 6c 69  back ){.    sqli
23ca0 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
23cb0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 70 43  pC->pCursor, &pC
23cc0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
23cd0 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
23ce0 49 54 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54  ITE_DEBUG.  /* T
23cf0 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  he seek operatio
23d00 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65  n that positione
23d10 64 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  d the cursor pri
23d20 6f 72 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20  or to OP_Delete 
23d30 77 69 6c 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61  will.  ** have a
23d40 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e  lso set the pC->
23d50 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65  movetoTarget fie
23d60 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ld to the rowid 
23d70 6f 66 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  of the row that.
23d80 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65    ** is being de
23d90 6c 65 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 70  leted */.  if( p
23da0 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e  Op->p4.z && pC->
23db0 69 73 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e  isTable && pOp->
23dc0 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20 69 36 34  p5==0 ){.    i64
23dd0 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 73   iKey = 0;.    s
23de0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
23df0 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
23e00 26 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65  &iKey);.    asse
23e10 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  rt( pC->movetoTa
23e20 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 20 0a 20  rget==iKey ); . 
23e30 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20 72 63   }.#endif. .  rc
23e40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
23e50 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
23e60 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70  r, pOp->p5);.  p
23e70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
23e80 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
23e90 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
23ea0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
23eb0 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
23ec0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
23ed0 26 20 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62  & hasUpdateCallb
23ee0 61 63 6b 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78  ack ){.    db->x
23ef0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
23f00 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
23f10 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20  QLITE_DELETE,.  
23f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f30 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43        db->aDb[pC
23f40 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f  ->iDb].zName, pO
23f50 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76  p->p4.z, pC->mov
23f60 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20  etoTarget);.    
23f70 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
23f80 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  =0 );.  }.  if( 
23f90 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
23fa0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
23fb0 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b  hange++;.  break
23fc0 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  ;.}./* Opcode: R
23fd0 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20  esetCount * * * 
23fe0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  * *.**.** The va
23ff0 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  lue of the chang
24000 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70  e counter is cop
24010 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ied to the datab
24020 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68  ase handle.** ch
24030 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65  ange counter (re
24040 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71  turned by subseq
24050 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71  uent calls to sq
24060 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29  lite3_changes())
24070 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d  ..** Then the VM
24080 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
24090 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73  e counter resets
240a0 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69   to 0..** This i
240b0 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
240c0 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63  r programs..*/.c
240d0 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e  ase OP_ResetCoun
240e0 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  t: {.  sqlite3Vd
240f0 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
24100 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
24110 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
24120 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24130 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d  pcode: SorterCom
24140 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
24150 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
24160 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28  f key(P1)!=trim(
24170 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50  r[P3],P4) goto P
24180 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
24190 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
241a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
241b0 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69  compares a prefi
241c0 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  x of the.** reco
241d0 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  rd blob in regis
241e0 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61  ter P3 against a
241f0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65   prefix of the e
24200 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68  ntry that .** th
24210 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  e sorter cursor 
24220 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73  currently points
24230 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66   to.  Only the f
24240 69 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a  irst P4 fields.*
24250 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74  * of r[P3] and t
24260 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64  he sorter record
24270 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a   are compared..*
24280 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
24290 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20  3 or the sorter 
242a0 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20  contains a NULL 
242b0 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20  in one of their 
242c0 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66  significant.** f
242d0 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74  ields (not count
242e0 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64  ing the P4 field
242f0 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69  s at the end whi
24300 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20  ch are ignored) 
24310 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  then.** the comp
24320 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65  arison is assume
24330 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a  d to be equal..*
24340 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67  *.** Fall throug
24350 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75  h to next instru
24360 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f  ction if the two
24370 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65   records compare
24380 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63   equal to.** eac
24390 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74  h other.  Jump t
243a0 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65  o P2 if they are
243b0 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63   different..*/.c
243c0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d  ase OP_SorterCom
243d0 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  pare: {.  VdbeCu
243e0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
243f0 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43  res;.  int nKeyC
24400 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ol;..  pC = p->a
24410 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24420 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
24430 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72  r(pC) );.  asser
24440 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
24450 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49  P4_INT32 );.  pI
24460 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
24470 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d  p3];.  nKeyCol =
24480 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65   pOp->p4.i;.  re
24490 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  s = 0;.  rc = sq
244a0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
244b0 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
244c0 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b   nKeyCol, &res);
244d0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
244e0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
244f0 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
24500 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
24510 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
24520 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
24530 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
24540 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
24550 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
24560 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
24570 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74  the current sort
24580 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74  er data for sort
24590 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  er cursor P1..**
245a0 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20   Then clear the 
245b0 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61  column header ca
245c0 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33  che on cursor P3
245d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
245e0 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  ode is normally 
245f0 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65  use to move a re
24600 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20  cord out of the 
24610 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a  sorter and into.
24620 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68  ** a register th
24630 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  at is the source
24640 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61   for a pseudo-ta
24650 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74  ble cursor creat
24660 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e  ed using.** Open
24670 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73  Pseudo.  That ps
24680 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
24690 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61  r is the one tha
246a0 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  t is identified 
246b0 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  by.** parameter 
246c0 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68  P3.  Clearing th
246d0 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68  e P3 column cach
246e0 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  e as part of thi
246f0 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a  s opcode saves.*
24700 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67  * us from having
24710 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61   to issue a sepa
24720 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73  rate NullRow ins
24730 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61  truction to clea
24740 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f  r that cache..*/
24750 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44  .case OP_SorterD
24760 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
24770 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74  sor *pC;..  pOut
24780 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
24790 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
247a0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
247b0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
247c0 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
247d0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
247e0 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
247f0 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
24800 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75  QLITE_OK || (pOu
24810 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  t->flags & MEM_B
24820 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  lob) );.  assert
24830 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24840 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24850 6f 72 20 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  or );.  p->apCsr
24860 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65  [pOp->p3]->cache
24870 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24880 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
24890 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
248a0 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
248b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
248c0 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
248d0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
248e0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
248f0 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20  te row data for 
24900 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
24910 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
24920 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
24930 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
24940 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
24950 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
24960 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
24970 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
24980 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
24990 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
249a0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
249b0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
249c0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
249d0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
249e0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
249f0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
24a00 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
24a10 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20   RowKey P1 P2 * 
24a20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
24a30 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a   r[P2]=key.**.**
24a40 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
24a50 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
24a60 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
24a70 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
24a80 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
24a90 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
24aa0 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
24ab0 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
24ac0 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
24ad0 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
24ae0 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
24af0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
24b00 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
24b10 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
24b20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
24b30 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
24b40 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
24b50 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
24b60 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
24b70 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
24b80 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
24b90 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
24ba0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
24bb0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
24bc0 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36   u32 n;.  i64 n6
24bd0 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  4;..  pOut = &aM
24be0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d  em[pOp->p2];.  m
24bf0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
24c00 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
24c10 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79  Note that RowKey
24c20 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65   and RowData are
24c30 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20   really exactly 
24c40 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63  the same instruc
24c50 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  tion */.  assert
24c60 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24c70 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24c80 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24c90 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24ca0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
24cb0 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
24cc0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
24cd0 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  le || pOp->opcod
24ce0 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e!=OP_RowData );
24cf0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
24d00 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70  sTable==0 || pOp
24d10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
24d20 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
24d30 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
24d40 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
24d50 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
24d60 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
24d70 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
24d80 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
24d90 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
24da0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  pC->pCursor;..  
24db0 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79  /* The OP_RowKey
24dc0 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20   and OP_RowData 
24dd0 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66  opcodes always f
24de0 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73  ollow OP_NotExis
24df0 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65  ts or.  ** OP_Re
24e00 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74  wind/Op_Next wit
24e10 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67  h no intervening
24e20 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68   instructions th
24e30 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
24e40 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72  ate.  ** the cur
24e50 73 6f 72 2e 20 20 49 66 20 74 68 69 73 20 77 68  sor.  If this wh
24e60 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65  ere not the case
24e70 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c  , on of the foll
24e80 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a  owing assert()s.
24e90 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e    ** would fail.
24ea0 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76    Should this ev
24eb0 65 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75  er change (becau
24ec0 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e  se of changes in
24ed0 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67   the code.  ** g
24ee0 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74  enerator) then t
24ef0 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20  he fix would be 
24f00 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c  to insert a call
24f10 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
24f20 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
24f30 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ()..  */.  asser
24f40 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
24f50 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
24f60 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
24f70 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
24f80 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20  pCrsr) );.#if 0 
24f90 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64   /* Not required
24fa0 20 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76   due to the prev
24fb0 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29  ious to assert()
24fc0 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20   statements */. 
24fd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
24fe0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
24ff0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
25000 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
25010 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
25020 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  ;.#endif..  if( 
25030 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
25040 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
25050 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
25060 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
25070 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
25080 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
25090 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
250a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
250b0 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
250c0 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
250d0 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
250e0 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
250f0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
25100 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
25110 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
25120 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
25130 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
25140 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f  }else{.    VVA_O
25150 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
25160 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
25170 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61  Crsr, &n);.    a
25180 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
25190 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61  E_OK );    /* Da
251a0 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
251b0 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20  fail */.    if( 
251c0 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
251d0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
251e0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
251f0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
25200 20 20 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63 61    }.  }.  testca
25210 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66  se( n==0 );.  if
25220 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
25230 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
25240 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20  Out, MAX(n,32)) 
25250 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
25260 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  em;.  }.  pOut->
25270 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54  n = n;.  MemSetT
25280 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
25290 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70  M_Blob);.  if( p
252a0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
252b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
252c0 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
252d0 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
252e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
252f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
25300 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
25310 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
25320 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
25330 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
25340 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
25350 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74  s ever cast to t
25360 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f  ext */.  UPDATE_
25370 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
25380 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
25390 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
253a0 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
253b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
253c0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
253d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
253e0 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f  =rowid.**.** Sto
253f0 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
25400 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
25410 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
25420 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
25430 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
25440 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
25450 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
25460 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
25470 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
25480 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
25490 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
254a0 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
254b0 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
254c0 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
254d0 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
254e0 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
254f0 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
25500 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
25510 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
25520 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
25530 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
25540 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
25550 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
25560 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
25570 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
25580 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
25590 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d  odule;..  pOut =
255a0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
255b0 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
255c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
255d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
255e0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
255f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25600 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25610 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25620 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
25630 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  ==0 || pC->nullR
25640 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  ow );.  if( pC->
25650 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
25660 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
25670 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
25680 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
25690 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
256a0 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
256b0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
256c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
256d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
256e0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
256f0 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
25700 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56    pVtab = pC->pV
25710 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
25720 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ;.    pModule = 
25730 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
25740 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64      assert( pMod
25750 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20  ule->xRowid );. 
25760 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
25770 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61  >xRowid(pC->pVta
25780 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  bCursor, &v);.  
25790 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
257a0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
257b0 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ab);.#endif /* S
257c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
257d0 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
257e0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
257f0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
25800 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
25810 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
25820 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28  ore(pC);.    if(
25830 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
25840 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
25850 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
25860 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ow ){.      pOut
25870 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
25880 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ll;.      break;
25890 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
258a0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
258b0 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
258c0 20 26 76 29 3b 0a 20 20 20 20 61 73 73 65 72 74   &v);.    assert
258d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
258e0 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
258f0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
25900 6f 72 52 65 73 74 6f 72 65 28 29 20 61 62 6f 76  orRestore() abov
25910 65 20 2a 2f 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  e */.  }.  pOut-
25920 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
25930 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25940 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
25950 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
25960 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
25970 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
25980 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
25990 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
259a0 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
259b0 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
259c0 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
259d0 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
259e0 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
259f0 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
25a00 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
25a10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
25a20 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
25a30 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
25a40 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25a50 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25a60 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
25a70 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
25a80 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
25a90 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
25aa0 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  f( pC->pCursor )
25ab0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  {.    sqlite3Btr
25ac0 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43  eeClearCursor(pC
25ad0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  ->pCursor);.  }.
25ae0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25af0 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50  pcode: Last P1 P
25b00 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
25b10 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
25b20 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
25b30 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
25b40 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
25b50 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
25b60 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
25b70 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
25b80 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
25b90 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
25ba0 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
25bb0 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
25bc0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
25bd0 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
25be0 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
25bf0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
25c00 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
25c10 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
25c20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
25c30 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
25c40 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
25c50 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
25c60 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
25c70 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
25c80 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
25c90 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
25ca0 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
25cb0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
25cc0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
25cd0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
25ce0 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
25cf0 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b  .case OP_Last: {
25d00 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
25d10 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
25d20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
25d30 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
25d40 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
25d50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25d60 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25d70 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25d80 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25d90 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
25da0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
25db0 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b  rsor;.  res = 0;
25dc0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
25dd0 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
25de0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
25df0 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
25e00 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
25e10 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
25e20 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
25e30 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
25e40 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
25e50 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
25e60 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 23 69 66  t = pOp->p3;.#if
25e70 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
25e80 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
25e90 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a  OP_Last;.#endif.
25ea0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
25eb0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
25ec0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
25ed0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20  ;.    if( res ) 
25ee0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
25ef0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25f00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
25f10 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
25f20 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25f30 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65  does exactly the
25f40 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f   same thing as O
25f50 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20  P_Rewind except 
25f60 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65  that.** it incre
25f70 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d  ments an undocum
25f80 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ented global var
25f90 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74  iable used for t
25fa0 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f  esting..**.** So
25fb0 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c  rting is accompl
25fc0 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67  ished by writing
25fd0 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20   records into a 
25fe0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a  sorting index,.*
25ff0 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67  * then rewinding
26000 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20   that index and 
26010 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20  playing it back 
26020 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74  from beginning t
26030 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73  o.** end.  We us
26040 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70  e the OP_Sort op
26050 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20  code instead of 
26060 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20  OP_Rewind to do 
26070 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67  the.** rewinding
26080 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f   so that the glo
26090 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c  bal variable wil
260a0 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  l be incremented
260b0 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69   and.** regressi
260c0 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74  on tests can det
260d0 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
260e0 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69  r not the optimi
260f0 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63  zer is.** correc
26100 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  tly optimizing o
26110 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73  ut sorts..*/.cas
26120 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a  e OP_SorterSort:
26130 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
26140 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20  ase OP_Sort: {  
26150 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
26160 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
26170 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f  EST.  sqlite3_so
26180 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71  rt_count++;.  sq
26190 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
261a0 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70  nt--;.#endif.  p
261b0 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
261c0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
261d0 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  T]++;.  /* Fall 
261e0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
261f0 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
26200 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
26210 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26220 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
26230 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
26240 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
26250 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
26260 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
26270 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
26280 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
26290 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
262a0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
262b0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
262c0 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ty, jump immedia
262d0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
262e0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
262f0 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
26300 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  y, fall through 
26310 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
26320 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
26330 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
26340 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
26350 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
26360 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
26370 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
26380 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
26390 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
263a0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
263b0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
263c0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
263d0 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
263e0 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rev..*/.case OP_
263f0 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
26400 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
26410 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
26420 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
26430 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
26440 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26450 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
26460 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
26470 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
26480 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
26490 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
264a0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
264b0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
264c0 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a  _SorterSort) );.
264d0 20 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65    res = 1;.#ifde
264e0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
264f0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
26500 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a  _Rewind;.#endif.
26510 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
26520 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  C) ){.    rc = s
26530 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
26540 52 65 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29  Rewind(pC, &res)
26550 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
26560 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
26570 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
26580 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20  pCrsr );.    rc 
26590 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
265a0 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
265b0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
265c0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
265d0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
265e0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
265f0 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
26600 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
26610 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
26620 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
26630 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nOp );.  VdbeBra
26640 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
26650 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
26660 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
26670 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26680 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
26690 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
266a0 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
266b0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
266c0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
266d0 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
266e0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
266f0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
26700 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
26710 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
26720 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
26730 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
26740 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
26750 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
26760 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
26770 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
26780 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
26790 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
267a0 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
267b0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
267c0 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54  lowing an SeekGT
267d0 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20  , SeekGE, or.** 
267e0 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65  OP_Rewind opcode
267f0 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
26800 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e  n the cursor.  N
26810 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ext is not allow
26820 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
26830 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
26840 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a  or OP_Last..**.*
26850 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
26860 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
26870 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
26880 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
26890 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
268a0 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
268b0 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
268c0 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
268d0 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
268e0 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
268f0 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
26900 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
26910 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
26920 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
26930 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
26940 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
26950 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
26960 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
26970 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
26980 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
26990 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
269a0 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
269b0 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
269c0 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
269d0 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
269e0 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
269f0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
26a00 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
26a10 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
26a20 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
26a30 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
26a40 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
26a50 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
26a60 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
26a70 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
26a80 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
26a90 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
26aa0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
26ab0 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65   Prev, NextIfOpe
26ac0 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  n.*/./* Opcode: 
26ad0 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32  NextIfOpen P1 P2
26ae0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
26af0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
26b00 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78 74  s just like Next
26b10 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
26b20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
26b30 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
26b40 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
26b50 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
26b60 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
26b70 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
26b80 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
26b90 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
26ba0 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
26bb0 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
26bc0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
26bd0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
26be0 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
26bf0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
26c00 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
26c10 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
26c20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
26c30 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
26c40 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
26c50 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
26c60 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
26c70 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ..**.**.** The P
26c80 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
26c90 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69  ly valid followi
26ca0 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65  ng an SeekLT, Se
26cb0 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c  ekLE, or.** OP_L
26cc0 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ast opcode used 
26cd0 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
26ce0 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73  cursor.  Prev is
26cf0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
26d00 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54  to follow SeekGT
26d10 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f  , SeekGE, or OP_
26d20 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  Rewind..**.** Th
26d30 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
26d40 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
26d50 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
26d60 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31  do-table.  If P1
26d70 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20   is.** not open 
26d80 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
26d90 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
26da0 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c  **.** The P3 val
26db0 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  ue is a hint to 
26dc0 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d  the btree implem
26dd0 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d  entation. If P3=
26de0 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e  =1, that.** mean
26df0 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69  s P1 is an SQL i
26e00 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68  ndex and that th
26e10 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
26e20 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a  ould have been.*
26e30 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61  * omitted if tha
26e40 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e  t index had been
26e50 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20   unique.  P3 is 
26e60 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69  usually 0.  P3 i
26e70 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68  s.** always eith
26e80 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a  er 0 or 1..**.**
26e90 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
26ea0 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
26eb0 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
26ec0 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
26ed0 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
26ee0 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a  Previous()..**.*
26ef0 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
26f00 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
26f10 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
26f20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
26f30 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
26f40 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
26f50 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
26f60 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ented..*/./* Opc
26f70 6f 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20  ode: PrevIfOpen 
26f80 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
26f90 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
26fa0 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
26fb0 20 50 72 65 76 20 65 78 63 65 70 74 20 74 68 61   Prev except tha
26fc0 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69  t if cursor P1 i
26fd0 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74  s not.** open it
26fe0 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70   behaves a no-op
26ff0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
27000 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a  terNext: {  /* j
27010 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
27020 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
27030 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  es;..  pC = p->a
27040 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27050 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
27060 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d  r(pC) );.  res =
27070 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
27080 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74  e3VdbeSorterNext
27090 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a  (db, pC, &res);.
270a0 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c    goto next_tail
270b0 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66  ;.case OP_PrevIf
270c0 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
270d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
270e0 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
270f0 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61  mp */.  if( p->a
27100 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30  pCsr[pOp->p1]==0
27110 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
27120 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63  all through */.c
27130 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
27140 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
27150 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20  .case OP_Next:  
27160 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
27170 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
27180 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27190 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
271a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
271b0 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  p5<ArraySize(p->
271c0 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70  aCounter) );.  p
271d0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
271e0 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70  ->p1];.  res = p
271f0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
27200 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
27210 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
27220 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
27230 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
27240 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
27250 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d   res==0 || (res=
27260 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  =1 && pC->isTabl
27270 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63  e==0) );.  testc
27280 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20  ase( res==1 );. 
27290 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
272a0 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c  code!=OP_Next ||
272b0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
272c0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
272d0 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
272e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
272f0 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Prev || pOp->p4
27300 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
27310 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20  e3BtreePrevious 
27320 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27330 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
27340 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  tIfOpen || pOp->
27350 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
27360 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
27370 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27380 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
27390 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
273a0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
273b0 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 29  e3BtreePrevious)
273c0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74  ;..  /* The Next
273d0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
273e0 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 47  used after SeekG
273f0 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52  T, SeekGE, and R
27400 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20  ewind..  ** The 
27410 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
27420 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
27430 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61  eekLT, SeekLE, a
27440 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73  nd Last. */.  as
27450 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
27460 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
27470 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
27480 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  xtIfOpen.       
27490 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
274a0 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e  P_SeekGT || pC->
274b0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
274c0 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
274d0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e  seekOp==OP_Rewin
274e0 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  d || pC->seekOp=
274f0 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73  =OP_Found);.  as
27500 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
27510 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
27520 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
27530 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  evIfOpen.       
27540 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
27550 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
27560 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
27570 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
27580 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
27590 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  );..  rc = pOp->
275a0 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
275b0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
275c0 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
275d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
275e0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
275f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
27600 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s==0,2);.  if( r
27610 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d  es==0 ){.    pC-
27620 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
27630 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f    p->aCounter[pO
27640 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66  p->p5]++;.#ifdef
27650 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
27660 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
27670 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
27680 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
27690 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
276a0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
276b0 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  else{.    pC->nu
276c0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20  llRow = 1;.  }. 
276d0 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
276e0 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
276f0 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
27700 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
27710 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
27720 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
27730 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
27740 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
27750 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
27760 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
27770 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
27780 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
27790 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
277a0 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
277b0 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
277c0 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
277d0 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68   P3 is a flag th
277e0 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69  at provides a hi
277f0 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
27800 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73   layer that this
27810 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69  .** insert is li
27820 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
27830 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  pend..**.** If P
27840 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
27850 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74  _NCHANGE bit set
27860 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  , then the chang
27870 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20  e counter is.** 
27880 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
27890 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
278a0 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
278b0 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63  NCHANGE bit is c
278c0 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  lear,.** then th
278d0 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
278e0 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
278f0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
27900 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
27910 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c  KRESULT bit set,
27920 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
27930 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75   must have.** ju
27940 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74  st done a seek t
27950 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65 72 65  o the spot where
27960 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69   the new entry i
27970 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
27980 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61  ..** This flag a
27990 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65  voids doing an e
279a0 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a  xtra seek..**.**
279b0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
279c0 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
279d0 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
279e0 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
279f0 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
27a00 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
27a10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
27a20 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
27a30 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
27a40 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
27a50 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
27a60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27a70 43 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  C;.  int nKey;. 
27a80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
27a90 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
27aa0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27ab0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
27ac0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27ad0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27ae0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27af0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
27b00 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
27b10 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
27b20 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20  sert) );.  pIn2 
27b30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
27b40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32  ;.  assert( pIn2
27b50 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
27b60 6f 62 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ob );.  if( pOp-
27b70 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
27b80 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
27b90 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e++;.  assert( p
27ba0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
27bb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
27bc0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72  sTable==0 );.  r
27bd0 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
27be0 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  In2);.  if( rc==
27bf0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
27c00 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
27c10 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
27c20 74 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  t ){.      rc = 
27c30 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
27c40 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29  rWrite(pC, pIn2)
27c50 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
27c60 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
27c70 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20  n;.      zKey = 
27c80 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72  pIn2->z;.      r
27c90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27ca0 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
27cb0 6f 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20  or, zKey, nKey, 
27cc0 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70  "", 0, 0, pOp->p
27cd0 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 28  3, .          ((
27ce0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
27cf0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
27d00 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
27d10 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 20 20   : 0).          
27d20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
27d30 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27d40 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
27d50 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
27d60 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
27d70 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
27d80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27d90 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
27da0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
27db0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d  is: key=r[P2@P3]
27dc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
27dd0 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
27de0 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
27df0 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
27e00 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
27e10 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
27e20 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
27e30 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
27e40 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
27e50 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
27e60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
27e70 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
27e80 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
27e90 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
27ea0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
27eb0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
27ec0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
27ed0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27ee0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
27ef0 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  >p2+pOp->p3<=(p-
27f00 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
27f10 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
27f20 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27f30 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27f40 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
27f50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27f60 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
27f70 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
27f80 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
27f90 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
27fa0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
27fb0 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
27fc0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
27fd0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
27fe0 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
27ff0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
28000 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  0;.  r.aMem = &a
28010 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
28020 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
28030 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
28040 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
28050 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
28060 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
28070 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
28080 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  f.  rc = sqlite3
28090 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
280a0 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
280b0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
280c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
280d0 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  && res==0 ){.   
280e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
280f0 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20  eeDelete(pCrsr, 
28100 30 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  0);.  }.  assert
28110 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
28120 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d  veto==0 );.  pC-
28130 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28140 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72  ACHE_STALE;.  br
28150 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28160 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50  e: IdxRowid P1 P
28170 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
28180 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
28190 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
281a0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
281b0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
281c0 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
281d0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
281e0 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
281f0 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
28200 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
28210 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
28220 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
28230 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
28240 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
28250 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
28260 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
28270 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
28280 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f   Rowid, MakeReco
28290 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rd..*/.case OP_I
282a0 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
282b0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
282c0 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
282d0 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73  Crsr;.  VdbeCurs
282e0 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f  or *pC;.  i64 ro
282f0 77 69 64 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  wid;..  pOut = o
28300 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
28310 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
28320 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28330 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28340 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28350 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28360 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28370 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
28380 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
28390 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
283a0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
283b0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 61 73 73 65 72  EM_Null;.  asser
283c0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
283d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
283e0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
283f0 6f 3d 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20 73 71  o==0 );..  /* sq
28400 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72 52 65  lite3VbeCursorRe
28410 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79  store() can only
28420 20 66 61 69 6c 20 69 66 20 74 68 65 20 72 65 63   fail if the rec
28430 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c  ord has been del
28440 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72  eted.  ** out fr
28450 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75 72  om under the cur
28460 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20  sor.  That will 
28470 6e 65 76 65 72 20 68 61 70 70 65 6e 64 20 66 6f  never happend fo
28480 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20  r an IdxRowid.  
28490 2a 2a 20 6f 70 63 6f 64 65 2c 20 68 65 6e 63 65  ** opcode, hence
284a0 20 74 68 65 20 4e 45 56 45 52 28 29 20 61 72 72   the NEVER() arr
284b0 6f 75 6e 64 20 74 68 65 20 63 68 65 63 6b 20 6f  ound the check o
284c0 66 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c  f the return val
284d0 75 65 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20  ue..  */.  rc = 
284e0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
284f0 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20  rRestore(pC);.  
28500 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
28510 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
28520 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28530 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
28540 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
28550 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
28560 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
28570 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
28580 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
28590 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
285a0 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
285b0 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20  Crsr, &rowid);. 
285c0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
285d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
285e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
285f0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
28600 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
28610 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  id;.    pOut->fl
28620 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
28630 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
28640 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
28650 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
28660 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
28670 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
28680 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
28690 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
286a0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
286b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
286c0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
286d0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
286e0 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
286f0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
28700 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
28710 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
28720 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
28730 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
28740 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
28750 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
28760 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
28770 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
28780 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
28790 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
287a0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
287b0 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
287c0 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
287d0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
287e0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
287f0 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
28800 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
28810 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
28820 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
28830 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
28840 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
28850 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
28860 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
28870 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
28880 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
28890 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
288a0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
288b0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
288c0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
288d0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
288e0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
288f0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
28900 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
28910 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
28920 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
28930 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
28940 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
28950 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
28960 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
28970 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
28980 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
28990 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
289a0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
289b0 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
289c0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
289d0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
289e0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
289f0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
28a00 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
28a10 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
28a20 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
28a30 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
28a40 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
28a50 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
28a60 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
28a70 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
28a80 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
28a90 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
28aa0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
28ab0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
28ac0 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
28ad0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
28ae0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
28af0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
28b00 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
28b10 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
28b20 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
28b30 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
28b40 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
28b50 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
28b60 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
28b70 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
28b80 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
28b90 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
28ba0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
28bb0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
28bc0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
28bd0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
28be0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
28bf0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
28c00 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
28c10 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
28c20 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
28c30 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
28c40 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
28c50 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
28c60 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
28c70 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
28c80 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
28c90 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
28ca0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
28cb0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
28cc0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
28cd0 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
28ce0 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
28cf0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
28d00 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
28d10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
28d20 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
28d30 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
28d40 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
28d50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
28d60 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
28d70 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
28d80 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
28d90 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
28da0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
28db0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
28dc0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
28dd0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
28de0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
28df0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
28e00 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28e10 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28e20 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28e30 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
28e40 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
28e50 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
28e60 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
28e70 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
28e80 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
28e90 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
28ea0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
28eb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
28ec0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
28ed0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
28ee0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
28ef0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
28f00 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
28f10 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
28f20 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
28f30 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
28f40 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
28f50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28f60 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
28f70 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
28f80 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
28f90 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
28fa0 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
28fb0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
28fc0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
28fd0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
28fe0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
28ff0 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
29000 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
29010 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
29020 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
29030 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
29040 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
29050 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
29060 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  es = 0;  /* Not 
29070 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
29080 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
29090 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
290a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
290b0 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20  xKeyCompare(db, 
290c0 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
290d0 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78   assert( (OP_Idx
290e0 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  LE&1)==(OP_IdxLT
290f0 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45  &1) && (OP_IdxGE
29100 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31  &1)==(OP_IdxGT&1
29110 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d  ) );.  if( (pOp-
29120 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f  >opcode&1)==(OP_
29130 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20  IdxLT&1) ){.    
29140 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
29150 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
29160 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
29170 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65  _IdxLT );.    re
29180 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73  s = -res;.  }els
29190 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
291a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
291b0 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxGE || pOp->opc
291c0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
291d0 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a  .    res++;.  }.
291e0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
291f0 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66  n(res>0,2);.  if
29200 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a  ( res>0 ) goto j
29210 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
29220 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29230 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
29240 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
29250 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
29260 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
29270 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
29280 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
29290 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
292a0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
292b0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
292c0 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
292d0 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
292e0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
292f0 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
29300 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
29310 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
29320 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
29330 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
29340 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
29350 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
29360 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
29370 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
29380 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
29390 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
293a0 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
293b0 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
293c0 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
293d0 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
293e0 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
293f0 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
29400 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
29410 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
29420 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
29430 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
29440 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
29450 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
29460 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
29470 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
29480 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
29490 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
294a0 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
294b0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
294c0 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
294d0 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
294e0 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
294f0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
29500 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
29510 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
29520 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
29530 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
29540 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
29550 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
29560 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
29570 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
29580 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
29590 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
295a0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
295b0 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
295c0 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
295d0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
295e0 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69   int iMoved;.  i
295f0 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72  nt iDb;..  asser
29600 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
29610 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  0 );.  pOut = ou
29620 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
29630 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
29640 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
29650 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52    if( db->nVdbeR
29660 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74  ead > db->nVDest
29670 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20  roy+1 ){.    rc 
29680 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
29690 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
296a0 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
296b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62    }else{.    iDb
296c0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
296d0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
296e0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
296f0 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f   iDb) );.    iMo
29700 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  ved = 0;  /* Not
29710 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74   needed.  Only t
29720 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
29730 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
29740 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
29750 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
29760 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
29770 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
29780 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
29790 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
297a0 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
297b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
297c0 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
297d0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
297e0 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
297f0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
29800 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64  3RootPageMoved(d
29810 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20  b, iDb, iMoved, 
29820 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20  pOp->p1);.      
29830 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f  /* All OP_Destro
29840 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63  y operations occ
29850 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62  ur on the same b
29860 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73  tree */.      as
29870 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d  sert( resetSchem
29880 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72  aOnFault==0 || r
29890 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
298a0 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20  t==iDb+1 );.    
298b0 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46    resetSchemaOnF
298c0 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20  ault = iDb+1;.  
298d0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
298e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
298f0 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50  code: Clear P1 P
29900 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  2 P3.**.** Delet
29910 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f  e all contents o
29920 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
29930 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
29940 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  ose root page.**
29950 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
29960 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
29970 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69  y P1.  But, unli
29980 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e  ke Destroy, do n
29990 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65  ot.** remove the
299a0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
299b0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
299c0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
299d0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
299e0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61  ear is in the ma
299f0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
29a00 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
29a10 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
29a20 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
29a30 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
29a40 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
29a50 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
29a60 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
29a70 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
29a80 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
29a90 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
29aa0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
29ab0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
29ac0 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65  n the table refe
29ad0 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20  rred to must be 
29ae0 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62  an.** intkey tab
29af0 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65  le (an SQL table
29b00 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e  , not an index).
29b10 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
29b20 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a  e row change .**
29b30 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
29b40 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
29b50 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
29b60 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
29b70 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50  leared. .** If P
29b80 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
29b90 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n zero, then the
29ba0 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
29bb0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   register P3 is.
29bc0 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ** also incremen
29bd0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
29be0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
29bf0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
29c00 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ared..**.** See 
29c10 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f  also: Destroy.*/
29c20 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20  .case OP_Clear: 
29c30 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  {.  int nChange;
29c40 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30  . .  nChange = 0
29c50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
29c60 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
29c70 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
29c80 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
29c90 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72   pOp->p2) );.  r
29ca0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
29cb0 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
29cc0 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
29cd0 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
29ce0 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
29cf0 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
29d00 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
29d10 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
29d20 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
29d30 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
29d40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
29d50 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
29d60 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
29d70 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
29d80 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
29d90 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
29da0 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
29db0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
29dc0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
29dd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
29de0 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a  tSorter P1 * * *
29df0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
29e00 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f  all contents fro
29e10 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  m the ephemeral 
29e20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a  table or sorter.
29e30 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20  ** that is open 
29e40 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  on cursor P1..**
29e50 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
29e60 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
29e70 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20  ursors used for 
29e80 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f  sorting and.** o
29e90 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70  pened with OP_Op
29ea0 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f  enEphemeral or O
29eb0 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f  P_SorterOpen..*/
29ec0 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f  .case OP_ResetSo
29ed0 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75  rter: {.  VdbeCu
29ee0 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73  rsor *pC;. .  as
29ef0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
29f00 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
29f10 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
29f20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
29f30 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
29f40 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
29f50 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20 20 20 20  >pSorter ){.    
29f60 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
29f70 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 70  rReset(db, pC->p
29f80 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65  Sorter);.  }else
29f90 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
29fa0 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
29fb0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
29fc0 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
29fd0 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75  OfCursor(pC->pCu
29fe0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
29ff0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a000 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
2a010 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2a020 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2a030 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
2a040 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
2a050 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
2a060 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2a070 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2a080 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
2a090 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2a0a0 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2a0b0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2a0c0 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
2a0d0 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
2a0e0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2a0f0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
2a100 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
2a110 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
2a120 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
2a130 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
2a140 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
2a150 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
2a160 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
2a170 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
2a180 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
2a190 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
2a1a0 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
2a1b0 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
2a1c0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2a1d0 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
2a1e0 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
2a1f0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
2a200 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2a210 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
2a220 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2a230 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
2a240 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2a250 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
2a260 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
2a270 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2a280 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
2a290 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
2a2a0 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
2a2b0 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
2a2c0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2a2d0 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
2a2e0 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2a2f0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
2a300 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
2a310 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
2a320 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
2a330 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
2a340 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
2a350 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
2a360 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50   out2 */.case OP
2a370 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
2a380 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2a390 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
2a3a0 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
2a3b0 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20  b *pDb;..  pOut 
2a3c0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2a3d0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f  (p, pOp);.  pgno
2a3e0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2a3f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2a400 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2a410 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2a420 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2a430 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
2a440 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2a450 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
2a460 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
2a470 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2a480 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
2a490 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2a4a0 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
2a4b0 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
2a4c0 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
2a4d0 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
2a4e0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
2a4f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
2a500 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
2a510 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
2a520 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
2a530 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
2a540 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
2a550 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
2a560 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
2a570 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
2a580 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20  chema P1 * * P4 
2a590 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
2a5a0 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
2a5b0 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
2a5c0 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
2a5d0 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
2a5e0 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
2a5f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
2a600 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  . .**.** This op
2a610 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2a620 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
2a630 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
2a640 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
2a650 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
2a660 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
2a670 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
2a680 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
2a690 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
2a6a0 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
2a6b0 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
2a6c0 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
2a6d0 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
2a6e0 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
2a6f0 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
2a700 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
2a710 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
2a720 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
2a730 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
2a740 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
2a750 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
2a760 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
2a770 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
2a780 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
2a790 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2a7a0 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
2a7b0 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
2a7c0 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
2a7d0 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
2a7e0 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
2a7f0 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
2a800 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
2a810 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
2a820 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
2a830 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
2a840 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2a850 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
2a860 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
2a870 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
2a880 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20    /* Used to be 
2a890 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f  a conditional */
2a8a0 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d   {.    zMaster =
2a8b0 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44   SCHEMA_TABLE(iD
2a8c0 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  b);.    initData
2a8d0 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
2a8e0 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70  itData.iDb = pOp
2a8f0 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61  ->p1;.    initDa
2a900 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
2a910 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a  ->zErrMsg;.    z
2a920 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
2a930 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
2a940 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
2a950 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
2a960 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
2a970 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
2a980 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
2a990 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d  b[iDb].zName, zM
2a9a0 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
2a9b0 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
2a9c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
2a9d0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
2a9e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2a9f0 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
2aa00 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
2aa10 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2aa20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
2aa30 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
2aa40 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
2aa50 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
2aa60 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
2aa70 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
2aa80 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
2aa90 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
2aaa0 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
2aab0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2aac0 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
2aad0 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
2aae0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2aaf0 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
2ab00 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
2ab10 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
2ab20 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73   rc ) sqlite3Res
2ab30 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
2ab40 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
2ab50 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
2ab60 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
2ab70 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
2ab80 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
2ab90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2aba0 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
2abb0 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
2abc0 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
2abd0 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
2abe0 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
2abf0 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
2ac00 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
2ac10 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
2ac20 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
2ac30 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
2ac40 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
2ac50 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
2ac60 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
2ac70 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
2ac80 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
2ac90 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
2aca0 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
2acb0 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
2acc0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2acd0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2ace0 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
2acf0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
2ad00 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
2ad10 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
2ad20 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
2ad30 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
2ad40 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
2ad50 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
2ad60 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2ad70 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2ad80 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2ad90 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2ada0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2adb0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
2adc0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2add0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2ade0 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
2adf0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2ae00 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2ae10 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2ae20 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
2ae30 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
2ae40 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2ae50 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2ae60 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2ae70 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2ae80 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2ae90 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
2aea0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2aeb0 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
2aec0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2aed0 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
2aee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
2aef0 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
2af00 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2af10 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2af20 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2af30 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2af40 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
2af50 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
2af60 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
2af70 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
2af80 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
2af90 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2afa0 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2afb0 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a  stroy opcode).**
2afc0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2afd0 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
2afe0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2aff0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
2b000 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
2b010 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
2b020 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
2b030 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
2b040 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2b050 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
2b060 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2b070 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2b080 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
2b090 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
2b0a0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
2b0b0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
2b0c0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
2b0d0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
2b0e0 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
2b0f0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2b100 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2b110 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2b120 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
2b130 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
2b140 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
2b150 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
2b160 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
2b170 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
2b180 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2b190 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
2b1a0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
2b1b0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
2b1c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
2b1d0 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
2b1e0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2b1f0 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
2b200 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2b210 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
2b220 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b230 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
2b240 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
2b250 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
2b260 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
2b270 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
2b280 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
2b290 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
2b2a0 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
2b2b0 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
2b2c0 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
2b2d0 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
2b2e0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
2b2f0 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
2b300 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
2b310 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
2b320 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
2b330 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
2b340 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
2b350 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
2b360 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
2b370 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
2b380 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
2b390 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
2b3a0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
2b3b0 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
2b3c0 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
2b3d0 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
2b3e0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
2b3f0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
2b400 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
2b410 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
2b420 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
2b430 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
2b440 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
2b450 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
2b460 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
2b470 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
2b480 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
2b490 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
2b4a0 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
2b4b0 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
2b4c0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2b4d0 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
2b4e0 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
2b4f0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
2b500 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
2b510 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
2b520 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2b530 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
2b540 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
2b550 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
2b560 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
2b570 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
2b580 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
2b590 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
2b5a0 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
2b5b0 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
2b5c0 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
2b5d0 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
2b5e0 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
2b5f0 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
2b600 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
2b610 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
2b620 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2b630 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
2b640 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
2b650 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
2b660 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
2b670 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
2b680 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
2b690 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
2b6a0 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
2b6b0 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
2b6c0 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
2b6d0 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20   remaining */.. 
2b6e0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
2b6f0 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74  eader );.  nRoot
2b700 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
2b710 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
2b720 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
2b730 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
2b740 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
2b750 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
2b760 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
2b770 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
2b780 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2b790 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2b7a0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2b7b0 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
2b7c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2b7d0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2b7e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2b7f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2b800 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
2b810 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
2b820 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
2b830 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b840 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
2b850 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
2b860 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
2b870 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
2b880 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
2b890 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
2b8a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2b8b0 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
2b8c0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2b8d0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2b8e0 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20  , pOp->p5) );.  
2b8f0 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
2b900 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
2b910 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
2b920 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
2b930 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
2b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b950 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
2b960 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
2b970 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2b980 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
2b990 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
2b9a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b9b0 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2b9c0 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
2b9d0 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
2b9e0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
2b9f0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
2ba00 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
2ba10 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2ba20 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
2ba30 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
2ba40 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
2ba50 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
2ba60 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
2ba70 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
2ba80 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2ba90 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
2baa0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2bab0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2bac0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2bad0 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
2bae0 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
2baf0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2bb00 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d  is:  rowset(P1)=
2bb10 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
2bb20 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
2bb30 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
2bb40 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
2bb50 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
2bb60 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
2bb70 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
2bb80 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
2bb90 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
2bba0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2bbb0 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
2bbc0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2bbd0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2bbe0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2bbf0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2bc00 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2bc10 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
2bc20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2bc30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2bc40 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2bc50 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2bc60 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2bc70 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2bc80 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2bc90 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2bca0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2bcb0 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
2bcc0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2bcd0 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
2bce0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
2bcf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2bd00 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
2bd10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2bd20 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50    r[P3]=rowset(P
2bd30 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74  1).**.** Extract
2bd40 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
2bd50 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e  lue from boolean
2bd60 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75   index P1 and pu
2bd70 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
2bd80 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33  o.** register P3
2bd90 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61  .  Or, if boolea
2bda0 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e  n index P1 is in
2bdb0 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
2bdc0 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
2bdd0 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
2bde0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2bdf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2be00 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
2be10 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
2be20 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
2be30 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
2be40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
2be50 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2be60 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
2be70 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
2be80 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
2be90 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
2bea0 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
2beb0 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
2bec0 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
2bed0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2bee0 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
2bef0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2bf00 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20  (1,2);.    goto 
2bf10 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
2bf20 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2bf30 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
2bf40 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
2bf50 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
2bf60 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62  index */.    Vdb
2bf70 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32  eBranchTaken(0,2
2bf80 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2bf90 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2bfa0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
2bfb0 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  l);.  }.  goto c
2bfc0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2bfd0 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2bfe0 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
2bff0 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
2c000 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
2c010 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
2c020 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2c030 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
2c040 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
2c050 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
2c060 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
2c070 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
2c080 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
2c090 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
2c0a0 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
2c0b0 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
2c0c0 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
2c0d0 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
2c0e0 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
2c0f0 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
2c100 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
2c110 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
2c120 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
2c130 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
2c140 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
2c150 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
2c160 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
2c170 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73   successive sets
2c180 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c  .** of integers,
2c190 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20   where each set 
2c1a0 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
2c1b0 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74  icates. Each set
2c1c0 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73  .** of values is
2c1d0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
2c1e0 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65   unique P4 value
2c1f0 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a  . The first set.
2c200 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  ** must have P4=
2c210 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65  =0, the final se
2c220 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73  t P4=-1.  P4 mus
2c230 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f  t be either -1 o
2c240 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  r.** non-negativ
2c250 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61  e.  For non-nega
2c260 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50  tive values of P
2c270 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72  4 only the lower
2c280 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73   4.** bits are s
2c290 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a  ignificant..**.*
2c2a0 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
2c2b0 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
2c2c0 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
2c2d0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2c2e0 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73  test.** the rows
2c2f0 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
2c300 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
2c310 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
2c320 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
2c330 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
2c340 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2c350 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
2c360 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
2c370 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
2c380 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
2c390 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
2c3a0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2c3b0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
2c3c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2c3d0 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
2c3e0 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
2c3f0 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
2c400 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
2c410 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2c420 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
2c430 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
2c440 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2c450 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
2c460 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
2c470 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c490 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
2c4a0 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
2c4b0 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
2c4c0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2c4d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
2c4e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2c4f0 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
2c500 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
2c510 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
2c520 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
2c530 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
2c540 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
2c550 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
2c560 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
2c570 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
2c580 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
2c590 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
2c5a0 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
2c5b0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2c5c0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2c5d0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2c5e0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2c5f0 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2c600 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2c610 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2c620 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2c630 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
2c640 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2c650 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
2c660 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
2c670 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
2c680 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
2c690 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
2c6a0 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
2c6b0 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  Set, iSet, pIn3-
2c6c0 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
2c6d0 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
2c6e0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
2c6f0 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a   exists ) goto j
2c700 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
2c710 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
2c720 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
2c730 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2c740 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
2c750 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
2c760 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
2c770 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2c780 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  R../* Opcode: Pr
2c790 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50  ogram P1 P2 P3 P
2c7a0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
2c7b0 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
2c7c0 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
2c7d0 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
2c7e0 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
2c7f0 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
2c800 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
2c810 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
2c820 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
2c830 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
2c840 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
2c850 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
2c860 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
2c870 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
2c880 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
2c890 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
2c8a0 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
2c8b0 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
2c8c0 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
2c8d0 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
2c8e0 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
2c8f0 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
2c900 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
2c910 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
2c920 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
2c930 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
2c940 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
2c950 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
2c960 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
2c970 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
2c980 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
2c990 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2c9a0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
2c9b0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
2c9c0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
2c9d0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2c9e0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65  on-zero, then re
2c9f0 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20  cursive program 
2ca00 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e  invocation is en
2ca10 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  abled..*/.case O
2ca20 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20  P_Program: {    
2ca30 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2ca40 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
2ca50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2ca60 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67  er of memory reg
2ca70 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70  isters for sub-p
2ca80 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
2ca90 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
2caa0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
2cab0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65  runtime space re
2cac0 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70  quired for sub-p
2cad0 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20  rogram */.  Mem 
2cae0 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pRt;           
2caf0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2cb00 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74  to allocate runt
2cb10 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d  ime space */.  M
2cb20 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2cb30 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74         /* Used t
2cb40 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67  o iterate throug
2cb50 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a  h memory cells *
2cb60 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20  /.  Mem *pEnd;  
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2cb80 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  ast memory cell 
2cb90 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a  in new array */.
2cba0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2cbb0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  ame;      /* New
2cbc0 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65   vdbe frame to e
2cbd0 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53  xecute in */.  S
2cbe0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
2cbf0 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72  ram;   /* Sub-pr
2cc00 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
2cc10 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20   */.  void *t;  
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2cc30 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69   Token identifyi
2cc40 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20  ng trigger */.. 
2cc50 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d   pProgram = pOp-
2cc60 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20  >p4.pProgram;.  
2cc70 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  pRt = &aMem[pOp-
2cc80 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
2cc90 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20  pProgram->nOp>0 
2cca0 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68  );.  .  /* If th
2ccb0 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65  e p5 flag is cle
2ccc0 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ar, then recursi
2ccd0 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
2cce0 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20   triggers is .  
2ccf0 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ** disabled for 
2cd00 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
2cd10 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73  ibility (p5 is s
2cd20 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70  et if this sub-p
2cd30 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72  rogram.  ** is r
2cd40 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c  eally a trigger,
2cd50 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b   not a foreign k
2cd60 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ey action, and t
2cd70 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a  he flag set.  **
2cd80 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20   and cleared by 
2cd90 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75  the "PRAGMA recu
2cda0 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20  rsive_triggers" 
2cdb0 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72  command is clear
2cdc0 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74  )..  ** .  ** It
2cdd0 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e   is recursive in
2cde0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
2cdf0 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c  gers, at the SQL
2ce00 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20   level, that is 
2ce10 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20  .  ** disabled. 
2ce20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20  In some cases a 
2ce30 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d  single trigger m
2ce40 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65  ay generate more
2ce50 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20   than one .  ** 
2ce60 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74  SubProgram (if t
2ce70 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  he trigger may b
2ce80 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  e executed with 
2ce90 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69  more than one di
2cea0 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e  fferent .  ** ON
2ceb0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
2cec0 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d  thm). SubProgram
2ced0 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f   structures asso
2cee0 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20  ciated with a.  
2cef0 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65  ** single trigge
2cf00 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  r all have the s
2cf10 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
2cf20 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b  e SubProgram.tok
2cf30 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c  en .  ** variabl
2cf40 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  e.  */.  if( pOp
2cf50 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20  ->p5 ){.    t = 
2cf60 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2cf70 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2cf80 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2cf90 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  e && pFrame->tok
2cfa0 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46  en!=t; pFrame=pF
2cfb0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
2cfc0 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29      if( pFrame )
2cfd0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
2cfe0 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62  f( p->nFrame>=db
2cff0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
2d000 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
2d010 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  PTH] ){.    rc =
2d020 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2d030 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
2d040 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79  ror(p, "too many
2d050 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
2d060 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
2d070 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
2d080 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
2d090 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2d0a0 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
2d0b0 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
2d0c0 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
2d0d0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
2d0e0 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
2d0f0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
2d100 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
2d110 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
2d120 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
2d130 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
2d140 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
2d150 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
2d160 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
2d170 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
2d180 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
2d190 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
2d1a0 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
2d1b0 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30  gs&MEM_Frame)==0
2d1c0 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
2d1d0 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
2d1e0 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
2d1f0 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
2d200 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
2d210 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
2d220 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
2d230 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
2d240 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
2d250 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
2d260 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
2d270 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
2d280 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
2d290 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
2d2a0 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
2d2b0 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
2d2c0 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
2d2d0 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
2d2e0 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
2d2f0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
2d300 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2d310 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f  ;.    nByte = RO
2d320 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
2d330 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  Frame)).        
2d340 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73        + nMem * s
2d350 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20  izeof(Mem).     
2d360 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
2d370 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65  ram->nCsr * size
2d380 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29  of(VdbeCursor *)
2d390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2d3a0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65   pProgram->nOnce
2d3b0 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20   * sizeof(u8);. 
2d3c0 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69     pFrame = sqli
2d3d0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
2d3e0 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
2d3f0 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20  if( !pFrame ){. 
2d400 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
2d410 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2d420 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2d430 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d  e(pRt);.    pRt-
2d440 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61  >flags = MEM_Fra
2d450 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70  me;.    pRt->u.p
2d460 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
2d470 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d  .    pFrame->v =
2d480 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e   p;.    pFrame->
2d490 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d  nChildMem = nMem
2d4a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
2d4b0 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72  hildCsr = pProgr
2d4c0 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46  am->nCsr;.    pF
2d4d0 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29  rame->pc = (int)
2d4e0 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
2d4f0 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20   pFrame->aMem = 
2d500 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->aMem;.    pFr
2d510 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e  ame->nMem = p->n
2d520 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2d530 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73  >apCsr = p->apCs
2d540 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  r;.    pFrame->n
2d550 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72  Cursor = p->nCur
2d560 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  sor;.    pFrame-
2d570 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20  >aOp = p->aOp;. 
2d580 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d     pFrame->nOp =
2d590 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72   p->nOp;.    pFr
2d5a0 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72  ame->token = pPr
2d5b0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
2d5c0 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46    pFrame->aOnceF
2d5d0 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c  lag = p->aOnceFl
2d5e0 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  ag;.    pFrame->
2d5f0 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e  nOnceFlag = p->n
2d600 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66 64 65 66  OnceFlag;.#ifdef
2d610 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
2d620 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
2d630 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65     pFrame->anExe
2d640 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23  c = p->anExec;.#
2d650 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20  endif..    pEnd 
2d660 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2d670 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e  pFrame)[pFrame->
2d680 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20  nChildMem];.    
2d690 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61  for(pMem=VdbeFra
2d6a0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70  meMem(pFrame); p
2d6b0 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b  Mem!=pEnd; pMem+
2d6c0 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  +){.      pMem->
2d6d0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
2d6e0 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65  fined;.      pMe
2d6f0 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
2d700 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
2d710 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70  Frame = pRt->u.p
2d720 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72  Frame;.    asser
2d730 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
2d740 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
2d750 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
2d760 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Mem );.    asser
2d770 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
2d780 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2d790 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
2d7a0 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  rt( (int)(pOp - 
2d7b0 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  aOp)==pFrame->pc
2d7c0 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
2d7d0 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
2d7e0 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
2d7f0 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
2d800 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
2d810 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65  tRowid;.  pFrame
2d820 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
2d830 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65  Change;.  pFrame
2d840 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d  ->nDbChange = p-
2d850 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  >db->nChange;.  
2d860 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
2d870 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
2d880 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20  rame;.  p->aMem 
2d890 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72  = aMem = &VdbeFr
2d8a0 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d  ameMem(pFrame)[-
2d8b0 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20  1];.  p->nMem = 
2d8c0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2d8d0 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20  m;.  p->nCursor 
2d8e0 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e  = (u16)pFrame->n
2d8f0 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61  ChildCsr;.  p->a
2d900 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73  pCsr = (VdbeCurs
2d910 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e  or **)&aMem[p->n
2d920 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70  Mem+1];.  p->aOp
2d930 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61   = aOp = pProgra
2d940 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70  m->aOp;.  p->nOp
2d950 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70   = pProgram->nOp
2d960 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  ;.  p->aOnceFlag
2d970 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61 70 43   = (u8 *)&p->apC
2d980 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a  sr[p->nCursor];.
2d990 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d    p->nOnceFlag =
2d9a0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65   pProgram->nOnce
2d9b0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2d9c0 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
2d9d0 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78  STATUS.  p->anEx
2d9e0 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  ec = 0;.#endif. 
2d9f0 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b   pOp = &aOp[-1];
2da00 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e  .  memset(p->aOn
2da10 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f  ceFlag, 0, p->nO
2da20 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65  nceFlag);..  bre
2da30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2da40 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
2da50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2da60 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
2da70 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
2da80 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
2da90 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
2daa0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2dab0 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
2dac0 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
2dad0 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
2dae0 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
2daf0 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
2db00 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
2db10 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
2db20 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
2db30 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
2db40 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
2db50 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
2db60 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
2db70 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
2db80 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
2db90 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
2dba0 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
2dbb0 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
2dbc0 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
2dbd0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
2dbe0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2dbf0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2dc00 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2dc10 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
2dc20 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
2dc30 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2dc40 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
2dc50 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
2dc60 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2dc70 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
2dc80 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  In;.  pOut = out
2dc90 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2dca0 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20  Op);.  pFrame = 
2dcb0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e  p->pFrame;.  pIn
2dcc0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2dcd0 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d  [pOp->p1 + pFram
2dce0 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70  e->aOp[pFrame->p
2dcf0 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c  c].p1];   .  sql
2dd00 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
2dd10 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
2dd20 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
2dd30 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66  break;.}..#endif
2dd40 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2dd50 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
2dd60 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2dd70 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2dd80 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  KEY./* Opcode: F
2dd90 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a  kCounter P1 P2 *
2dda0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2ddb0 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a  : fkctr[P1]+=P2.
2ddc0 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20  **.** Increment 
2ddd0 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  a "constraint co
2dde0 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32  unter" by P2 (P2
2ddf0 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65   may be negative
2de00 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a   or positive)..*
2de10 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2de20 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73  ero, the databas
2de30 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75  e constraint cou
2de40 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2de50 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65  ted .** (deferre
2de60 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
2de70 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65  nstraints). Othe
2de80 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20  rwise, if P1 is 
2de90 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74  zero, the .** st
2dea0 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20  atement counter 
2deb0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  is incremented (
2dec0 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2ded0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2dee0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2def0 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66  kCounter: {.  if
2df00 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
2df10 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b  LITE_DeferFKs ){
2df20 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2df30 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70  edImmCons += pOp
2df40 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ->p2;.  }else if
2df50 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2df60 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
2df70 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
2df80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e   }else{.    p->n
2df90 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20  FkConstraint += 
2dfa0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62  pOp->p2;.  }.  b
2dfb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2dfc0 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20  de: FkIfZero P1 
2dfd0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2dfe0 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50  psis: if fkctr[P
2dff0 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]==0 goto P2.**
2e000 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2e010 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69  tests if a forei
2e020 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2e030 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  t-counter is cur
2e040 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20  rently zero..** 
2e050 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
2e060 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
2e070 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
2e080 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2e090 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  xt .** instructi
2e0a0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  on..**.** If P1 
2e0b0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2e0c0 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  n the jump is ta
2e0d0 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ken if the datab
2e0e0 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ase constraint-c
2e0f0 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72  ounter.** is zer
2e100 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20  o (the one that 
2e110 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20  counts deferred 
2e120 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
2e130 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73  tions). If P1 is
2e140 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75  .** zero, the ju
2e150 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2e160 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  he statement con
2e170 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2e180 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65  is zero.** (imme
2e190 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2e1a0 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  y constraint vio
2e1b0 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73  lations)..*/.cas
2e1c0 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b  e OP_FkIfZero: {
2e1d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2e1e0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2e1f0 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  1 ){.    VdbeBra
2e200 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65  nchTaken(db->nDe
2e210 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
2e220 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2e230 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
2e240 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72    if( db->nDefer
2e250 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
2e260 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2e270 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
2e280 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
2e290 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
2e2a0 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73  Taken(p->nFkCons
2e2b0 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d  traint==0 && db-
2e2c0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2e2d0 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
2e2e0 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  ( p->nFkConstrai
2e2f0 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
2e300 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2e310 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2e320 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2e330 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  .}.#endif /* #if
2e340 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e350 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a  _FOREIGN_KEY */.
2e360 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e370 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
2e380 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65  NT./* Opcode: Me
2e390 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  mMax P1 P2 * * *
2e3a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2e3b0 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b  P1]=max(r[P1],r[
2e3c0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  P2]).**.** P1 is
2e3d0 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
2e3e0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
2e3f0 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f   this VM (the ro
2e400 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64  ot frame is.** d
2e410 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
2e420 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20  e current frame 
2e430 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  if this instruct
2e440 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65  ion is being exe
2e450 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20  cuted.** within 
2e460 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20  a sub-program). 
2e470 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Set the value of
2e480 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
2e490 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a  the maximum of .
2e4a0 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76  ** its current v
2e4b0 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c  alue and the val
2e4c0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
2e4d0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
2e4e0 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73  struction throws
2e4f0 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
2e500 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20   memory cell is 
2e510 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a  not initially.**
2e520 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
2e530 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20  case OP_MemMax: 
2e540 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
2e550 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2e560 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d  pFrame;.  if( p-
2e570 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66  >pFrame ){.    f
2e580 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
2e590 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
2e5a0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
2e5b0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
2e5c0 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d     pIn1 = &pFram
2e5d0 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e->aMem[pOp->p1]
2e5e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2e5f0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2e600 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  >p1];.  }.  asse
2e610 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2e620 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  In1) );.  sqlite
2e630 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2e640 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  fy(pIn1);.  pIn2
2e650 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2e660 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
2e670 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
2e680 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n2);.  if( pIn1-
2e690 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b  >u.i<pIn2->u.i){
2e6a0 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  .    pIn1->u.i =
2e6b0 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a   pIn2->u.i;.  }.
2e6c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2e6d0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2e6e0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a  _AUTOINCREMENT *
2e6f0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  /../* Opcode: If
2e700 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Pos P1 P2 P3 * *
2e710 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2e720 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
2e730 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32  P1]-=P3, goto P2
2e740 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2e750 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
2e760 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49  an integer..** I
2e770 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
2e780 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
2e790 6f 72 20 67 72 65 61 74 65 72 2c 20 73 75 62 74  or greater, subt
2e7a0 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65  ract P3 from the
2e7b0 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20  .** value in P1 
2e7c0 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  and jump to P2..
2e7d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69  **.** If the ini
2e7e0 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65  tial value of re
2e7f0 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
2e800 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74  s than 1, then t
2e810 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75  he.** value is u
2e820 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e  nchanged and con
2e830 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f  trol passes thro
2e840 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2e850 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2e860 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
2e870 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2e880 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2e890 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2e8a0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2e8b0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2e8c0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2e8d0 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30  ken( pIn1->u.i>0
2e8e0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2e8f0 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70  ->u.i>0 ){.    p
2e900 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d  In1->u.i -= pOp-
2e910 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  >p3;.    goto ju
2e920 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2e930 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e940 6f 64 65 3a 20 53 65 74 49 66 4e 6f 74 50 6f 73  ode: SetIfNotPos
2e950 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2e960 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
2e970 50 31 5d 3c 3d 30 20 74 68 65 6e 20 72 5b 50 32  P1]<=0 then r[P2
2e980 5d 3d 50 33 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  ]=P3.**.** Regis
2e990 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2e9a0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
2e9b0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2e9c0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2e9d0 73 20 6e 6f 74 20 70 6f 73 69 74 69 76 65 20 28  s not positive (
2e9e0 69 66 20 69 74 20 69 73 20 6c 65 73 73 20 74 68  if it is less th
2e9f0 61 6e 20 31 29 20 74 68 65 6e 0a 2a 2a 20 73 65  an 1) then.** se
2ea00 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
2ea10 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 62 65  egister P2 to be
2ea20 20 74 68 65 20 69 6e 74 65 67 65 72 20 50 33 2e   the integer P3.
2ea30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 49  .*/.case OP_SetI
2ea40 66 4e 6f 74 50 6f 73 3a 20 7b 20 20 20 20 20 20  fNotPos: {      
2ea50 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f    /* in1, in2 */
2ea60 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2ea70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2ea80 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2ea90 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
2eaa0 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30 20 29 7b   pIn1->u.i<=0 ){
2eab0 0a 20 20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  .    pOut = out2
2eac0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2ead0 70 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  p);.    pOut->u.
2eae0 69 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  i = pOp->p3;.  }
2eaf0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2eb00 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72  Opcode: IfNotZer
2eb10 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
2eb20 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2eb30 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50  [P1]!=0 then r[P
2eb40 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a  1]-=P3, goto P2.
2eb50 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2eb60 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
2eb70 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
2eb80 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
2eb90 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20  gister P1 is.** 
2eba0 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72  initially nonzer
2ebb0 6f 2c 20 74 68 65 6e 20 73 75 62 74 72 61 63 74  o, then subtract
2ebc0 20 50 33 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P3 from the val
2ebd0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
2ebe0 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  1 and.** jump to
2ebf0 20 50 32 2e 20 20 49 66 20 72 65 67 69 73 74 65   P2.  If registe
2ec00 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  r P1 is initiall
2ec10 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74  y zero, leave it
2ec20 20 75 6e 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e   unchanged.** an
2ec30 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  d fall through..
2ec40 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
2ec50 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
2ec60 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
2ec70 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2ec80 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2ec90 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
2eca0 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
2ecb0 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
2ecc0 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i<0, 2);.  if
2ecd0 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20  ( pIn1->u.i ){. 
2ece0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d      pIn1->u.i -=
2ecf0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 20 67   pOp->p3;.     g
2ed00 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2ed10 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2ed20 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a  /* Opcode: DecrJ
2ed30 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  umpZero P1 P2 * 
2ed40 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2ed50 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30   if (--r[P1])==0
2ed60 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2ed70 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2ed80 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e  hold an integer.
2ed90 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20    Decrement the 
2eda0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2edb0 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  r P1.** then jum
2edc0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e  p to P2 if the n
2edd0 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63  ew value is exac
2ede0 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  tly zero..*/.cas
2edf0 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72  e OP_DecrJumpZer
2ee00 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d  o: {      /* jum
2ee10 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2ee20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2ee30 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2ee40 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2ee50 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 2d   );.  pIn1->u.i-
2ee60 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  -;.  VdbeBranchT
2ee70 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d  aken(pIn1->u.i==
2ee80 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
2ee90 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f  1->u.i==0 ) goto
2eea0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
2eeb0 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
2eec0 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e 63  ode: JumpZeroInc
2eed0 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
2eee0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 72   Synopsis: if (r
2eef0 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f 74  [P1]++)==0 ) got
2ef00 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  o P2.**.** The r
2ef10 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2ef20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2ef30 65 72 2e 20 20 49 66 20 72 65 67 69 73 74 65 72  er.  If register
2ef40 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
2ef50 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  .** zero, then j
2ef60 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e 63 72  ump to P2.  Incr
2ef70 65 6d 65 6e 74 20 72 65 67 69 73 74 65 72 20 50  ement register P
2ef80 31 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  1 regardless of 
2ef90 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f  whether or.** no
2efa0 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
2efb0 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ken..*/.case OP_
2efc0 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20 7b 20  JumpZeroIncr: { 
2efd0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2efe0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2eff0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2f000 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2f010 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2f020 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2f030 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c  en(pIn1->u.i==0,
2f040 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
2f050 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 20 67 6f  ->u.i++)==0 ) go
2f060 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2f070 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2f080 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a  code: AggStep0 *
2f090 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2f0a0 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
2f0b0 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
2f0c0 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
2f0d0 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
2f0e0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
2f0f0 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
2f100 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
2f110 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
2f120 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2f130 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
2f140 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
2f150 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
2f160 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
2f170 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
2f180 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
2f190 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
2f1a0 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
2f1b0 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
2f1c0 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
2f1d0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2f1e0 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2f1f0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2f200 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2f210 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2f220 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2f230 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2f240 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2f250 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2f260 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2f270 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2f280 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
2f290 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62  e3_context.** ob
2f2a0 6a 65 63 74 20 74 68 61 74 20 69 73 20 75 73 65  ject that is use
2f2b0 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e  d to run the fun
2f2c0 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
2f2d0 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65   P3 is.** as the
2f2e0 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
2f2f0 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
2f300 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
2f310 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
2f320 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
2f330 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ssors..**.** Thi
2f340 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74  s opcode is init
2f350 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f  ially coded as O
2f360 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20  P_AggStep0.  On 
2f370 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
2f380 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66  ,.** the FuncDef
2f390 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73   stored in P4 is
2f3a0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
2f3b0 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
2f3c0 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70  xt and.** the op
2f3d0 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e  code is changed.
2f3e0 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
2f3f0 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
2f400 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n of the.** sqli
2f410 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79  te3_context only
2f420 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69   happens once, i
2f430 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63  nstead of on eac
2f440 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a  h call to the.**
2f450 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a   step function..
2f460 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  */.case OP_AggSt
2f470 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  ep0: {.  int n;.
2f480 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2f490 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
2f4a0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
2f4b0 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
2f4c0 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
2f4d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2f4e0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2f4f0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2f500 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
2f510 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
2f520 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
2f530 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2f540 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73  rsor)+1) );.  as
2f550 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
2f560 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
2f570 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
2f580 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44   pCtx = sqlite3D
2f590 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
2f5a0 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28  izeof(*pCtx) + (
2f5b0 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69  n-1)*sizeof(sqli
2f5c0 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20  te3_value*));.  
2f5d0 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f  if( pCtx==0 ) go
2f5e0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74  to no_mem;.  pCt
2f5f0 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70  x->pMem = 0;.  p
2f600 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70  Ctx->pFunc = pOp
2f610 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43  ->p4.pFunc;.  pC
2f620 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28  tx->iOp = (int)(
2f630 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43  pOp - aOp);.  pC
2f640 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20  tx->pVdbe = p;. 
2f650 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b   pCtx->argc = n;
2f660 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d  .  pOp->p4type =
2f670 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70   P4_FUNCCTX;.  p
2f680 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43  Op->p4.pCtx = pC
2f690 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  tx;.  pOp->opcod
2f6a0 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a  e = OP_AggStep;.
2f6b0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
2f6c0 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65  h into OP_AggSte
2f6d0 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41  p */.}.case OP_A
2f6e0 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
2f6f0 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  i;.  sqlite3_con
2f700 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65  text *pCtx;.  Me
2f710 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74  m *pMem;.  Mem t
2f720 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2f730 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
2f740 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d  CCTX );.  pCtx =
2f750 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20   pOp->p4.pCtx;. 
2f760 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
2f770 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66  p->p3];..  /* If
2f780 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
2f790 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
2f7a0 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
2f7b0 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
2f7c0 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
2f7d0 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
2f7e0 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
2f7f0 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
2f800 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
2f810 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
2f820 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
2f830 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
2f840 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
2f850 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
2f860 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
2f870 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
2f880 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
2f890 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70  bject */.  if( p
2f8a0 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65  Ctx->pMem != pMe
2f8b0 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70  m ){.    pCtx->p
2f8c0 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20  Mem = pMem;.    
2f8d0 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63  for(i=pCtx->argc
2f8e0 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70  -1; i>=0; i--) p
2f8f0 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26  Ctx->argv[i] = &
2f900 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b  aMem[pOp->p2+i];
2f910 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
2f920 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
2f930 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67  i=0; i<pCtx->arg
2f940 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  c; i++){.    ass
2f950 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2f960 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29  pCtx->argv[i]) )
2f970 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
2f980 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
2f990 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a  pCtx->argv[i]);.
2f9a0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d    }.#endif..  pM
2f9b0 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74  em->n++;.  sqlit
2f9c0 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74  e3VdbeMemInit(&t
2f9d0 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  , db, MEM_Null);
2f9e0 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20  .  pCtx->pOut = 
2f9f0 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72  &t;.  pCtx->fErr
2fa00 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 70  orOrAux = 0;.  p
2fa10 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20  Ctx->skipFlag = 
2fa20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e  0;.  (pCtx->pFun
2fa30 63 2d 3e 78 53 74 65 70 29 28 70 43 74 78 2c 70  c->xStep)(pCtx,p
2fa40 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e  Ctx->argc,pCtx->
2fa50 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  argv); /* IMP: R
2fa60 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
2fa70 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72    if( pCtx->fErr
2fa80 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69  orOrAux ){.    i
2fa90 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  f( pCtx->isError
2faa0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2fab0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
2fac0 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2fad0 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20  e_text(&t));.   
2fae0 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73     rc = pCtx->is
2faf0 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  Error;.    }.   
2fb00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2fb10 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 7d 65  elease(&t);.  }e
2fb20 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2fb30 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75   t.flags==MEM_Nu
2fb40 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ll );.  }.  if( 
2fb50 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29  pCtx->skipFlag )
2fb60 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2fb70 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
2fb80 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
2fb90 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a  i = pOp[-1].p1;.
2fba0 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69      if( i ) sqli
2fbb0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2fbc0 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b  64(&aMem[i], 1);
2fbd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2fbe0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
2fbf0 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
2fc00 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
2fc10 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a  ccum=r[P1] N=P2.
2fc20 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2fc30 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63  e finalizer func
2fc40 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
2fc50 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a  egate.  P1 is.**
2fc60 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
2fc70 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  tion that is the
2fc80 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72   accumulator for
2fc90 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a   the aggregate..
2fca0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
2fcb0 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
2fcc0 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65  nts that the ste
2fcd0 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  p function takes
2fce0 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20   and.** P4 is a 
2fcf0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2fd00 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20  uncDef for this 
2fd10 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50  function.  The P
2fd20 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73  2.** argument is
2fd30 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69   not used by thi
2fd40 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73  s opcode.  It is
2fd50 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64   only there to d
2fd60 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66  isambiguate.** f
2fd70 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61  unctions that ca
2fd80 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e  n take varying n
2fd90 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65  umbers of argume
2fda0 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20  nts.  The.** P4 
2fdb0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79  argument is only
2fdc0 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
2fdd0 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20  degenerate case 
2fde0 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
2fdf0 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
2fe00 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
2fe10 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lled..*/.case OP
2fe20 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d  _AggFinal: {.  M
2fe30 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65  em *pMem;.  asse
2fe40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
2fe50 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
2fe60 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2fe70 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
2fe80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2fe90 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
2fea0 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
2feb0 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
2fec0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2fed0 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
2fee0 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
2fef0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
2ff00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
2ff10 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
2ff20 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
2ff30 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71  pMem));.  }.  sq
2ff40 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2ff50 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e  ncoding(pMem, en
2ff60 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
2ff70 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
2ff80 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Mem);.  if( sqli
2ff90 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
2ffa0 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f  (pMem) ){.    go
2ffb0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2ffc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
2ffd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ffe0 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  WAL./* Opcode: C
2fff0 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20  heckpoint P1 P2 
30000 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
30010 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
30020 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
30030 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
30040 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
30050 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61  * WAL mode. Para
30060 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20  meter P2 is one 
30070 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  of SQLITE_CHECKP
30080 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55  OINT_PASSIVE, FU
30090 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20  LL,.** RESTART, 
300a0 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72  or TRUNCATE.  Wr
300b0 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20  ite 1 or 0 into 
300c0 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63  mem[P3] if the c
300d0 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e  heckpoint return
300e0 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  s.** SQLITE_BUSY
300f0 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74   or not, respect
30100 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68  ively.  Write th
30110 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
30120 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20  s in the.** WAL 
30130 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
30140 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  oint into mem[P3
30150 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  +1] and the numb
30160 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69  er of pages.** i
30170 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
30180 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ave been checkpo
30190 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20  inted after the 
301a0 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f  checkpoint.** co
301b0 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d  mpletes into mem
301c0 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72  [P3+2].  However
301d0 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65   on an error, me
301e0 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d  m[P3+1] and.** m
301f0 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69  em[P3+2] are ini
30200 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a  tialized to -1..
30210 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b  */.case OP_Check
30220 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  point: {.  int i
30230 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
30240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
30250 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
30260 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20  int aRes[3];    
30270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30280 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20  /* Results */.  
30290 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
302a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302b0 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
302c0 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
302d0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
302e0 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20  =0 );.  aRes[0] 
302f0 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
30300 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
30310 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
30320 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
30330 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
30340 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
30350 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
30360 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
30370 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
30380 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
30390 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  RT.       || pOp
303a0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
303b0 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
303c0 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .  );.  rc = sql
303d0 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64  ite3Checkpoint(d
303e0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
303f0 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26  >p2, &aRes[1], &
30400 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20  aRes[2]);.  if( 
30410 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
30420 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
30430 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
30440 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
30450 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
30460 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
30470 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
30480 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
30490 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
304a0 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
304b0 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
304c0 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
304d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
304e0 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
304f0 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
30500 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
30510 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
30520 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
30530 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
30540 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
30550 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
30560 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
30570 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
30580 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
30590 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
305a0 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
305b0 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
305c0 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
305d0 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
305e0 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
305f0 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
30600 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
30610 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
30620 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
30630 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
30640 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
30650 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
30660 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
30670 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
30680 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
30690 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
306a0 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
306b0 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
306c0 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  t2 */.  Btree *p
306d0 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
306e0 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
306f0 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
30700 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
30710 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
30720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30730 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
30740 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
30750 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
30760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30770 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
30780 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
30790 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
307a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
307b0 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
307c0 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
307d0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
307e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
307f0 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
30800 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
30810 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
30820 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
30830 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
30840 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
30850 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
30860 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
30870 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
30880 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
30890 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
308a0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
308b0 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
308c0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
308d0 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
308e0 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
308f0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
30900 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
30910 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
30920 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
30930 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
30940 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
30950 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
30960 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
30970 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
30980 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
30990 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
309a0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
309b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
309c0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
309d0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
309e0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
309f0 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
30a00 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
30a10 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
30a20 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
30a30 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
30a40 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
30a50 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
30a60 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
30a70 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
30a80 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
30a90 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
30aa0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
30ab0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30ac0 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
30ad0 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
30ae0 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
30af0 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
30b00 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
30b10 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
30b20 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
30b30 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
30b40 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
30b50 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
30b60 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
30b70 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
30b80 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
30b90 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
30ba0 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
30bb0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
30bc0 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
30bd0 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
30be0 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
30bf0 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
30c00 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
30c10 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
30c20 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
30c30 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
30c40 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
30c50 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
30c60 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
30c70 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
30c80 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
30c90 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
30ca0 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
30cb0 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
30cc0 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  it || db->nVdbeR
30cd0 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  ead>1 ){.      r
30ce0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
30cf0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
30d00 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
30d10 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
30d20 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
30d30 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
30d40 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
30d50 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
30d60 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30d70 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
30d80 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
30d90 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
30da0 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
30db0 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
30dc0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
30dd0 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
30de0 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
30df0 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
30e00 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
30e10 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
30e20 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
30e30 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
30e40 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
30e50 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
30e60 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
30e70 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
30e80 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
30e90 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
30ea0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
30eb0 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
30ec0 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
30ed0 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
30ee0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
30ef0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
30f00 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
30f10 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
30f20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
30f30 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
30f40 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
30f50 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
30f60 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
30f70 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
30f80 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
30f90 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
30fa0 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
30fb0 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
30fc0 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
30fd0 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
30fe0 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
30ff0 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
31000 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
31010 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
31020 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
31030 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
31040 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
31050 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
31060 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
31070 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
31080 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
31090 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
310a0 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
310b0 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
310c0 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
310d0 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
310e0 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
310f0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
31100 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
31110 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
31120 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
31130 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
31140 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
31150 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
31160 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
31170 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
31180 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
31190 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
311a0 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
311b0 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
311c0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65   if( rc ){.    e
311d0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
311e0 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
311f0 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
31200 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
31210 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  );..  pOut->flag
31220 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
31230 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
31240 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
31250 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
31260 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
31270 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
31280 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
31290 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
312a0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
312b0 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
312c0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
312d0 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
312e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
312f0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31300 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
31310 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
31320 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
31330 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
31340 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
31350 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
31360 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
31370 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
31380 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
31390 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
313a0 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
313b0 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
313c0 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
313d0 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
313e0 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
313f0 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
31400 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
31410 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
31420 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
31430 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20  Only==0 );.  rc 
31440 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
31450 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
31460 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  db);.  break;.}.
31470 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66  #endif..#if !def
31480 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
31490 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20  _AUTOVACUUM)./* 
314a0 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75  Opcode: IncrVacu
314b0 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  um P1 P2 * * *.*
314c0 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73  *.** Perform a s
314d0 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68  ingle step of th
314e0 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61  e incremental va
314f0 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f  cuum procedure o
31500 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61  n.** the P1 data
31510 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63  base. If the vac
31520 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64  uum has finished
31530 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
31540 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68  ction.** P2. Oth
31550 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
31560 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
31570 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
31580 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63  .case OP_IncrVac
31590 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  uum: {        /*
315a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65   jump */.  Btree
315b0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
315c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
315d0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
315e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
315f0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
31600 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
31610 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
31620 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
31630 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
31640 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
31650 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
31660 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
31670 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
31680 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  n(rc==SQLITE_DON
31690 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  E,2);.  if( rc==
316a0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
316b0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
316c0 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  K;.    goto jump
316d0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
316e0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
316f0 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65  * Opcode: Expire
31700 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
31710 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69  * Cause precompi
31720 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74  led statements t
31730 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20  o expire.  When 
31740 61 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65  an expired state
31750 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75  ment.** is execu
31760 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ted using sqlite
31770 33 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c  3_step() it will
31780 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69   either automati
31790 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61  cally.** reprepa
317a0 72 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74  re itself (if it
317b0 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
317c0 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71  created using sq
317d0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
317e0 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c  ()).** or it wil
317f0 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49  l fail with SQLI
31800 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a  TE_SCHEMA..** .*
31810 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
31820 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
31830 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
31840 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
31850 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
31860 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
31870 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
31880 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72  atement is expir
31890 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  ed..*/.case OP_E
318a0 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21  xpire: {.  if( !
318b0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
318c0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
318d0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
318e0 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
318f0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
31900 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
31910 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31920 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
31930 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62  E./* Opcode: Tab
31940 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20  leLock P1 P2 P3 
31950 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
31960 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32  : iDb=P1 root=P2
31970 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20   write=P3.**.** 
31980 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e  Obtain a lock on
31990 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
319a0 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75  ble. This instru
319b0 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ction is only us
319c0 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73  ed when.** the s
319d0 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74  hared-cache feat
319e0 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20  ure is enabled. 
319f0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
31a00 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
31a10 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
31a20 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
31a30 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
31a40 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
31a50 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
31a60 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
31a70 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
31a80 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
31a90 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
31aa0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
31ab0 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
31ac0 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
31ad0 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
31ae0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
31af0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
31b00 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
31b10 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
31b20 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
31b30 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
31b40 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
31b50 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
31b60 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
31b70 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20  bleLock: {.  u8 
31b80 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75  isWriteLock = (u
31b90 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28  8)pOp->p3;.  if(
31ba0 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20   isWriteLock || 
31bb0 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  0==(db->flags&SQ
31bc0 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
31bd0 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74  tted) ){.    int
31be0 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a   p1 = pOp->p1; .
31bf0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d      assert( p1>=
31c00 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20  0 && p1<db->nDb 
31c10 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44  );.    assert( D
31c20 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
31c30 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20  eeMask, p1) );. 
31c40 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69     assert( isWri
31c50 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57  teLock==0 || isW
31c60 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20  riteLock==1 );. 
31c70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
31c80 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62  treeLockTable(db
31c90 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70  ->aDb[p1].pBt, p
31ca0 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c  Op->p2, isWriteL
31cb0 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72  ock);.    if( (r
31cc0 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f  c&0xFF)==SQLITE_
31cd0 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20  LOCKED ){.      
31ce0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
31cf0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20  pOp->p4.z;.     
31d00 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
31d10 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20 74  r(p, "database t
31d20 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20  able is locked: 
31d30 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20  %s", z);.    }. 
31d40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
31d50 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
31d60 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
31d70 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
31d80 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
31d90 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
31da0 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34   VBegin * * * P4
31db0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20   *.**.** P4 may 
31dc0 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  be a pointer to 
31dd0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
31de0 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f  structure. If so
31df0 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78  , call the .** x
31e00 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72  Begin method for
31e10 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a   that table..**.
31e20 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72  ** Also, whether
31e30 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65   or not P4 is se
31e40 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68  t, check that th
31e50 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20  is is not being 
31e60 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77  called from.** w
31e70 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b  ithin a callback
31e80 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
31e90 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68  ble xSync() meth
31ea0 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68  od. If it is, th
31eb0 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20  e error.** code 
31ec0 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53  will be set to S
31ed0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f  QLITE_LOCKED..*/
31ee0 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a  .case OP_VBegin:
31ef0 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54   {.  VTable *pVT
31f00 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f  ab;.  pVTab = pO
31f10 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72  p->p4.pVtab;.  r
31f20 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42  c = sqlite3VtabB
31f30 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b  egin(db, pVTab);
31f40 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73  .  if( pVTab ) s
31f50 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
31f60 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d  Errmsg(p, pVTab-
31f70 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b  >pVtab);.  break
31f80 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
31f90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
31fa0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
31fb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
31fc0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
31fd0 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50  pcode: VCreate P
31fe0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
31ff0 20 50 32 20 69 73 20 61 20 72 65 67 69 73 74 65   P2 is a registe
32000 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
32010 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
32020 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
32030 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c  base .** P1. Cal
32040 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65  l the xCreate me
32050 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
32060 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
32070 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d  VCreate: {.  Mem
32080 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
32090 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
320a0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
320b0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
320c0 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20 20  st char *zTab;  
320d0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 76  /* Name of the v
320e0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
320f0 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c  .  memset(&sMem,
32100 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
32110 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64  );.  sMem.db = d
32120 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20  b;.  /* Because 
32130 50 32 20 69 73 20 61 6c 77 61 79 73 20 61 20 73  P2 is always a s
32140 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69 74  tatic string, it
32150 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66   is impossible f
32160 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  or the.  ** sqli
32170 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 29  te3VdbeMemCopy()
32180 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73   to fail */.  as
32190 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d  sert( (aMem[pOp-
321a0 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  >p2].flags & MEM
321b0 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Str)!=0 );.  as
321c0 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d  sert( (aMem[pOp-
321d0 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  >p2].flags & MEM
321e0 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a 20  _Static)!=0 );. 
321f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
32200 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20  eMemCopy(&sMem, 
32210 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
32220 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
32230 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54  QLITE_OK );.  zT
32240 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ab = (const char
32250 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
32260 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61  text(&sMem);.  a
32270 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20 64  ssert( zTab || d
32280 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
32290 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29 7b  );.  if( zTab ){
322a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
322b0 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
322c0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61  db, pOp->p1, zTa
322d0 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  b, &p->zErrMsg);
322e0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
322f0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
32300 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  em);.  break;.}.
32310 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
32320 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
32330 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
32340 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
32350 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
32360 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
32370 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
32380 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
32390 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
323a0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
323b0 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
323c0 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
323d0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
323e0 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
323f0 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72   {.  db->nVDestr
32400 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c  oy++;.  rc = sql
32410 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
32420 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  roy(db, pOp->p1,
32430 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64   pOp->p4.z);.  d
32440 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a  b->nVDestroy--;.
32450 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
32460 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
32470 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
32480 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
32490 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
324a0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f  LE./* Opcode: VO
324b0 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  pen P1 * * P4 *.
324c0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
324d0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
324e0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
324f0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
32500 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50   structure..** P
32510 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75  1 is a cursor nu
32520 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f  mber.  This opco
32530 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f  de opens a curso
32540 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  r to the virtual
32550 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74  .** table and st
32560 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72  ores that cursor
32570 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20   in P1..*/.case 
32580 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  OP_VOpen: {.  Vd
32590 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
325a0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
325b0 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73  ursor *pVtabCurs
325c0 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  or;.  sqlite3_vt
325d0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
325e0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
325f0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
32600 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
32610 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  der );.  pCur = 
32620 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  0;.  pVtabCursor
32630 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
32640 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
32650 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61  Vtab;.  if( pVta
32660 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56  b==0 || NEVER(pV
32670 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29  tab->pModule==0)
32680 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
32690 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
326a0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f  break;.  }.  pMo
326b0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
326c0 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d  odule;.  rc = pM
326d0 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74  odule->xOpen(pVt
326e0 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72  ab, &pVtabCursor
326f0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
32700 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
32710 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51  pVtab);.  if( SQ
32720 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20  LITE_OK==rc ){. 
32730 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
32740 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
32750 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
32760 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73  */.    pVtabCurs
32770 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61  or->pVtab = pVta
32780 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  b;..    /* Initi
32790 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f  alize vdbe curso
327a0 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20  r object */.    
327b0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
327c0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
327d0 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20  , 0, -1, 0);.   
327e0 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
327f0 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75     pCur->pVtabCu
32800 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73  rsor = pVtabCurs
32810 6f 72 3b 0a 20 20 20 20 20 20 70 56 74 61 62 2d  or;.      pVtab-
32820 3e 6e 52 65 66 2b 2b 3b 0a 20 20 20 20 7d 65 6c  >nRef++;.    }el
32830 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
32840 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
32850 65 64 20 29 3b 0a 20 20 20 20 20 20 70 4d 6f 64  ed );.      pMod
32860 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61  ule->xClose(pVta
32870 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  bCursor);.      
32880 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
32890 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
328a0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
328b0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
328c0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
328d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
328e0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
328f0 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20  ode: VFilter P1 
32900 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
32910 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b  nopsis: iplan=r[
32920 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a  P3] zplan='P4'.*
32930 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  *.** P1 is a cur
32940 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  sor opened using
32950 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61   VOpen.  P2 is a
32960 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  n address to jum
32970 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66  p to if.** the f
32980 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73  iltered result s
32990 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a  et is empty..**.
329a0 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20  ** P4 is either 
329b0 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67  NULL or a string
329c0 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61   that was genera
329d0 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  ted by the xBest
329e0 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20  Index.** method 
329f0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
32a00 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  The interpretati
32a10 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72  on of the P4 str
32a20 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74  ing is left.** t
32a30 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  o the module imp
32a40 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  lementation..**.
32a50 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
32a60 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74  nvokes the xFilt
32a70 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65  er method on the
32a80 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
32a90 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50  pecified.** by P
32aa0 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20  1.  The integer 
32ab0 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d  query plan param
32ac0 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20  eter to xFilter 
32ad0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
32ae0 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67  ister.** P3. Reg
32af0 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65  ister P3+1 store
32b00 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d  s the argc param
32b10 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65  eter to be passe
32b20 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c  d to the.** xFil
32b30 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69  ter method. Regi
32b40 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31  sters P3+2..P3+1
32b50 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72  +argc are the ar
32b60 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  gc.** additional
32b70 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63   parameters whic
32b80 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a  h are passed to.
32b90 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72  ** xFilter as ar
32ba0 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  gv. Register P3+
32bb0 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30  2 becomes argv[0
32bc0 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f  ] when passed to
32bd0 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   xFilter..**.** 
32be0 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  A jump is made t
32bf0 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75  o P2 if the resu
32c00 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c  lt set after fil
32c10 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20  tering would be 
32c20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  empty..*/.case O
32c30 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f  P_VFilter: {   /
32c40 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
32c50 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65  nArg;.  int iQue
32c60 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry;.  const sqli
32c70 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
32c80 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65  ule;.  Mem *pQue
32c90 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  ry;.  Mem *pArgc
32ca0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
32cb0 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
32cc0 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
32cd0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
32ce0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
32cf0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
32d00 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
32d10 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
32d20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
32d30 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72    pArgc = &pQuer
32d40 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70  y[1];.  pCur = p
32d50 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
32d60 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
32d70 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29  sValid(pQuery) )
32d80 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
32d90 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65  CE(pOp->p3, pQue
32da0 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ry);.  assert( p
32db0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
32dc0 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   );.  pVtabCurso
32dd0 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  r = pCur->pVtabC
32de0 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d  ursor;.  pVtab =
32df0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
32e00 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
32e10 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
32e20 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20  ..  /* Grab the 
32e30 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64  index number and
32e40 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73   argc parameters
32e50 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
32e60 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d  Query->flags&MEM
32e70 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67  _Int)!=0 && pArg
32e80 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  c->flags==MEM_In
32e90 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69  t );.  nArg = (i
32ea0 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20  nt)pArgc->u.i;. 
32eb0 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70   iQuery = (int)p
32ec0 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f  Query->u.i;..  /
32ed0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69  * Invoke the xFi
32ee0 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  lter method */. 
32ef0 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41 72   res = 0;.  apAr
32f00 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
32f10 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72  for(i = 0; i<nAr
32f20 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41  g; i++){.    apA
32f30 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
32f40 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  +1];.  }.  rc = 
32f50 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72  pModule->xFilter
32f60 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51  (pVtabCursor, iQ
32f70 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  uery, pOp->p4.z,
32f80 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20   nArg, apArg);. 
32f90 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
32fa0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
32fb0 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
32fc0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
32fd0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
32fe0 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
32ff0 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  .  }.  pCur->nul
33000 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65  lRow = 0;.  Vdbe
33010 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
33020 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
33030 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
33040 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  p2;.  break;.}.#
33050 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
33060 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
33070 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
33080 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
33090 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
330a0 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  : VColumn P1 P2 
330b0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
330c0 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d  is: r[P3]=vcolum
330d0 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  n(P2).**.** Stor
330e0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
330f0 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20  he P2-th column 
33100 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66  of.** the row of
33110 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
33120 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  le that the .** 
33130 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69  P1 cursor is poi
33140 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65  nting to into re
33150 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
33160 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
33170 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
33180 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
33190 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
331a0 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
331b0 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33  pDest;.  sqlite3
331c0 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78  _context sContex
331d0 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  t;..  VdbeCursor
331e0 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
331f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
33200 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
33210 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  bCursor );.  ass
33220 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
33230 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
33240 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
33250 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
33260 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
33270 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
33280 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28  p, pDest);.  if(
33290 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
332a0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
332b0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
332c0 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
332d0 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
332e0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
332f0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
33300 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
33310 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
33320 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b  dule->xColumn );
33330 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74  .  memset(&sCont
33340 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  ext, 0, sizeof(s
33350 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f  Context));.  sCo
33360 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65  ntext.pOut = pDe
33370 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  st;.  MemSetType
33380 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
33390 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d  Null);.  rc = pM
333a0 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
333b0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
333c0 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
333d0 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2);.  sqlite3
333e0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
333f0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
33400 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  ( sContext.isErr
33410 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  or ){.    rc = s
33420 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b  Context.isError;
33430 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
33440 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
33450 28 70 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67  (pDest, encoding
33460 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
33470 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
33480 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  st);.  UPDATE_MA
33490 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
334a0 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
334b0 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
334c0 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
334d0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
334e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
334f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
33500 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
33510 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
33520 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
33530 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
33540 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
33550 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
33560 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
33570 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
33580 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
33590 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
335a0 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
335b0 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
335c0 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
335d0 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
335e0 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
335f0 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
33600 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
33610 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
33620 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
33630 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
33640 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
33650 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
33660 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
33670 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
33680 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
33690 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
336a0 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
336b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
336c0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
336d0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  tabCursor );.  i
336e0 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
336f0 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
33700 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
33710 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
33720 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
33730 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
33740 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
33750 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a  dule->xNext );..
33760 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
33770 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f  xNext() method o
33780 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68  f the module. Th
33790 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f  ere is no way fo
337a0 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72  r the.  ** under
337b0 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61  lying implementa
337c0 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61  tion to return a
337d0 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f  n error if one o
337e0 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a  ccurs during.  *
337f0 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65  * xNext(). Inste
33800 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ad, if an error 
33810 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20  occurs, true is 
33820 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61  returned (indica
33830 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20  ting that .  ** 
33840 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
33850 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  e) and the error
33860 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77   code returned w
33870 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20  hen xColumn or. 
33880 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d   ** some other m
33890 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e  ethod is next in
338a0 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76  voked on the sav
338b0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
338c0 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72  cursor..  */.  r
338d0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  c = pModule->xNe
338e0 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  xt(pCur->pVtabCu
338f0 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  rsor);.  sqlite3
33900 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
33910 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
33920 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
33930 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  ){.    res = pMo
33940 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d  dule->xEof(pCur-
33950 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
33960 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
33970 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20  aken(!res,2);.  
33980 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
33990 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
339a0 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
339b0 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  */.    goto jump
339c0 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
339d0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
339e0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
339f0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
33a00 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
33a10 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
33a20 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
33a30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
33a40 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
33a50 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
33a60 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
33a70 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
33a80 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
33a90 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
33aa0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
33ab0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
33ac0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
33ad0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
33ae0 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
33af0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
33b00 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
33b10 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
33b20 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
33b30 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
33b40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
33b50 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
33b60 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
33b70 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
33b80 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
33b90 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
33ba0 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
33bb0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
33bc0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
33bd0 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
33be0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
33bf0 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
33c00 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
33c10 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
33c20 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
33c30 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
33c40 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
33c50 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
33c60 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
33c70 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
33c80 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
33c90 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
33ca0 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
33cb0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
33cc0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
33cd0 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
33ce0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
33cf0 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
33d00 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
33d10 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
33d20 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56  K ){.    rc = pV
33d30 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
33d40 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
33d50 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69  me->z);.    sqli
33d60 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
33d70 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
33d80 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
33d90 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
33da0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
33db0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
33dc0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
33dd0 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
33de0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
33df0 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72  Synopsis: data=r
33e00 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34  [P3@P2].**.** P4
33e10 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
33e20 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
33e30 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
33e40 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
33e50 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
33e60 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
33e70 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70  orresponding xUp
33e80 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20  date method. P2 
33e90 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f  values.** are co
33ea0 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20  ntiguous memory 
33eb0 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61  cells starting a
33ec0 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20  t P3 to pass to 
33ed0 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20  the xUpdate .** 
33ee0 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20  invocation. The 
33ef0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
33f00 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72  r (P3+P2-1) corr
33f10 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a  esponds to the .
33f20 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20  ** p2th element 
33f30 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61  of the argv arra
33f40 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64  y passed to xUpd
33f50 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78  ate..**.** The x
33f60 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69  Update method wi
33f70 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f  ll do a DELETE o
33f80 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62  r an INSERT or b
33f90 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76  oth..** The argv
33fa0 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69  [0] element (whi
33fb0 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ch corresponds t
33fc0 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33  o memory cell P3
33fd0 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69  ).** is the rowi
33fe0 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65  d of a row to de
33ff0 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30  lete.  If argv[0
34000 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e  ] is NULL then n
34010 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f  o .** deletion o
34020 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76  ccurs.  The argv
34030 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74  [1] element is t
34040 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
34050 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68  new .** row.  Th
34060 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74  is can be NULL t
34070 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75  o have the virtu
34080 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20  al table select 
34090 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69  the new .** rowi
340a0 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54  d for itself.  T
340b0 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c  he subsequent el
340c0 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  ements in the ar
340d0 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20  ray are .** the 
340e0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
340f0 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  s in the new row
34100 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31  ..**.** If P2==1
34110 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20   then no insert 
34120 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61  is performed.  a
34130 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f  rgv[0] is the ro
34140 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20  wid of.** a row 
34150 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a  to delete..**.**
34160 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 is a boolean
34170 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20   flag. If it is 
34180 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20  set to true and 
34190 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c  the xUpdate call
341a0 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75  .** is successfu
341b0 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  l, then the valu
341c0 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
341d0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
341e0 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73  t_rowid() .** is
341f0 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
34200 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66  e of the rowid f
34210 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20  or the row just 
34220 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  inserted..**.** 
34230 50 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20  P5 is the error 
34240 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c  actions (OE_Repl
34250 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45  ace, OE_Fail, OE
34260 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f  _Ignore, etc) to
34270 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65  .** apply in the
34280 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74   case of a const
34290 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e  raint failure on
342a0 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70   an insert or up
342b0 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
342c0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
342d0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
342e0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
342f0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
34300 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a  le;.  int nArg;.
34310 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
34320 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
34330 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20   Mem **apArg;.  
34340 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65  Mem *pX;..  asse
34350 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20  rt( pOp->p2==1  
34360 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
34370 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70  ==OE_Fail   || p
34380 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62  Op->p5==OE_Rollb
34390 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70  ack .       || p
343a0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p5==OE_Abort
343b0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
343c0 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70  Ignore || pOp->p
343d0 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20  5==OE_Replace.  
343e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
343f0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
34400 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
34410 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
34420 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c   if( pVtab==0 ||
34430 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d   NEVER(pVtab->pM
34440 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20  odule==0) ){.   
34450 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
34460 4b 45 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  KED;.    break;.
34470 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20    }.  pModule = 
34480 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
34490 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32    nArg = pOp->p2
344a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
344b0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42  >p4type==P4_VTAB
344c0 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53   );.  if( ALWAYS
344d0 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74  (pModule->xUpdat
344e0 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61  e) ){.    u8 vta
344f0 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62  bOnConflict = db
34500 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
34510 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
34520 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d  >apArg;.    pX =
34530 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
34540 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
34550 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
34560 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
34570 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20  alid(pX) );.    
34580 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
34590 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20  ge(p, pX);.     
345a0 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a   apArg[i] = pX;.
345b0 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20        pX++;.    
345c0 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  }.    db->vtabOn
345d0 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e  Conflict = pOp->
345e0 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  p5;.    rc = pMo
345f0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56  dule->xUpdate(pV
34600 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  tab, nArg, apArg
34610 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64  , &rowid);.    d
34620 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
34630 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  t = vtabOnConfli
34640 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ct;.    sqlite3V
34650 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
34660 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
34670 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
34680 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20   && pOp->p1 ){. 
34690 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72       assert( nAr
346a0 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20  g>1 && apArg[0] 
346b0 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c  && (apArg[0]->fl
346c0 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b  ags&MEM_Null) );
346d0 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52  .      db->lastR
346e0 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
346f0 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
34700 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
34710 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  )==SQLITE_CONSTR
34720 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e  AINT && pOp->p4.
34730 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69  pVtab->bConstrai
34740 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  nt ){.      if( 
34750 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
34760 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  re ){.        rc
34770 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
34780 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
34790 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
347a0 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f  n = ((pOp->p5==O
347b0 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f  E_Replace) ? OE_
347c0 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29  Abort : pOp->p5)
347d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
347e0 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43  lse{.      p->nC
347f0 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20  hange++;.    }. 
34800 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
34810 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
34820 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
34830 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51   */..#ifndef  SQ
34840 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
34850 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
34860 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20  e: Pagecount P1 
34870 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
34880 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
34890 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
348a0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   in database P1 
348b0 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
348c0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  2..*/.case OP_Pa
348d0 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  gecount: {      
348e0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
348f0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
34900 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
34910 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
34920 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
34930 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70  Page(db->aDb[pOp
34940 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72  ->p1].pBt);.  br
34950 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
34960 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
34970 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
34980 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  AS./* Opcode: Ma
34990 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20  xPgcnt P1 P2 P3 
349a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f  * *.**.** Try to
349b0 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   set the maximum
349c0 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20   page count for 
349d0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74  database P1 to t
349e0 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a  he value in P3..
349f0 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68  ** Do not let th
34a00 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
34a10 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20  ount fall below 
34a20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65  the current page
34a30 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f   count and.** do
34a40 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
34a50 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
34a60 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d  nt value if P3==
34a70 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  0..**.** Store t
34a80 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
34a90 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20  count after the 
34aa0 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74  change in regist
34ab0 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
34ac0 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20  P_MaxPgcnt: {   
34ad0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
34ae0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
34af0 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72  nt newMax;.  Btr
34b00 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 4f 75 74  ee *pBt;..  pOut
34b10 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
34b20 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 42 74  e(p, pOp);.  pBt
34b30 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
34b40 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61  p1].pBt;.  newMa
34b50 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  x = 0;.  if( pOp
34b60 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d  ->p3 ){.    newM
34b70 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ax = sqlite3Btre
34b80 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a  eLastPage(pBt);.
34b90 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c      if( newMax <
34ba0 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
34bb0 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75  p3 ) newMax = (u
34bc0 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b  nsigned)pOp->p3;
34bd0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
34be0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
34bf0 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c  axPageCount(pBt,
34c00 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61   newMax);.  brea
34c10 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  k;.}.#endif.../*
34c20 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20   Opcode: Init * 
34c30 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
34c40 6f 70 73 69 73 3a 20 20 53 74 61 72 74 20 61 74  opsis:  Start at
34c50 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61   P2.**.** Progra
34c60 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  ms contain a sin
34c70 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  gle instance of 
34c80 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74  this opcode as t
34c90 68 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a  he very first.**
34ca0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49   opcode..**.** I
34cb0 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61  f tracing is ena
34cc0 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c  bled (by the sql
34cd0 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e  ite3_trace()) in
34ce0 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a  terface, then.**
34cf0 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e   the UTF-8 strin
34d00 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50  g contained in P
34d10 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20  4 is emitted on 
34d20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
34d30 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20  ck..** Or if P4 
34d40 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68  is blank, use th
34d50 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  e string returne
34d60 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c  d by sqlite3_sql
34d70 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  ()..**.** If P2 
34d80 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d  is not zero, jum
34d90 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
34da0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
34db0 49 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Init: {         
34dc0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68   /* jump */.  ch
34dd0 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68  ar *zTrace;.  ch
34de0 61 72 20 2a 7a 3b 0a 0a 23 69 66 6e 64 65 66 20  ar *z;..#ifndef 
34df0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
34e00 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61  E.  if( db->xTra
34e10 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69  ce.   && !p->doi
34e20 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a  ngRerun.   && (z
34e30 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
34e40 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
34e50 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
34e60 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
34e70 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28  e3VdbeExpandSql(
34e80 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  p, zTrace);.    
34e90 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
34ea0 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
34eb0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
34ec0 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64  db, z);.  }.#ifd
34ed0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  ef SQLITE_USE_FC
34ee0 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61  NTL_TRACE.  zTra
34ef0 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
34f00 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
34f10 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54  >zSql);.  if( zT
34f20 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  race ){.    int 
34f30 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
34f40 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
34f50 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d 61 73  .      if( DbMas
34f60 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
34f70 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74  sk, i)==0 ) cont
34f80 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
34f90 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
34fa0 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  (db, db->aDb[i].
34fb0 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43  zName, SQLITE_FC
34fc0 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63  NTL_TRACE, zTrac
34fd0 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  e);.    }.  }.#e
34fe0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
34ff0 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a  SE_FCNTL_TRACE *
35000 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
35010 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d  DEBUG.  if( (db-
35020 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
35030 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20  SqlTrace)!=0.   
35040 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
35050 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
35060 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
35070 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69  =0.  ){.    sqli
35080 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
35090 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
350a0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23  , zTrace);.  }.#
350b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
350c0 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
350d0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  /* SQLITE_OMIT_T
350e0 52 41 43 45 20 2a 2f 0a 20 20 69 66 28 20 70 4f  RACE */.  if( pO
350f0 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d  p->p2 ) goto jum
35100 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
35110 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
35120 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
35130 5f 48 49 4e 54 53 0a 2f 2a 20 4f 70 63 6f 64 65  _HINTS./* Opcode
35140 3a 20 43 75 72 73 6f 72 48 69 6e 74 20 50 31 20  : CursorHint P1 
35150 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
35160 72 6f 76 69 64 65 20 61 20 68 69 6e 74 20 74 6f  rovide a hint to
35170 20 63 75 72 73 6f 72 20 50 31 20 74 68 61 74 20   cursor P1 that 
35180 69 74 20 6f 6e 6c 79 20 6e 65 65 64 73 20 74 6f  it only needs to
35190 20 72 65 74 75 72 6e 20 72 6f 77 73 20 74 68 61   return rows tha
351a0 74 0a 2a 2a 20 73 61 74 69 73 66 79 20 74 68 65  t.** satisfy the
351b0 20 45 78 70 72 20 69 6e 20 50 34 2e 20 20 54 4b   Expr in P4.  TK
351c0 5f 52 45 47 49 53 54 45 52 20 74 65 72 6d 73 20  _REGISTER terms 
351d0 69 6e 20 74 68 65 20 50 34 20 65 78 70 72 65 73  in the P4 expres
351e0 73 69 6f 6e 20 72 65 66 65 72 0a 2a 2a 20 74 6f  sion refer.** to
351f0 20 76 61 6c 75 65 73 20 63 75 72 72 65 6e 74 6c   values currentl
35200 79 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  y held in regist
35210 65 72 73 2e 20 20 54 4b 5f 43 4f 4c 55 4d 4e 20  ers.  TK_COLUMN 
35220 74 65 72 6d 73 20 69 6e 20 74 68 65 20 50 34 0a  terms in the P4.
35230 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65  ** expression re
35240 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  fer to columns i
35250 6e 20 74 68 65 20 62 2d 74 72 65 65 20 74 6f 20  n the b-tree to 
35260 77 68 69 63 68 20 63 75 72 73 6f 72 20 50 31 20  which cursor P1 
35270 69 73 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2f 0a  is pointing..*/.
35280 63 61 73 65 20 4f 50 5f 43 75 72 73 6f 72 48 69  case OP_CursorHi
35290 6e 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  nt: {.  VdbeCurs
352a0 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
352b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
352c0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
352d0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
352e0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
352f0 5f 45 58 50 52 20 29 3b 0a 20 20 70 43 20 3d 20  _EXPR );.  pC = 
35300 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
35310 5d 3b 0a 20 20 69 66 28 20 70 43 20 29 7b 0a 20  ];.  if( pC ){. 
35320 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
35330 75 72 73 6f 72 48 69 6e 74 28 70 43 2d 3e 70 43  ursorHint(pC->pC
35340 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 48 49 4e  ursor, BTREE_HIN
35350 54 5f 52 41 4e 47 45 2c 20 70 4f 70 2d 3e 70 34  T_RANGE, pOp->p4
35360 2e 70 45 78 70 72 2c 20 61 4d 65 6d 29 3b 0a 20  .pExpr, aMem);. 
35370 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
35380 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45  ndif /* SQLITE_E
35390 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
353a0 54 53 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  TS */../* Opcode
353b0 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a  : Noop * * * * *
353c0 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e  .**.** Do nothin
353d0 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  g.  This instruc
353e0 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73  tion is often us
353f0 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a  eful as a jump.*
35400 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a  * destination..*
35410 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69  /./*.** The magi
35420 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  c Explain opcode
35430 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74   are only insert
35440 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d  ed when explain=
35450 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20  =2 (which.** is 
35460 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20  to say when the 
35470 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
35480 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65  AN syntax is use
35490 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  d.).** This opco
354a0 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72  de records infor
354b0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
354c0 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69  optimizer.  It i
354d0 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s the.** the sam
354e0 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54  e as a no-op.  T
354f0 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72  his opcodesnever
35500 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65   appears in a re
35510 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a  al VM program..*
35520 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20  /.default: {    
35530 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
35540 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20   really OP_Noop 
35550 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a  and OP_Explain *
35560 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
35570 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70  >opcode==OP_Noop
35580 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
35590 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20  =OP_Explain );. 
355a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
355b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
355c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
355d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
355e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
355f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
35600 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
35610 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
35620 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
35630 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
35640 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
35650 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
35660 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
35670 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
35680 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
35690 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
356a0 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
356b0 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
356c0 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
356d0 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
356e0 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
356f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35730 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
35740 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
35750 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
35760 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73   u64 endTime = s
35770 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
35780 20 20 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d        if( endTim
35790 65 3e 73 74 61 72 74 20 29 20 70 4f 72 69 67 4f  e>start ) pOrigO
357a0 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64  p->cycles += end
357b0 54 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20  Time - start;.  
357c0 20 20 20 20 70 4f 72 69 67 4f 70 2d 3e 63 6e 74      pOrigOp->cnt
357d0 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
357e0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  ..    /* The fol
357f0 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73  lowing code adds
35800 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20   nothing to the 
35810 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61  actual functiona
35820 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74  lity.    ** of t
35830 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20  he program.  It 
35840 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72  is only here for
35850 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62   testing and deb
35860 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f  ugging..    ** O
35870 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
35880 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43  , it does burn C
35890 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20  PU cycles every 
358a0 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20  time through.   
358b0 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f   ** the evaluato
358c0 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63  r loop.  So we c
358d0 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20  an leave it out 
358e0 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64  when NDEBUG is d
358f0 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
35900 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
35910 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 26    assert( pOp>=&
35920 61 4f 70 5b 2d 31 5d 20 26 26 20 70 4f 70 3c 26  aOp[-1] && pOp<&
35930 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d 20 29 3b  aOp[p->nOp-1] );
35940 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
35950 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62  DEBUG.    if( db
35960 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
35970 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20  _VdbeTrace ){.  
35980 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20      if( rc!=0 ) 
35990 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22  printf("rc=%d\n"
359a0 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ,rc);.      if( 
359b0 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73  pOrigOp->opflags
359c0 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 29 20   & (OPFLG_OUT2) 
359d0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
359e0 74 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f 70  terTrace(pOrigOp
359f0 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 72 69  ->p2, &aMem[pOri
35a00 67 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  gOp->p2]);.     
35a10 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 72   }.      if( pOr
35a20 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  igOp->opflags & 
35a30 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20  OPFLG_OUT3 ){.  
35a40 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
35a50 61 63 65 28 70 4f 72 69 67 4f 70 2d 3e 70 33 2c  ace(pOrigOp->p3,
35a60 20 26 61 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e   &aMem[pOrigOp->
35a70 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
35a80 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
35a90 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
35aa0 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
35ab0 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
35ac0 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
35ad0 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
35ae0 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
35af0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
35b00 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
35b10 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
35b20 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
35b30 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
35b40 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
35b50 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
35b60 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
35b70 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
35b80 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65  p->rc = rc;.  te
35b90 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
35ba0 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
35bb0 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  !=0 );.  sqlite3
35bc0 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d  _log(rc, "statem
35bd0 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64  ent aborts at %d
35be0 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20  : [%s] %s", .   
35bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c00 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
35c10 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
35c20 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65  rrMsg);.  sqlite
35c30 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
35c40 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49  if( rc==SQLITE_I
35c50 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d  OERR_NOMEM ) db-
35c60 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
35c70 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
35c80 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65  _ERROR;.  if( re
35c90 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
35ca0 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
35cb0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
35cc0 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f  db, resetSchemaO
35cd0 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a  nFault-1);.  }..
35ce0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
35cf0 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
35d00 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
35d10 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
35d20 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
35d30 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
35d40 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
35d50 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
35d60 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
35d70 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f  rn:.  db->lastRo
35d80 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
35d90 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d  .  testcase( nVm
35da0 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61  Step>0 );.  p->a
35db0 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
35dc0 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45  TMTSTATUS_VM_STE
35dd0 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74  P] += (int)nVmSt
35de0 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ep;.  sqlite3Vdb
35df0 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74  eLeave(p);.  ret
35e00 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75  urn rc;..  /* Ju
35e10 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
35e20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c  string or blob l
35e30 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54  arger than SQLIT
35e40 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a  E_MAX_LENGTH.  *
35e50 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  * is encountered
35e60 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a  ..  */.too_big:.
35e70 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
35e80 6f 72 28 70 2c 20 22 73 74 72 69 6e 67 20 6f 72  or(p, "string or
35e90 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b   blob too big");
35ea0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54  .  rc = SQLITE_T
35eb0 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64  OOBIG;.  goto vd
35ec0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
35ed0 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
35ee0 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  e if a malloc() 
35ef0 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d  fails..  */.no_m
35f00 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63  em:.  db->malloc
35f10 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71  Failed = 1;.  sq
35f20 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
35f30 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
35f40 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
35f50 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20  E_NOMEM;.  goto 
35f60 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
35f70 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
35f80 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65  ere for any othe
35f90 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20  r kind of fatal 
35fa0 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22  error.  The "rc"
35fb0 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73   variable.  ** s
35fc0 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65  hould hold the e
35fd0 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a  rror number..  *
35fe0 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  /.abort_due_to_e
35ff0 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20  rror:.  assert( 
36000 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b  p->zErrMsg==0 );
36010 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
36020 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53  cFailed ) rc = S
36030 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69  QLITE_NOMEM;.  i
36040 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f  f( rc!=SQLITE_IO
36050 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ERR_NOMEM ){.   
36060 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
36070 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74  r(p, "%s", sqlit
36080 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
36090 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65   }.  goto vdbe_e
360a0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
360b0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
360c0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74   the sqlite3_int
360d0 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74  errupt() API set
360e0 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a  s the interrupt.
360f0 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a    ** flag..  */.
36100 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
36110 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74  errupt:.  assert
36120 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
36130 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d  rupted );.  rc =
36140 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
36150 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  T;.  p->rc = rc;
36160 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72  .  sqlite3VdbeEr
36170 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
36180 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
36190 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
361a0 6f 72 5f 68 61 6c 74 3b 0a 7d 0a                 or_halt;.}.